Full Code of evgeny-nadymov/telegram-wp for AI

master fd98ac6d1863 cached
2758 files
38.9 MB
10.4M tokens
22381 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (41,440K chars total). Download the full file to get everything.
Repository: evgeny-nadymov/telegram-wp
Branch: master
Commit: fd98ac6d1863
Files: 2758
Total size: 38.9 MB

Directory structure:
gitextract_6z4bjkut/

├── Agents/
│   ├── AgentHost.cs
│   ├── Agents.csproj
│   ├── CallInProgressAgentImpl.cs
│   ├── ForegroundLifetimeAgentImpl.cs
│   ├── MTProtoUpdater.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── PushPayload.cs
│   ├── PushPayload.xml
│   ├── PushUtils.cs
│   ├── RegistrationHelper.cs
│   ├── ScheduledAgentImpl.cs
│   ├── VideoMediaStreamSource.cs
│   └── VideoRenderer.cs
├── BackEnd/
│   ├── ApiLock.cpp
│   ├── ApiLock.h
│   ├── BackEnd.vcxproj
│   ├── BackEndAudio.cpp
│   ├── BackEndAudio.h
│   ├── BackEndCapture.cpp
│   ├── BackEndCapture.h
│   ├── BackEndNativeBuffer.h
│   ├── BackEndTransport.cpp
│   ├── BackEndTransport.h
│   ├── BackgroundTask.cpp
│   ├── BackgroundTask.h
│   ├── CallController.cpp
│   ├── CallController.h
│   ├── Globals.cpp
│   ├── Globals.h
│   ├── ICallControllerStatusListener.h
│   ├── IConfig.h
│   ├── IMTProtoUpdater.h
│   ├── IVideoRenderer.h
│   └── Server.h
├── BackEndProxyStub/
│   ├── BackEndProxyStub.def
│   ├── BackEndProxyStub.vcxproj
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess.h
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess_i.c
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess_p.c
│   ├── PhoneVoIPApp.BackEnd.h
│   ├── PhoneVoIPApp.BackEnd_i.c
│   ├── PhoneVoIPApp.BackEnd_p.c
│   └── dlldata.c
├── EmojiPanel/
│   └── EmojiPanel/
│       ├── App.xaml
│       ├── App.xaml.cs
│       ├── Controls/
│       │   ├── Emoji/
│       │   │   ├── EmojiControl.xaml
│       │   │   ├── EmojiControl.xaml.cs
│       │   │   ├── EmojiData.cs
│       │   │   └── EmojiSpriteItem.cs
│       │   └── Utilites/
│       │       ├── DelayedExecutor.cs
│       │       ├── Helpers.cs
│       │       ├── MyListItemBase.cs
│       │       ├── MyVirtualizingPanel.cs
│       │       ├── VListItemBase.cs
│       │       └── VirtSegment.cs
│       ├── EmojiPanel.csproj
│       ├── MainPage.xaml
│       ├── MainPage.xaml.cs
│       └── Properties/
│           ├── AppManifest.xml
│           ├── AssemblyInfo.cs
│           └── WMAppManifest.xml
├── ExifLib/
│   ├── ExifIO.cs
│   ├── ExifIds.cs
│   ├── ExifLib.csproj
│   ├── ExifReader.cs
│   ├── ExifTag.cs
│   ├── JpegInfo.cs
│   └── Properties/
│       └── AssemblyInfo.cs
├── ExifLib.WP8/
│   ├── ExifLib.WP8.csproj
│   └── Properties/
│       └── AssemblyInfo.cs
├── FFmpegInterop/
│   ├── Source/
│   │   ├── FFmpegInteropMSS.cpp
│   │   ├── FFmpegInteropMSS.h
│   │   ├── FFmpegReader.cpp
│   │   ├── FFmpegReader.h
│   │   ├── H264AVCSampleProvider.cpp
│   │   ├── H264AVCSampleProvider.h
│   │   ├── H264SampleProvider.cpp
│   │   ├── H264SampleProvider.h
│   │   ├── MediaSampleProvider.cpp
│   │   ├── MediaSampleProvider.h
│   │   ├── UncompressedAudioSampleProvider.cpp
│   │   ├── UncompressedAudioSampleProvider.h
│   │   ├── UncompressedVideoSampleProvider.cpp
│   │   └── UncompressedVideoSampleProvider.h
│   └── Win8.1/
│       ├── FFmpegInterop.Shared/
│       │   ├── FFmpegGifDecoder.cpp
│       │   ├── FFmpegGifDecoder.h
│       │   ├── FFmpegInterop.Shared.vcxitems
│       │   ├── FFmpegInterop.Shared.vcxitems.filters
│       │   ├── pch.cpp
│       │   └── pch.h
│       └── FFmpegInterop.WindowsPhone/
│           ├── FFmpegInterop.WindowsPhone.vcxproj
│           └── FFmpegInterop.WindowsPhone.vcxproj.filters
├── LICENSE
├── OpenCVComponent/
│   ├── Assets/
│   │   ├── haarcascade_eye.xml
│   │   ├── haarcascade_frontalface_alt.xml
│   │   └── haarcascade_mouth.xml
│   ├── OpenCVComponent.cpp
│   ├── OpenCVComponent.h
│   ├── OpenCVComponent.vcxproj
│   ├── OpenCVComponent.vcxproj.filters
│   ├── opencv.props
│   ├── pch.cpp
│   └── pch.h
├── README.md
├── Telegram.Api/
│   ├── Aggregator/
│   │   ├── EventAggregator.cs
│   │   └── ExtensionMethods.cs
│   ├── Compression/
│   │   ├── GZipDeflateStream.cs
│   │   └── GZipWebClient.cs
│   ├── Constants.cs
│   ├── Extensions/
│   │   ├── ActionExtensions.cs
│   │   ├── HttpWebRequestExtensions.cs
│   │   ├── StreamExtensions.cs
│   │   └── TLObjectExtensions.cs
│   ├── Hash/
│   │   ├── CRC32/
│   │   │   └── CRC.cs
│   │   └── MD5/
│   │       ├── MD5.cs
│   │       ├── MD5CryptoServiceProvider.cs
│   │       └── MD5Managed.cs
│   ├── Helpers/
│   │   ├── AuthorizationHelper.cs
│   │   ├── Execute.cs
│   │   ├── FileUtils.cs
│   │   ├── IAuthorizationHelper.cs
│   │   ├── Notifications.cs
│   │   ├── PhoneHelper.cs
│   │   ├── RequestHelper.cs
│   │   ├── SettingsHelper.cs
│   │   └── Utils.cs
│   ├── Logs/
│   │   └── Log.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Services/
│   │   ├── Cache/
│   │   │   ├── Context.cs
│   │   │   ├── EventArgs/
│   │   │   │   ├── DialogAddedEventArgs.cs
│   │   │   │   └── TopMessageUpdatedEventArgs.cs
│   │   │   ├── ICacheService.cs
│   │   │   ├── InMemoryCacheService.cs
│   │   │   └── InMemoryDatabase.cs
│   │   ├── Connection/
│   │   │   ├── ConnectionService.cs
│   │   │   └── PublicConfigService.cs
│   │   ├── DCOptionItem.cs
│   │   ├── DelayedItem.cs
│   │   ├── DeviceInfo/
│   │   │   ├── EmptyDeviceInfoService.cs
│   │   │   └── IDeviceInfo.cs
│   │   ├── FileManager/
│   │   │   ├── AudioFileManager.cs
│   │   │   ├── DocumentFileManager.cs
│   │   │   ├── DownloadableItem.cs
│   │   │   ├── DownloadablePart.cs
│   │   │   ├── DownloadingCanceledEventArgs.cs
│   │   │   ├── EncryptedFileManager.cs
│   │   │   ├── FileManager.cs
│   │   │   ├── FileManagerBase.cs
│   │   │   ├── IAudioFileManager.cs
│   │   │   ├── IDocumentFileManager.cs
│   │   │   ├── IEncryptedFileManager.cs
│   │   │   ├── IFileManager.cs
│   │   │   ├── IUploadAudioFileManager.cs
│   │   │   ├── IUploadFileManager.cs
│   │   │   ├── IUploadVideoFileManager.cs
│   │   │   ├── IVideoFileManager.cs
│   │   │   ├── ProgressChangedEventArgs.cs
│   │   │   ├── UploadAudioFileManager.cs
│   │   │   ├── UploadFileManager.cs
│   │   │   ├── UploadVideoFileManager.cs
│   │   │   ├── VideoFileManager.cs
│   │   │   └── Worker.cs
│   │   ├── HistoryItem.cs
│   │   ├── IMTProtoService.cs
│   │   ├── MTProtoService.Account.cs
│   │   ├── MTProtoService.Auth.cs
│   │   ├── MTProtoService.ByTransport.cs
│   │   ├── MTProtoService.Channel.cs
│   │   ├── MTProtoService.Config.cs
│   │   ├── MTProtoService.Contacts.cs
│   │   ├── MTProtoService.DHKeyExchange.cs
│   │   ├── MTProtoService.Help.cs
│   │   ├── MTProtoService.Helpers.cs
│   │   ├── MTProtoService.HttpLongPoll.cs
│   │   ├── MTProtoService.Langpack.cs
│   │   ├── MTProtoService.Messages.cs
│   │   ├── MTProtoService.Payments.cs
│   │   ├── MTProtoService.Phone.cs
│   │   ├── MTProtoService.Photos.cs
│   │   ├── MTProtoService.SecretChats.cs
│   │   ├── MTProtoService.SendingQueue.cs
│   │   ├── MTProtoService.Stuff.cs
│   │   ├── MTProtoService.Updates.cs
│   │   ├── MTProtoService.Upload.cs
│   │   ├── MTProtoService.Users.cs
│   │   ├── MTProtoService.cs
│   │   ├── Messages/
│   │   │   ├── ISenderService.cs
│   │   │   └── SenderService.cs
│   │   ├── ServiceBase.cs
│   │   ├── Updates/
│   │   │   ├── IUpdatesService.cs
│   │   │   ├── ReceiveUpdatesEventArgs.cs
│   │   │   ├── UpdatesBySeqComparer.cs
│   │   │   └── UpdatesService.cs
│   │   └── VoIP/
│   │       ├── IVoIPService.cs
│   │       └── VoIPService.cs
│   ├── TL/
│   │   ├── Account/
│   │   │   ├── TLChangePhone.cs
│   │   │   ├── TLCheckPassword.cs
│   │   │   ├── TLConfirmPhone.cs
│   │   │   ├── TLGetAuthorizations.cs
│   │   │   ├── TLGetPassword.cs
│   │   │   ├── TLGetPasswordSettings.cs
│   │   │   ├── TLGetTmpPassword.cs
│   │   │   ├── TLGetWallPapers.cs
│   │   │   ├── TLRecoverPassword.cs
│   │   │   ├── TLReportPeer.cs
│   │   │   ├── TLRequestPasswordRecovery.cs
│   │   │   ├── TLResetAuthorization.cs
│   │   │   ├── TLResetPassword.cs
│   │   │   ├── TLSendChangePhoneCode.cs
│   │   │   ├── TLSendConfirmPhoneCode.cs
│   │   │   ├── TLSetPassword.cs
│   │   │   ├── TLUpdateDeviceLocked.cs
│   │   │   └── TLUpdatePasswordSettings.cs
│   │   ├── Enums.cs
│   │   ├── Functions/
│   │   │   ├── Account/
│   │   │   │   ├── TLCheckUsername.cs
│   │   │   │   ├── TLDeleteAccount.cs
│   │   │   │   ├── TLGetAccountTTL.cs
│   │   │   │   ├── TLGetNotifySettings.cs
│   │   │   │   ├── TLGetPrivacy.cs
│   │   │   │   ├── TLRegisterDevice.cs
│   │   │   │   ├── TLResetNotifySettings.cs
│   │   │   │   ├── TLSetPrivacy.cs
│   │   │   │   ├── TLUnregisterDevice.cs
│   │   │   │   ├── TLUpdateNotifySettings.cs
│   │   │   │   ├── TLUpdateProfile.cs
│   │   │   │   ├── TLUpdateStatus.cs
│   │   │   │   └── TLUpdateUserName.cs
│   │   │   ├── Auth/
│   │   │   │   ├── TLCancelCode.cs
│   │   │   │   ├── TLCheckPhone.cs
│   │   │   │   ├── TLExportAuthorization.cs
│   │   │   │   ├── TLImportAuthorization.cs
│   │   │   │   ├── TLLogOut.cs
│   │   │   │   ├── TLResendCode.cs
│   │   │   │   ├── TLResetAuthorizations.cs
│   │   │   │   ├── TLSendCall.cs
│   │   │   │   ├── TLSendCode.cs
│   │   │   │   ├── TLSendInvites.cs
│   │   │   │   ├── TLSendSms.cs
│   │   │   │   ├── TLSignIn.cs
│   │   │   │   └── TLSignUp.cs
│   │   │   ├── Channels/
│   │   │   │   ├── TLCheckUsername.cs
│   │   │   │   ├── TLCreateChannel.cs
│   │   │   │   ├── TLDeleteChannel.cs
│   │   │   │   ├── TLDeleteChannelMessages.cs
│   │   │   │   ├── TLDeleteHistory.cs
│   │   │   │   ├── TLDeleteUserHistory.cs
│   │   │   │   ├── TLEditAbout.cs
│   │   │   │   ├── TLEditAdmin.cs
│   │   │   │   ├── TLEditMessage.cs
│   │   │   │   ├── TLEditPhoto.cs
│   │   │   │   ├── TLEditTitle.cs
│   │   │   │   ├── TLExportInvite.cs
│   │   │   │   ├── TLExportMessageLink.cs
│   │   │   │   ├── TLGetAdminedPublicChannels.cs
│   │   │   │   ├── TLGetChannels.cs
│   │   │   │   ├── TLGetDialogs.cs
│   │   │   │   ├── TLGetFullChannel.cs
│   │   │   │   ├── TLGetImportantHistory.cs
│   │   │   │   ├── TLGetMessageEditData.cs
│   │   │   │   ├── TLGetMessages.cs
│   │   │   │   ├── TLGetParticipant.cs
│   │   │   │   ├── TLGetParticipants.cs
│   │   │   │   ├── TLInviteToChannel.cs
│   │   │   │   ├── TLJoinChannel.cs
│   │   │   │   ├── TLKickFromChannel.cs
│   │   │   │   ├── TLLeaveChannel.cs
│   │   │   │   ├── TLReadHistory.cs
│   │   │   │   ├── TLReadMessageContents.cs
│   │   │   │   ├── TLReportSpam.cs
│   │   │   │   ├── TLSetStickers.cs
│   │   │   │   ├── TLToggleComments.cs
│   │   │   │   ├── TLToggleInvites.cs
│   │   │   │   ├── TLTogglePreHistoryHidden.cs
│   │   │   │   ├── TLToggleSignatures.cs
│   │   │   │   ├── TLUpdateChannelUsername.cs
│   │   │   │   └── TLUpdatePinnedMessage.cs
│   │   │   ├── Contacts/
│   │   │   │   ├── TLBlock.cs
│   │   │   │   ├── TLDeleteContact.cs
│   │   │   │   ├── TLDeleteContacts.cs
│   │   │   │   ├── TLGetBlocked.cs
│   │   │   │   ├── TLGetContacts.cs
│   │   │   │   ├── TLGetStatuses.cs
│   │   │   │   ├── TLGetTopPeers.cs
│   │   │   │   ├── TLImportContacts.cs
│   │   │   │   ├── TLResetSaved.cs
│   │   │   │   ├── TLResetTopPeerRating.cs
│   │   │   │   ├── TLResolveUsername.cs
│   │   │   │   ├── TLSearch.cs
│   │   │   │   └── TLUnblock.cs
│   │   │   ├── DHKeyExchange/
│   │   │   │   ├── TLReqDHParams.cs
│   │   │   │   ├── TLReqPQ.cs
│   │   │   │   └── TLSetClientDHParams.cs
│   │   │   ├── Help/
│   │   │   │   ├── TLGetAppChangelog.cs
│   │   │   │   ├── TLGetCdnConfig.cs
│   │   │   │   ├── TLGetConfig.cs
│   │   │   │   ├── TLGetInviteText.cs
│   │   │   │   ├── TLGetNearestDC.cs
│   │   │   │   ├── TLGetRecentMeUrls.cs
│   │   │   │   ├── TLGetSupport.cs
│   │   │   │   ├── TLGetTermsOfService.cs
│   │   │   │   ├── TLInvokeWithLayerN.cs
│   │   │   │   └── TLInvokeWithoutUpdates.cs
│   │   │   ├── Langpack/
│   │   │   │   ├── TLGetDifference.cs
│   │   │   │   ├── TLGetLangPack.cs
│   │   │   │   ├── TLGetLanguages.cs
│   │   │   │   └── TLGetStrings.cs
│   │   │   ├── Messages/
│   │   │   │   ├── TLAcceptEncryption.cs
│   │   │   │   ├── TLAddChatUser.cs
│   │   │   │   ├── TLBotGetCallbackAnswer.cs
│   │   │   │   ├── TLCheckChatInvite.cs
│   │   │   │   ├── TLClearRecentStickers.cs
│   │   │   │   ├── TLCreateChat.cs
│   │   │   │   ├── TLDeactivateChat.cs
│   │   │   │   ├── TLDeleteChatUser.cs
│   │   │   │   ├── TLDeleteHistory.cs
│   │   │   │   ├── TLDeleteMessages.cs
│   │   │   │   ├── TLDiscardEncryption.cs
│   │   │   │   ├── TLEditChatAdmin.cs
│   │   │   │   ├── TLEditChatPhoto.cs
│   │   │   │   ├── TLEditChatTitle.cs
│   │   │   │   ├── TLEditGeoLive.cs
│   │   │   │   ├── TLExportChatInvite.cs
│   │   │   │   ├── TLFaveSticker.cs
│   │   │   │   ├── TLForwardMessage.cs
│   │   │   │   ├── TLForwardMessages.cs
│   │   │   │   ├── TLGetAllDrafts.cs
│   │   │   │   ├── TLGetAllStickers.cs
│   │   │   │   ├── TLGetArchivedStickers.cs
│   │   │   │   ├── TLGetAttachedStickers.cs
│   │   │   │   ├── TLGetChats.cs
│   │   │   │   ├── TLGetCommonChats.cs
│   │   │   │   ├── TLGetDHConfig.cs
│   │   │   │   ├── TLGetDialogs.cs
│   │   │   │   ├── TLGetDocumentByHash.cs
│   │   │   │   ├── TLGetFavedStickers.cs
│   │   │   │   ├── TLGetFeaturedStickers.cs
│   │   │   │   ├── TLGetFullChat.cs
│   │   │   │   ├── TLGetHistory.cs
│   │   │   │   ├── TLGetInlineBotResults.cs
│   │   │   │   ├── TLGetMaskStickers.cs
│   │   │   │   ├── TLGetMessages.cs
│   │   │   │   ├── TLGetPeerDialogs.cs
│   │   │   │   ├── TLGetPeerSettings.cs
│   │   │   │   ├── TLGetPinnedDialogs.cs
│   │   │   │   ├── TLGetRecentLocations.cs
│   │   │   │   ├── TLGetRecentStickers.cs
│   │   │   │   ├── TLGetSavedGifs.cs
│   │   │   │   ├── TLGetStickerSet.cs
│   │   │   │   ├── TLGetStickers.cs
│   │   │   │   ├── TLGetUnreadMentions.cs
│   │   │   │   ├── TLGetUnusedStickers.cs
│   │   │   │   ├── TLGetWebPage.cs
│   │   │   │   ├── TLGetWebPagePreview.cs
│   │   │   │   ├── TLHideReportSpam.cs
│   │   │   │   ├── TLImportChatInvite.cs
│   │   │   │   ├── TLInstallStickerSet.cs
│   │   │   │   ├── TLMigrateChat.cs
│   │   │   │   ├── TLReadEncryptedHistory.cs
│   │   │   │   ├── TLReadFeaturedStickers.cs
│   │   │   │   ├── TLReadHistory.cs
│   │   │   │   ├── TLReadMentions.cs
│   │   │   │   ├── TLReadMessageContents.cs
│   │   │   │   ├── TLReceivedMessages.cs
│   │   │   │   ├── TLReceivedQueue.cs
│   │   │   │   ├── TLReorderPinnedDialogs.cs
│   │   │   │   ├── TLReorderStickerSets.cs
│   │   │   │   ├── TLReportSpam.cs
│   │   │   │   ├── TLRequestEncryption.cs
│   │   │   │   ├── TLRestoreMessages.cs
│   │   │   │   ├── TLSaveDraft.cs
│   │   │   │   ├── TLSaveGif.cs
│   │   │   │   ├── TLSearch.cs
│   │   │   │   ├── TLSearchGifs.cs
│   │   │   │   ├── TLSendBroadcast.cs
│   │   │   │   ├── TLSendEncrypted.cs
│   │   │   │   ├── TLSendEncryptedFile.cs
│   │   │   │   ├── TLSendEncryptedService.cs
│   │   │   │   ├── TLSendInlineBotResult.cs
│   │   │   │   ├── TLSendMedia.cs
│   │   │   │   ├── TLSendMessage.cs
│   │   │   │   ├── TLSendMultiMedia.cs
│   │   │   │   ├── TLSetBotCallbackAnswer.cs
│   │   │   │   ├── TLSetEncryptedTyping.cs
│   │   │   │   ├── TLSetInlineBotResults.cs
│   │   │   │   ├── TLSetTyping.cs
│   │   │   │   ├── TLStartBot.cs
│   │   │   │   ├── TLToggleChatAdmins.cs
│   │   │   │   ├── TLToggleDialogPin.cs
│   │   │   │   ├── TLUninstallStickerSet.cs
│   │   │   │   └── TLUploadMedia.cs
│   │   │   ├── Payments/
│   │   │   │   ├── TLClearSavedInfo.cs
│   │   │   │   ├── TLGetPaymentForm.cs
│   │   │   │   ├── TLGetPaymentReceipt.cs
│   │   │   │   ├── TLGetSavedInfo.cs
│   │   │   │   ├── TLSendPaymentForm.cs
│   │   │   │   └── TLValidateRequestedInfo.cs
│   │   │   ├── Phone/
│   │   │   │   ├── TLAcceptCall.cs
│   │   │   │   ├── TLConfirmCall.cs
│   │   │   │   ├── TLDiscardCall.cs
│   │   │   │   ├── TLGetCallConfig.cs
│   │   │   │   ├── TLReceivedCall.cs
│   │   │   │   ├── TLRequestCall.cs
│   │   │   │   ├── TLSaveCallDebug.cs
│   │   │   │   └── TLSetCallRating.cs
│   │   │   ├── Photos/
│   │   │   │   ├── TLGetUserPhotos.cs
│   │   │   │   ├── TLUpdateProfilePhoto.cs
│   │   │   │   └── TLUploadProfilePhoto.cs
│   │   │   ├── Stuff/
│   │   │   │   ├── TLGetFutureSalts.cs
│   │   │   │   ├── TLHttpWait.cs
│   │   │   │   ├── TLMessageAcknowledgments.cs
│   │   │   │   └── TLRPCDropAnswer.cs
│   │   │   ├── Updates/
│   │   │   │   ├── TLGetChannelDifference.cs
│   │   │   │   ├── TLGetDifference.cs
│   │   │   │   └── TLGetState.cs
│   │   │   ├── Upload/
│   │   │   │   ├── TLGetCdnFile.cs
│   │   │   │   ├── TLGetFile.cs
│   │   │   │   ├── TLReuploadCdnFile.cs
│   │   │   │   └── TLSaveFilePart.cs
│   │   │   └── Users/
│   │   │       ├── TLGetFullUser.cs
│   │   │       └── TLGetUsers.cs
│   │   ├── Interfaces/
│   │   │   ├── IBytes.cs
│   │   │   ├── IFullName.cs
│   │   │   ├── IInputPeer.cs
│   │   │   ├── ISelectable.cs
│   │   │   └── IVIsibility.cs
│   │   ├── SignatureAttribute.cs
│   │   ├── TLAccountAuthorization.cs
│   │   ├── TLAccountAuthorizations.cs
│   │   ├── TLAccountDaysTTL.cs
│   │   ├── TLActionInfo.cs
│   │   ├── TLAdminLogResults.cs
│   │   ├── TLAffectedHistory.cs
│   │   ├── TLAffectedMessages.cs
│   │   ├── TLAllStrickers.cs
│   │   ├── TLAppChangelogBase.cs
│   │   ├── TLArchivedStickers.cs
│   │   ├── TLAudio.cs
│   │   ├── TLAuthorization.cs
│   │   ├── TLBadMessageNotification.cs
│   │   ├── TLBadServerSalt.cs
│   │   ├── TLBool.cs
│   │   ├── TLBotCallbackAnswer.cs
│   │   ├── TLBotCommand.cs
│   │   ├── TLBotInfo.cs
│   │   ├── TLBotInlineMessage.cs
│   │   ├── TLBotInlineResult.cs
│   │   ├── TLBotResults.cs
│   │   ├── TLCallsSecurity.cs
│   │   ├── TLCameraSettings.cs
│   │   ├── TLCdnConfig.cs
│   │   ├── TLCdnFile.cs
│   │   ├── TLCdnPublicKey.cs
│   │   ├── TLChannelAdminLogEvent.cs
│   │   ├── TLChannelAdminLogEventAction.cs
│   │   ├── TLChannelAdminLogEventsFilter.cs
│   │   ├── TLChannelAdminRights.cs
│   │   ├── TLChannelBannedRights.cs
│   │   ├── TLChannelDifference.cs
│   │   ├── TLChannelMessagesFiler.cs
│   │   ├── TLChannelParticipant.cs
│   │   ├── TLChannelParticipantRole.cs
│   │   ├── TLChannelParticipantsFilter.cs
│   │   ├── TLChat.cs
│   │   ├── TLChatFull.cs
│   │   ├── TLChatInvite.cs
│   │   ├── TLChatParticipant.cs
│   │   ├── TLChatParticipants.cs
│   │   ├── TLChatSettings.cs
│   │   ├── TLChats.cs
│   │   ├── TLChatsSlice.cs
│   │   ├── TLCheckedPhone.cs
│   │   ├── TLClientDHInnerData.cs
│   │   ├── TLCodeType.cs
│   │   ├── TLConfig.cs
│   │   ├── TLConfigSimple.cs
│   │   ├── TLContact.cs
│   │   ├── TLContactBlocked.cs
│   │   ├── TLContactFound.cs
│   │   ├── TLContactLink.cs
│   │   ├── TLContactStatus.cs
│   │   ├── TLContacts.cs
│   │   ├── TLContactsBlocked.cs
│   │   ├── TLContactsFound.cs
│   │   ├── TLContainerTransportMessage.cs
│   │   ├── TLDCOption.cs
│   │   ├── TLDHConfig.cs
│   │   ├── TLDHGen.cs
│   │   ├── TLDataJSON.cs
│   │   ├── TLDecryptedMessage.cs
│   │   ├── TLDecryptedMessageAction.cs
│   │   ├── TLDecryptedMessageLayer.cs
│   │   ├── TLDecryptedMessageMedia.cs
│   │   ├── TLDialog.cs
│   │   ├── TLDialogs.cs
│   │   ├── TLDifference.cs
│   │   ├── TLDisabledFeature.cs
│   │   ├── TLDocument.cs
│   │   ├── TLDocumentAttribute.cs
│   │   ├── TLDouble.cs
│   │   ├── TLDraftMessage.cs
│   │   ├── TLEncryptedChat.cs
│   │   ├── TLEncryptedFile.cs
│   │   ├── TLEncryptedMessage.cs
│   │   ├── TLExportedAuthorization.cs
│   │   ├── TLExportedMessageLink.cs
│   │   ├── TLFavedStickers.cs
│   │   ├── TLFeaturedStickers.cs
│   │   ├── TLFile.cs
│   │   ├── TLFileLocation.cs
│   │   ├── TLFileType.cs
│   │   ├── TLForeignLink.cs
│   │   ├── TLFoundGif.cs
│   │   ├── TLFoundGifs.cs
│   │   ├── TLFutureSalt.cs
│   │   ├── TLGame.cs
│   │   ├── TLGeoPoint.cs
│   │   ├── TLGzipPacked.cs
│   │   ├── TLHashtagItem.cs
│   │   ├── TLHighScore.cs
│   │   ├── TLHighScores.cs
│   │   ├── TLImportedContact.cs
│   │   ├── TLImportedContacts.cs
│   │   ├── TLInitConnection.cs
│   │   ├── TLInlineBotSwitchPM.cs
│   │   ├── TLInputAudio.cs
│   │   ├── TLInputBotInlineMessage.cs
│   │   ├── TLInputBotInlineMessageId.cs
│   │   ├── TLInputBotInlineResult.cs
│   │   ├── TLInputChatBase.cs
│   │   ├── TLInputChatPhoto.cs
│   │   ├── TLInputContact.cs
│   │   ├── TLInputDocument.cs
│   │   ├── TLInputEncryptedChat.cs
│   │   ├── TLInputEncryptedFile.cs
│   │   ├── TLInputEncryptedFileBigUploaded.cs
│   │   ├── TLInputEncryptedFileLocation.cs
│   │   ├── TLInputFile.cs
│   │   ├── TLInputFileBig.cs
│   │   ├── TLInputFileLocation.cs
│   │   ├── TLInputGame.cs
│   │   ├── TLInputGeoPoint.cs
│   │   ├── TLInputMedia.cs
│   │   ├── TLInputMessageEntityMentionName.cs
│   │   ├── TLInputMessagesFilter.cs
│   │   ├── TLInputNotifyPeer.cs
│   │   ├── TLInputPaymentCredentials.cs
│   │   ├── TLInputPeer.cs
│   │   ├── TLInputPeerBase.cs
│   │   ├── TLInputPeerNotifyEvents.cs
│   │   ├── TLInputPeerNotifySettings.cs
│   │   ├── TLInputPhoneCall.cs
│   │   ├── TLInputPhoto.cs
│   │   ├── TLInputPhotoCrop.cs
│   │   ├── TLInputPrivacyKey.cs
│   │   ├── TLInputPrivacyRule.cs
│   │   ├── TLInputReportReason.cs
│   │   ├── TLInputSingleMedia.cs
│   │   ├── TLInputStickerSet.cs
│   │   ├── TLInputStickeredMedia.cs
│   │   ├── TLInputUser.cs
│   │   ├── TLInputVideo.cs
│   │   ├── TLInputWebDocument.cs
│   │   ├── TLInt.cs
│   │   ├── TLInt128.cs
│   │   ├── TLInt256.cs
│   │   ├── TLInviteText.cs
│   │   ├── TLInvoice.cs
│   │   ├── TLInvokeAfterMsg.cs
│   │   ├── TLIpPort.cs
│   │   ├── TLKeyboardButton.cs
│   │   ├── TLKeyboardButtonRow.cs
│   │   ├── TLLabeledPrice.cs
│   │   ├── TLLangPackDifference.cs
│   │   ├── TLLangPackLanguage.cs
│   │   ├── TLLangPackString.cs
│   │   ├── TLLink.cs
│   │   ├── TLLong.cs
│   │   ├── TLMaskCoords.cs
│   │   ├── TLMessage.Encrypted.cs
│   │   ├── TLMessage.cs
│   │   ├── TLMessageAction.cs
│   │   ├── TLMessageContainer.cs
│   │   ├── TLMessageEditData.cs
│   │   ├── TLMessageEntity.cs
│   │   ├── TLMessageFwdHeader.cs
│   │   ├── TLMessageGroup.cs
│   │   ├── TLMessageInfo.cs
│   │   ├── TLMessageMedia.cs
│   │   ├── TLMessageRange.cs
│   │   ├── TLMessages.cs
│   │   ├── TLMessagesAcknowledgment.cs
│   │   ├── TLMessagesChannelParticipants.cs
│   │   ├── TLMessagesChatFull.cs
│   │   ├── TLMessagesStickerSet.cs
│   │   ├── TLMyLink.cs
│   │   ├── TLNearestDC.cs
│   │   ├── TLNewSessionCreated.cs
│   │   ├── TLNonEncryptedMessage.cs
│   │   ├── TLNotifyPeer.cs
│   │   ├── TLNull.cs
│   │   ├── TLObject.cs
│   │   ├── TLObjectGenerator.cs
│   │   ├── TLPQInnerData.cs
│   │   ├── TLPage.cs
│   │   ├── TLPageBlock.cs
│   │   ├── TLPasscodeParams.cs
│   │   ├── TLPassword.cs
│   │   ├── TLPasswordInputSettings.cs
│   │   ├── TLPasswordRecovery.cs
│   │   ├── TLPasswordSettings.cs
│   │   ├── TLPaymentCharge.cs
│   │   ├── TLPaymentForm.cs
│   │   ├── TLPaymentReceipt.cs
│   │   ├── TLPaymentRequestedInfo.cs
│   │   ├── TLPaymentResult.cs
│   │   ├── TLPaymentSavedCredentialsCard.cs
│   │   ├── TLPeer.cs
│   │   ├── TLPeerDialogs.cs
│   │   ├── TLPeerNotifyEvents.cs
│   │   ├── TLPeerNotifySettings.cs
│   │   ├── TLPeerSettings.cs
│   │   ├── TLPhoneCall.cs
│   │   ├── TLPhoneCallDiscardReason.cs
│   │   ├── TLPhoneCallProtocol.cs
│   │   ├── TLPhoneConnection.cs
│   │   ├── TLPhonePhoneCall.cs
│   │   ├── TLPhoto.cs
│   │   ├── TLPhotoPickerSettings.cs
│   │   ├── TLPhotoSize.cs
│   │   ├── TLPhotos.cs
│   │   ├── TLPhotosPhoto.cs
│   │   ├── TLPong.cs
│   │   ├── TLPopularContact.cs
│   │   ├── TLPostAddress.cs
│   │   ├── TLPrivacyKey.cs
│   │   ├── TLPrivacyRule.cs
│   │   ├── TLPrivacyRules.cs
│   │   ├── TLProxyConfig.cs
│   │   ├── TLRPCDropAnswer.cs
│   │   ├── TLRPCError.cs
│   │   ├── TLRPCResult.cs
│   │   ├── TLReceivedNotifyMessage.cs
│   │   ├── TLRecentMeUrl.cs
│   │   ├── TLRecentMeUrls.cs
│   │   ├── TLRecentStickers.cs
│   │   ├── TLRecentlyUsedSticker.cs
│   │   ├── TLReplyKeyboardMarkup.cs
│   │   ├── TLRequest.cs
│   │   ├── TLResPQ.cs
│   │   ├── TLResolvedPeer.cs
│   │   ├── TLResponse.cs
│   │   ├── TLResultInfo.cs
│   │   ├── TLRichText.cs
│   │   ├── TLSavedGifs.cs
│   │   ├── TLSavedInfo.cs
│   │   ├── TLSendMessageAction.cs
│   │   ├── TLSentChangePhoneCode.cs
│   │   ├── TLSentCode.cs
│   │   ├── TLSentCodeType.cs
│   │   ├── TLSentEncryptedFile.cs
│   │   ├── TLSentEncryptedMessage.cs
│   │   ├── TLSentMessage.cs
│   │   ├── TLServerDHInnerData.cs
│   │   ├── TLServerDHParams.cs
│   │   ├── TLServerFile.cs
│   │   ├── TLShippingOption.cs
│   │   ├── TLSignatures.cs
│   │   ├── TLState.cs
│   │   ├── TLStatedMessage.cs
│   │   ├── TLStatedMessages.cs
│   │   ├── TLStickerPack.cs
│   │   ├── TLStickerSet.cs
│   │   ├── TLStickerSetCovered.cs
│   │   ├── TLStickerSetInstallResult.cs
│   │   ├── TLStickers.cs
│   │   ├── TLString.cs
│   │   ├── TLSupport.cs
│   │   ├── TLTermsOfService.cs
│   │   ├── TLTmpPassword.cs
│   │   ├── TLTopPeer.cs
│   │   ├── TLTopPeerCategory.cs
│   │   ├── TLTopPeerCategoryPeers.cs
│   │   ├── TLTopPeers.cs
│   │   ├── TLUpdate.cs
│   │   ├── TLUpdates.cs
│   │   ├── TLUserBase.cs
│   │   ├── TLUserFull.cs
│   │   ├── TLUserStatus.cs
│   │   ├── TLUtils.Log.cs
│   │   ├── TLUtils.cs
│   │   ├── TLValidatedRequestedInfo.cs
│   │   ├── TLVector.cs
│   │   ├── TLVideo.cs
│   │   ├── TLWallpaperSolid.cs
│   │   ├── TLWebDocument.cs
│   │   ├── TLWebFile.cs
│   │   └── TLWebPage.cs
│   ├── Telegram.Api.csproj
│   ├── Transport/
│   │   ├── DataEventArgs.cs
│   │   ├── HttpTransport.cs
│   │   ├── ITransport.cs
│   │   ├── ITransportService.cs
│   │   ├── SocksProxy.cs
│   │   ├── TCPTransport.cs
│   │   ├── TCPTransportBase.cs
│   │   ├── TCPTransportResult.cs
│   │   └── TransportService.cs
│   ├── WindowsPhone/
│   │   ├── BigInteger.cs
│   │   └── Tuple.cs
│   └── packages.config
├── Telegram.Api.PCL/
│   ├── Hash/
│   │   └── CRC32/
│   │       └── CRC.WinRT.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resources/
│   │   ├── AppResources.cs
│   │   ├── de/
│   │   │   └── Resources.resw
│   │   ├── en/
│   │   │   └── Resources.resw
│   │   ├── es/
│   │   │   └── Resources.resw
│   │   ├── it/
│   │   │   └── Resources.resw
│   │   ├── nl/
│   │   │   └── Resources.resw
│   │   ├── pt/
│   │   │   └── Resources.resw
│   │   └── ru/
│   │       └── Resources.resw
│   ├── Telegram.Api.PCL.csproj
│   └── packages.config
├── Telegram.Api.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resources/
│   │   ├── AppResources.Designer.cs
│   │   ├── AppResources.de.Designer.cs
│   │   ├── AppResources.de.resx
│   │   ├── AppResources.es.Designer.cs
│   │   ├── AppResources.es.resx
│   │   ├── AppResources.it.Designer.cs
│   │   ├── AppResources.it.resx
│   │   ├── AppResources.nl.Designer.cs
│   │   ├── AppResources.nl.resx
│   │   ├── AppResources.pt.Designer.cs
│   │   ├── AppResources.pt.resx
│   │   ├── AppResources.resx
│   │   ├── AppResources.ru.Designer.cs
│   │   └── AppResources.ru.resx
│   ├── Services/
│   │   ├── FileManager/
│   │   │   ├── IWebFileManager.cs
│   │   │   └── WebFileManager.cs
│   │   └── Location/
│   │       ├── ILiveLocationService.cs
│   │       └── LiveLocationService.cs
│   ├── TL/
│   │   ├── Functions/
│   │   │   ├── Account/
│   │   │   │   ├── TLAcceptAuthorization.cs
│   │   │   │   ├── TLDeleteSecureValue.cs
│   │   │   │   ├── TLGetAllSecureValues.cs
│   │   │   │   ├── TLGetAuthorizationForm.cs
│   │   │   │   ├── TLGetSecureValue.cs
│   │   │   │   ├── TLGetWebAuthorizations.cs
│   │   │   │   ├── TLInitTakeoutSession.cs
│   │   │   │   ├── TLResetWebAuthorization.cs
│   │   │   │   ├── TLResetWebAuthorizations.cs
│   │   │   │   ├── TLSaveSecureValue.cs
│   │   │   │   ├── TLSendVerifyEmailCode.cs
│   │   │   │   ├── TLSendVerifyPhoneCode.cs
│   │   │   │   ├── TLVerifyEmail.cs
│   │   │   │   ├── TLVerifyEmailCode.cs
│   │   │   │   └── TLVerifyPhone.cs
│   │   │   ├── Auth/
│   │   │   │   └── TLBindTempAuthKey.cs
│   │   │   ├── Channels/
│   │   │   │   ├── TLChangeFeedBroadcast.cs
│   │   │   │   ├── TLGetFeed.cs
│   │   │   │   ├── TLReadFeed.cs
│   │   │   │   └── TLSetFeedBroadcasts.cs
│   │   │   ├── Contacts/
│   │   │   │   └── TLGetSaved.cs
│   │   │   ├── Help/
│   │   │   │   ├── TLGetDeepLinkInfo.cs
│   │   │   │   ├── TLGetPassportConfig.cs
│   │   │   │   └── TLGetProxyData.cs
│   │   │   ├── Messages/
│   │   │   │   ├── TLClearAllDrafts.cs
│   │   │   │   ├── TLGetDialogUnreadMarks.cs
│   │   │   │   ├── TLMarkDialogUnread.cs
│   │   │   │   ├── TLReport.cs
│   │   │   │   ├── TLSearchStickerSets.cs
│   │   │   │   └── TLToggleTopPeers.cs
│   │   │   ├── Upload/
│   │   │   │   └── TLGetWebFile.cs
│   │   │   └── Users/
│   │   │       └── TLSetSecureValueErrors.cs
│   │   ├── TLAppUpdate.cs
│   │   ├── TLAuthorizationForm.cs
│   │   ├── TLContactsSettings.cs
│   │   ├── TLDeepLinkInfo.cs
│   │   ├── TLDialogPeer.cs
│   │   ├── TLFeedBroadcasts.cs
│   │   ├── TLFeedPosition.cs
│   │   ├── TLFeedSources.cs
│   │   ├── TLFoundStickerSets.cs
│   │   ├── TLInputCheckPasswordSRP.cs
│   │   ├── TLInputClientProxy.cs
│   │   ├── TLInputDialogPeer.cs
│   │   ├── TLInputMessage.cs
│   │   ├── TLInputSecureFile.cs
│   │   ├── TLInputSecureValue.cs
│   │   ├── TLInvokeWithMessageRange.cs
│   │   ├── TLInvokeWithTakeout.cs
│   │   ├── TLPassportConfig.cs
│   │   ├── TLPasswordKdfAlgo.cs
│   │   ├── TLProxyData.cs
│   │   ├── TLSavedPhoneContact.cs
│   │   ├── TLSecureCredentialsEncrypted.cs
│   │   ├── TLSecureData.cs
│   │   ├── TLSecureFile.cs
│   │   ├── TLSecurePasswordKdfAlgo.cs
│   │   ├── TLSecureRequiredType.cs
│   │   ├── TLSecureSecretSettings.cs
│   │   ├── TLSecureValue.cs
│   │   ├── TLSecureValueError.cs
│   │   ├── TLSecureValueHash.cs
│   │   ├── TLSecureValuePlainData.cs
│   │   ├── TLSecureValueType.cs
│   │   ├── TLSentEmailCode.cs
│   │   ├── TLTakeout.cs
│   │   ├── TLTermsOfServiceUpdate.cs
│   │   ├── TLWebAuthorization.cs
│   │   └── TLWebAuthorizations.cs
│   ├── Telegram.Api.WP8.csproj
│   ├── Transport/
│   │   ├── NativeTcpTransport.cs
│   │   └── TCPTransportWinRT.cs
│   └── packages.config
├── Telegram.Client.TileUpdated/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ScheduledAgent.cs
│   ├── Telegram.Client.TileUpdated.csproj
│   └── packages.config
├── Telegram.Controls/
│   ├── AnimationMediator.cs
│   ├── BindingListener.cs
│   ├── Extensions/
│   │   ├── ScrollViewerExtensions.cs
│   │   └── VisualTreeExtensions.cs
│   ├── FlipCounter.xaml
│   ├── FlipCounter.xaml.cs
│   ├── FlipPanel.xaml
│   ├── FlipPanel.xaml.cs
│   ├── Helpers/
│   │   ├── DependencyPropertyChangedListener.cs
│   │   └── DependencyPropertyValueChangedEventArgs.cs
│   ├── HighlightingTextBlock.cs
│   ├── IHighlightable.cs
│   ├── LazyItemsControl.cs
│   ├── LazyListBox.cs
│   ├── LongListSelector/
│   │   ├── Common/
│   │   │   ├── MotionParameters.cs
│   │   │   ├── SafeRaise.cs
│   │   │   ├── TempaltedVisualTreeExtensions.cs
│   │   │   └── VisualStates.cs
│   │   ├── LongListSelector.cs
│   │   ├── LongListSelectorEventArgs.cs
│   │   ├── LongListSelectorGroup.cs
│   │   ├── LongListSelectorItem.cs
│   │   ├── LongListSelectorItemType.cs
│   │   ├── LongListSelectorItemsControl.cs
│   │   ├── TemplatedListBox.cs
│   │   └── TemplatedListBoxItem.cs
│   ├── MultiTemplateItemsControl.cs
│   ├── MultiTemplateLazyListBox.cs
│   ├── Notifications/
│   │   ├── DialogService.cs
│   │   ├── PopUp.cs
│   │   └── ToastPrompt.cs
│   ├── Profiling/
│   │   ├── ApplicationSpace.cs
│   │   └── MemoryCounter.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── README_FIRST.txt
│   ├── RangeSlider.cs
│   ├── ReorderListBox/
│   │   ├── ReorderListBox.cs
│   │   └── ReorderListBoxItem.cs
│   ├── ScrollableTextBlock.cs
│   ├── SmoothProgressBar.xaml
│   ├── SmoothProgressBar.xaml.cs
│   ├── Telegram.Controls.csproj
│   ├── Themes/
│   │   └── generic.xaml
│   ├── Triggers/
│   │   └── CompressionTrigger.cs
│   ├── UnreadCounter.xaml
│   ├── UnreadCounter.xaml.cs
│   ├── Utils/
│   │   └── Language.cs
│   ├── ValidationTextBox.cs
│   ├── WatermarkTextBox.cs
│   └── packages.config
├── Telegram.Controls.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.Controls.WP8.csproj
│   ├── Utils/
│   │   └── Currency.cs
│   └── packages.config
├── Telegram.EmojiPanel/
│   ├── BrowserNavigationService.cs
│   ├── Controls/
│   │   ├── Emoji/
│   │   │   ├── EmojiControl.xaml
│   │   │   ├── EmojiControl.xaml.cs
│   │   │   ├── EmojiData.cs
│   │   │   ├── EmojiSpriteItem.cs
│   │   │   └── StickerSpriteItem.cs
│   │   └── Utilites/
│   │       ├── DelayedExecutor.cs
│   │       ├── Helpers.cs
│   │       ├── MyListItemBase.cs
│   │       ├── MyVirtualizingPanel.cs
│   │       ├── VListItemBase.cs
│   │       └── VirtSegment.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.EmojiPanel.csproj
│   ├── TelegramRichTextBox.cs
│   ├── TestScrollableTextBlock.cs
│   ├── Themes/
│   │   └── generic.xaml
│   └── packages.config
├── Telegram.EmojiPanel.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.EmojiPanel.WP8.csproj
│   └── packages.config
├── TelegramClient/
│   ├── Analytics/
│   │   ├── AnalyticsProperties.cs
│   │   ├── AnalyticsService.cs
│   │   ├── AnalyticsTracker.cs
│   │   └── ReviewRequester.cs
│   ├── Animation/
│   │   ├── LinqToVisualTree.cs
│   │   ├── MetroInMotion.cs
│   │   └── Navigation/
│   │       ├── AnimatedBasePage.cs
│   │       ├── AnimatorHelperBase.cs
│   │       ├── ContinuumAnimator.cs
│   │       ├── SlideAnimator.cs
│   │       ├── Storyboards.cs
│   │       ├── SwivelAnimator.cs
│   │       ├── TurnstileAnimator.cs
│   │       └── TurnstileFeatherAnimator.cs
│   ├── App.xaml
│   ├── App.xaml.cs
│   ├── Behaviors/
│   │   ├── MarkTapAsHandledBehavior.cs
│   │   ├── PanAndZoomBehavior.cs
│   │   ├── ProgressBarSmoother.cs
│   │   ├── SelectionBehavior.cs
│   │   ├── ThemeToStateBehavior.cs
│   │   ├── ToggleSwitchLocalizedContentBehavior.cs
│   │   └── UpdateTextBindingBehavior.cs
│   ├── Bootstrapper.cs
│   ├── CapabilityPlaceholder.cs
│   ├── Commands.cs
│   ├── Constants.cs
│   ├── Controls/
│   │   ├── BrowserNavigationService.cs
│   │   ├── TelegramNavigationInTransition.cs
│   │   ├── TelegramNavigationOutTransition.cs
│   │   ├── TelegramNavigationTransition.cs
│   │   ├── TelegramRichTextBox.cs
│   │   ├── TelegramTransitionFrame.cs
│   │   ├── TelegramTransitionService.cs
│   │   ├── TelegramTurnstileTransition.cs
│   │   ├── TestScrollableTextBlock.cs
│   │   └── TransitionFrame.cs
│   ├── Converters/
│   │   ├── BackgroundImageConverter.cs
│   │   ├── BooleanToValueConverter.cs
│   │   ├── BooleanToVisibilityConverter.cs
│   │   ├── ChatForbiddenToVisibilityConverter.cs
│   │   ├── ChatToMaxHeight.cs
│   │   ├── ChatToVisibilityConverter.cs
│   │   ├── CountToVisibilityConverter.cs
│   │   ├── DebugVisibilityConverter.cs
│   │   ├── DefaultPhotoConverter.cs
│   │   ├── DialogCaptionConverter.cs
│   │   ├── DialogDetailsBackgroundConverter.cs
│   │   ├── DialogMessageFromConverter.cs
│   │   ├── DistanceAwayConverter.cs
│   │   ├── EmptyDialogMessageConverter.cs
│   │   ├── EmptyPhotoToVisibilityConverter.cs
│   │   ├── EmptyStringToVisibilityConverter.cs
│   │   ├── ExistsToVisibilityConverter.cs
│   │   ├── ExtendedImageConverter.cs
│   │   ├── FileExtToColorConverter.cs
│   │   ├── FileNameConverter.cs
│   │   ├── FileSizeConverter.cs
│   │   ├── ForwardedMessageConverter.cs
│   │   ├── GeoLocationToVisibilityConverter.cs
│   │   ├── GeoPointToStaticGoogleMapsConverter.cs
│   │   ├── GroupToBackgroundBrushValueConverter.cs
│   │   ├── GroupToForegroundBrushValueConverter.cs
│   │   ├── IdToPlaceholderBackgroundConverter.cs
│   │   ├── IntToVisibilityConverter.cs
│   │   ├── InvertBooleanConverter.cs
│   │   ├── IsSelectedToBackgroundConverter.cs
│   │   ├── LowercaseConverter.cs
│   │   ├── MaskConverter.cs
│   │   ├── MediaContactToPhotoConverter.cs
│   │   ├── MediaEmptyToVisibilityConverter.cs
│   │   ├── MediaSizeConverter.cs
│   │   ├── MergeBrushesConverter.cs
│   │   ├── MessageStateToForegroundConverter.cs
│   │   ├── MessageStatusConverter.cs
│   │   ├── MessageToBriefInfoConverter.cs
│   │   ├── MessageToFontFamilyConverter.cs
│   │   ├── MuteUntilToStringConverter.cs
│   │   ├── NotServiceMessageToVisibilityConverter.cs
│   │   ├── NotifySettingsToVisibilityConverter.cs
│   │   ├── OverlayAccentBrushConverter.cs
│   │   ├── PhoneNumberConverter.cs
│   │   ├── PhotoBytesToImageConverter.cs
│   │   ├── PhotoToDimensionConverter.cs
│   │   ├── PhotoToThumbConverter.cs
│   │   ├── PlaceholderDefaultImageConverter.cs
│   │   ├── PrivateBetaToVisibilityConverter.cs
│   │   ├── ProgressToVisibilityConverter.cs
│   │   ├── ReplyMarkupButtonVisibilityConverter.cs
│   │   ├── SecretChatsAvailabilityConverter.cs
│   │   ├── SecretChatsForegroundConverter.cs
│   │   ├── ServiceMessageToTextConverter.cs
│   │   ├── StatusToImageConverter.cs
│   │   ├── StickerSetToCountStringConverter.cs
│   │   ├── StringEqualsToVisibilityConverter.cs
│   │   ├── StringFormatConverter.cs
│   │   ├── TLIntToDateTimeConverter.cs
│   │   ├── TestBindingConverter.cs
│   │   ├── TextMessageToVisibilityConverter.cs
│   │   ├── TextSizeToVisibilityConverter.cs
│   │   ├── UnreadCountToVisibilityConverter.cs
│   │   ├── UnreadMessageConverter.cs
│   │   ├── UnregisteredUserIdToVisibilityConverter.cs
│   │   ├── UppercaseConverter.cs
│   │   ├── UserStatusToBrushConverter.cs
│   │   ├── UserStatusToStringConverter.cs
│   │   ├── UserStatusToVisibilityConverter.cs
│   │   ├── UserToActionStringConverter.cs
│   │   └── WP8VisibilityConverter.cs
│   ├── EmojiKeyboardTemplateSelector.cs
│   ├── EmojiPanel/
│   │   └── Controls/
│   │       ├── Emoji/
│   │       │   ├── EmojiControl.xaml
│   │       │   ├── EmojiControl.xaml.cs
│   │       │   ├── EmojiData.cs
│   │       │   ├── EmojiSpriteItem.cs
│   │       │   └── StickerSpriteItem.cs
│   │       └── Utilities/
│   │           ├── DelayedExecutor.cs
│   │           ├── Helpers.cs
│   │           ├── MyListItemBase.cs
│   │           ├── MyVirtualizingPanel.cs
│   │           ├── VListItemBase.cs
│   │           └── VirtSegment.cs
│   ├── EventArgs/
│   │   └── UpdateChatTitleEventArgs.cs
│   ├── Extensions/
│   │   ├── ApplicationExtensions.cs
│   │   └── CollectionExtensions.cs
│   ├── Helpers/
│   │   ├── Clip.cs
│   │   ├── CollectionHelper.cs
│   │   ├── Execute.cs
│   │   ├── ImageUtils.cs
│   │   ├── ItemsControlHelper.cs
│   │   ├── PhoneHelper.cs
│   │   ├── Property.cs
│   │   └── TemplateSelectors/
│   │       ├── DocumentTemplateSelector.cs
│   │       ├── EmptyDialogToDescriptionConverter.cs
│   │       ├── ItemsPanelTemplateSelector.cs
│   │       ├── LocationTemplateSelector.cs
│   │       ├── MediaTemplateSelector.cs
│   │       ├── MessageTemplateSelector.cs
│   │       └── SearchContactsTemplateSelector.cs
│   ├── Logs/
│   │   └── Log.cs
│   ├── Models/
│   │   ├── AlphaKeyGroup.cs
│   │   ├── ContactsByLastName.cs
│   │   ├── Country.cs
│   │   ├── InAppNotifications.cs
│   │   ├── Settings.cs
│   │   ├── UsersByFirstName.cs
│   │   ├── UsersByLastName.cs
│   │   └── UsersInGroup.cs
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── Resources/
│   │   ├── AppResources.Designer.cs
│   │   ├── AppResources.de.Designer.cs
│   │   ├── AppResources.de.resx
│   │   ├── AppResources.es.Designer.cs
│   │   ├── AppResources.es.resx
│   │   ├── AppResources.it.Designer.cs
│   │   ├── AppResources.it.resx
│   │   ├── AppResources.nl.Designer.cs
│   │   ├── AppResources.nl.resx
│   │   ├── AppResources.pt.Designer.cs
│   │   ├── AppResources.pt.resx
│   │   ├── AppResources.resx
│   │   ├── AppResources.ru.Designer.cs
│   │   ├── AppResources.ru.resx
│   │   ├── LocalizationConverter.cs
│   │   └── LocalizedStrings.cs
│   ├── Services/
│   │   ├── CommonErrorHandler.cs
│   │   ├── HttpDocumentFileManager.cs
│   │   ├── ICommonErrorHandler.cs
│   │   ├── IPushService.cs
│   │   ├── IStateService.cs
│   │   ├── IUploadService.cs
│   │   ├── PhoneInfoService.cs
│   │   ├── PushService.cs
│   │   ├── PushServiceBase.cs
│   │   ├── StateService.cs
│   │   └── UploadService.cs
│   ├── TelegramClient.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── Button.xaml
│   │   │   ├── CheckBox.xaml
│   │   │   ├── ListBox.xaml
│   │   │   ├── LongListSelector.xaml
│   │   │   ├── ScrollViewer.xaml
│   │   │   ├── Slider.xaml
│   │   │   ├── Templates/
│   │   │   │   ├── DataTemplates.xaml
│   │   │   │   ├── ItemsPanel.xaml
│   │   │   │   ├── Media.xaml
│   │   │   │   └── Media.xaml.cs
│   │   │   ├── TextBlock.xaml
│   │   │   ├── TextBox.xaml
│   │   │   ├── Theme.xaml
│   │   │   ├── ToggleButton.xaml
│   │   │   ├── ToggleSwitch.xaml
│   │   │   └── Transitions.xaml
│   │   └── Generic.xaml
│   ├── Utils/
│   │   ├── Color.cs
│   │   ├── Language.cs
│   │   └── TelegramUriMapper.cs
│   ├── ViewModels/
│   │   ├── Additional/
│   │   │   ├── AboutViewModel.cs
│   │   │   ├── AccountSelfDestructsViewModel.cs
│   │   │   ├── AddChatParticipantConfirmationViewModel.cs
│   │   │   ├── AllowUsersViewModel.cs
│   │   │   ├── ArchivedStickersViewModel.cs
│   │   │   ├── AskQuestionConfirmationViewModel.cs
│   │   │   ├── BlockedContactsViewModel.cs
│   │   │   ├── CacheViewModel.cs
│   │   │   ├── ChangePasscodeViewModel.cs
│   │   │   ├── ChangePasswordEmailViewModel.cs
│   │   │   ├── ChangePasswordHintViewModel.cs
│   │   │   ├── ChangePasswordViewModel.cs
│   │   │   ├── ChangePhoneNumberViewModel.cs
│   │   │   ├── ChannelBlockedContactsViewModel.cs
│   │   │   ├── ChatInviteViewModel.cs
│   │   │   ├── ChatSettingsViewModel.cs
│   │   │   ├── ChooseAttachmentViewModel.cs
│   │   │   ├── ChooseBackgroundViewModel.cs
│   │   │   ├── ChooseCountryViewModel.cs
│   │   │   ├── ChooseNotificationSpanViewModel.cs
│   │   │   ├── ChooseTTLViewModel.cs
│   │   │   ├── ClearCacheSettingsViewModel.cs
│   │   │   ├── EditChatUsernameViewModel.cs
│   │   │   ├── EditCurrentUserViewModel.cs
│   │   │   ├── EditPhoneNumberViewModel.cs
│   │   │   ├── EditUsernameViewModel.cs
│   │   │   ├── EncryptionKeyViewModel.cs
│   │   │   ├── EnterPasscodeViewModel.cs
│   │   │   ├── EnterPasswordViewModel.cs
│   │   │   ├── FeaturedStickersViewModel.cs
│   │   │   ├── GroupsViewModel.cs
│   │   │   ├── LastSeenViewModel.cs
│   │   │   ├── LockscreenViewModel.cs
│   │   │   ├── MasksViewModel.cs
│   │   │   ├── MassDeleteReportSpamViewModel.cs
│   │   │   ├── NotificationsViewModel.cs
│   │   │   ├── PasscodeViewModel.cs
│   │   │   ├── PasswordRecoveryViewModel.cs
│   │   │   ├── PasswordViewModel.cs
│   │   │   ├── PrivacySecureViewModel.cs
│   │   │   ├── PrivacyStatementViewModel.cs
│   │   │   ├── SecretChatsViewModel.cs
│   │   │   ├── SelectMultipleUsersViewModel.cs
│   │   │   ├── SessionsViewModel.cs
│   │   │   ├── SettingsViewModel.cs
│   │   │   ├── ShareViewModel.cs
│   │   │   ├── SnapshotsViewModel.cs
│   │   │   ├── SpecialThanksViewModel.cs
│   │   │   ├── StartupViewModel.cs
│   │   │   ├── StickersViewModel.cs
│   │   │   └── WebViewModel.cs
│   │   ├── Auth/
│   │   │   ├── CancelConfirmResetViewModel.cs
│   │   │   ├── ConfirmPasswordViewModel.cs
│   │   │   ├── ConfirmViewModel.cs
│   │   │   ├── ResetAccountViewModel.cs
│   │   │   ├── SignInViewModel.cs
│   │   │   └── SignUpViewModel.cs
│   │   ├── Chats/
│   │   │   ├── AddAdminsViewModel.cs
│   │   │   ├── AddChannelManagerViewModel.cs
│   │   │   ├── AddChatParticipantViewModel.cs
│   │   │   ├── AddSecretChatParticipantViewModel.cs
│   │   │   ├── ChannelAdministratorsViewModel.cs
│   │   │   ├── ChannelIntroViewModel.cs
│   │   │   ├── ChannelMembersViewModel.cs
│   │   │   ├── Chat2ViewModel.cs
│   │   │   ├── ChatDetailsViewModel.cs
│   │   │   ├── ChatViewModel.cs
│   │   │   ├── ConvertToSupergroupViewModel.cs
│   │   │   ├── EditChatViewModel.cs
│   │   │   ├── EditGroupTypeViewModel.cs
│   │   │   ├── GroupsInCommonViewModel.cs
│   │   │   └── InviteLinkViewModel.cs
│   │   ├── Contacts/
│   │   │   ├── ContactDetailsViewModel.cs
│   │   │   ├── ContactInfoViewModel.cs
│   │   │   ├── ContactViewModel.cs
│   │   │   ├── ContactsViewModel.cs
│   │   │   ├── EditContactViewModel.cs
│   │   │   ├── SecretContactDetailsViewModel.cs
│   │   │   ├── SecretContactViewModel.cs
│   │   │   └── ShareContactViewModel.cs
│   │   ├── Debug/
│   │   │   ├── DebugViewModel.cs
│   │   │   ├── LogViewModel.cs
│   │   │   ├── LongPollViewModel.cs
│   │   │   └── PerformanceViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── ChooseDialogViewModel.cs
│   │   │   ├── ChooseParticipantsViewModel.cs
│   │   │   ├── CommandHintsViewModel.cs
│   │   │   ├── CreateBroadcastViewModel.cs
│   │   │   ├── CreateChannelStep1ViewModel.cs
│   │   │   ├── CreateChannelStep2ViewModel.cs
│   │   │   ├── CreateChannelStep3ViewModel.cs
│   │   │   ├── CreateChannelViewModel.cs
│   │   │   ├── CreateDialogViewModel.cs
│   │   │   ├── DialogDetailsMode.cs
│   │   │   ├── DialogDetailsViewModel.Actions.cs
│   │   │   ├── DialogDetailsViewModel.Channel.cs
│   │   │   ├── DialogDetailsViewModel.Contact.cs
│   │   │   ├── DialogDetailsViewModel.Document.cs
│   │   │   ├── DialogDetailsViewModel.Edit.cs
│   │   │   ├── DialogDetailsViewModel.GeoPoint.cs
│   │   │   ├── DialogDetailsViewModel.Handle.cs
│   │   │   ├── DialogDetailsViewModel.InlineBots.cs
│   │   │   ├── DialogDetailsViewModel.Mass.cs
│   │   │   ├── DialogDetailsViewModel.Media.cs
│   │   │   ├── DialogDetailsViewModel.Photo.cs
│   │   │   ├── DialogDetailsViewModel.Reply.cs
│   │   │   ├── DialogDetailsViewModel.Search.cs
│   │   │   ├── DialogDetailsViewModel.Video.cs
│   │   │   ├── DialogDetailsViewModel.cs
│   │   │   ├── DialogSearchMessagesViewModel.cs
│   │   │   ├── DialogsViewModel.Common.cs
│   │   │   ├── DialogsViewModel.cs
│   │   │   ├── FastDialogDetailsViewModel.cs
│   │   │   ├── HashtagHintsViewModel.cs
│   │   │   ├── InlineBotResultsViewModel.cs
│   │   │   ├── MessageViewerViewModel.cs
│   │   │   ├── PinnedMessageViewModel.cs
│   │   │   ├── SecretChatDebugViewModel.cs
│   │   │   ├── SecretDialogDetailsViewModel.Actions.cs
│   │   │   ├── SecretDialogDetailsViewModel.Document.cs
│   │   │   ├── SecretDialogDetailsViewModel.GeoPoint.cs
│   │   │   ├── SecretDialogDetailsViewModel.Handle.cs
│   │   │   ├── SecretDialogDetailsViewModel.InlineBots.cs
│   │   │   ├── SecretDialogDetailsViewModel.Media.cs
│   │   │   ├── SecretDialogDetailsViewModel.Photo.cs
│   │   │   ├── SecretDialogDetailsViewModel.Reply.cs
│   │   │   ├── SecretDialogDetailsViewModel.Text.cs
│   │   │   ├── SecretDialogDetailsViewModel.Video.cs
│   │   │   ├── SecretDialogDetailsViewModel.cs
│   │   │   ├── StickerHintsViewModel.cs
│   │   │   ├── UserActionViewModel.cs
│   │   │   └── UsernameHintsViewModel.cs
│   │   ├── ItemDetailsViewModelBase.cs
│   │   ├── ItemsViewModelBase.cs
│   │   ├── Media/
│   │   │   ├── AnimatedImageViewerViewModel.cs
│   │   │   ├── DecryptedImageViewerViewModel.cs
│   │   │   ├── FilesViewModel.cs
│   │   │   ├── FullMediaViewModel.cs
│   │   │   ├── ImageEditorViewModel.cs
│   │   │   ├── ImageViewerViewModel.cs
│   │   │   ├── LinksViewModel.cs
│   │   │   ├── MapViewModel.cs
│   │   │   ├── MediaViewModel.cs
│   │   │   ├── MusicViewModel.cs
│   │   │   ├── PivotImageViewerViewModel.cs
│   │   │   ├── ProfilePhotoViewerViewModel.cs
│   │   │   ├── SecretMediaViewModel.cs
│   │   │   ├── VideoCaptureViewModel.cs
│   │   │   └── VideoPlayerViewModel.cs
│   │   ├── Search/
│   │   │   ├── ISearch.cs
│   │   │   ├── SearchContactsViewModel.cs
│   │   │   ├── SearchDialogsViewModel.cs
│   │   │   ├── SearchFilesViewModel.cs
│   │   │   ├── SearchItemsViewModelBase.cs
│   │   │   ├── SearchLinksViewModel.cs
│   │   │   ├── SearchMessagesViewModel.cs
│   │   │   ├── SearchMusicViewModel.cs
│   │   │   ├── SearchShellViewModel.cs
│   │   │   ├── SearchVenuesViewModel.cs
│   │   │   └── SearchViewModel.cs
│   │   ├── ShellViewModel.cs
│   │   └── ViewModelBase.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── AboutView.xaml
│   │   │   ├── AboutView.xaml.cs
│   │   │   ├── AccountSelfDestructsView.xaml
│   │   │   ├── AccountSelfDestructsView.xaml.cs
│   │   │   ├── AddChatParticipantConfirmationView.xaml
│   │   │   ├── AddChatParticipantConfirmationView.xaml.cs
│   │   │   ├── AllowUsersView.xaml
│   │   │   ├── AllowUsersView.xaml.cs
│   │   │   ├── ArchivedStickersView.xaml
│   │   │   ├── ArchivedStickersView.xaml.cs
│   │   │   ├── AskQuestionConfirmationView.xaml
│   │   │   ├── AskQuestionConfirmationView.xaml.cs
│   │   │   ├── BlockedContactsView.xaml
│   │   │   ├── BlockedContactsView.xaml.cs
│   │   │   ├── BubbleBackgroundControl.xaml
│   │   │   ├── BubbleBackgroundControl.xaml.cs
│   │   │   ├── CacheView.xaml
│   │   │   ├── CacheView.xaml.cs
│   │   │   ├── ChangePasscodeView.xaml
│   │   │   ├── ChangePasscodeView.xaml.cs
│   │   │   ├── ChangePasswordEmailView.xaml
│   │   │   ├── ChangePasswordEmailView.xaml.cs
│   │   │   ├── ChangePasswordHintView.xaml
│   │   │   ├── ChangePasswordHintView.xaml.cs
│   │   │   ├── ChangePasswordView.xaml
│   │   │   ├── ChangePasswordView.xaml.cs
│   │   │   ├── ChangePhoneNumberView.xaml
│   │   │   ├── ChangePhoneNumberView.xaml.cs
│   │   │   ├── ChannelBlockedContactsView.xaml
│   │   │   ├── ChannelBlockedContactsView.xaml.cs
│   │   │   ├── ChatSettingsView.xaml
│   │   │   ├── ChatSettingsView.xaml.cs
│   │   │   ├── ChooseAttachmentView.xaml
│   │   │   ├── ChooseAttachmentView.xaml.cs
│   │   │   ├── ChooseBackgroundView.xaml
│   │   │   ├── ChooseBackgroundView.xaml.cs
│   │   │   ├── ChooseCountryView.xaml
│   │   │   ├── ChooseCountryView.xaml.cs
│   │   │   ├── ChooseNotificationSpanView.xaml
│   │   │   ├── ChooseNotificationSpanView.xaml.cs
│   │   │   ├── ChooseTTLView.xaml
│   │   │   ├── ChooseTTLView.xaml.cs
│   │   │   ├── ClearCacheSettingsView.xaml
│   │   │   ├── ClearCacheSettingsView.xaml.cs
│   │   │   ├── EditChatUsernameView.xaml
│   │   │   ├── EditChatUsernameView.xaml.cs
│   │   │   ├── EditCurrentUserView.xaml
│   │   │   ├── EditCurrentUserView.xaml.cs
│   │   │   ├── EditPhoneNumberView.xaml
│   │   │   ├── EditPhoneNumberView.xaml.cs
│   │   │   ├── EditUsernameView.xaml
│   │   │   ├── EditUsernameView.xaml.cs
│   │   │   ├── EncryptionKeyView.xaml
│   │   │   ├── EncryptionKeyView.xaml.cs
│   │   │   ├── EnterPasscodeView.xaml
│   │   │   ├── EnterPasscodeView.xaml.cs
│   │   │   ├── EnterPasswordView.xaml
│   │   │   ├── EnterPasswordView.xaml.cs
│   │   │   ├── FallingSnowControl.xaml
│   │   │   ├── FallingSnowControl.xaml.cs
│   │   │   ├── FeaturedStickersView.xaml
│   │   │   ├── FeaturedStickersView.xaml.cs
│   │   │   ├── GroupsView.xaml
│   │   │   ├── GroupsView.xaml.cs
│   │   │   ├── InputMessageHint.xaml
│   │   │   ├── InputMessageHint.xaml.cs
│   │   │   ├── LastSeenView.xaml
│   │   │   ├── LastSeenView.xaml.cs
│   │   │   ├── LockscreenView.xaml
│   │   │   ├── LockscreenView.xaml.cs
│   │   │   ├── MasksView.xaml
│   │   │   ├── MasksView.xaml.cs
│   │   │   ├── MassDeleteReportSpamView.xaml
│   │   │   ├── MassDeleteReportSpamView.xaml.cs
│   │   │   ├── NotificationsView.xaml
│   │   │   ├── NotificationsView.xaml.cs
│   │   │   ├── NumericKeyboard.xaml
│   │   │   ├── NumericKeyboard.xaml.cs
│   │   │   ├── PasscodeView.xaml
│   │   │   ├── PasscodeView.xaml.cs
│   │   │   ├── PasswordRecoveryView.xaml
│   │   │   ├── PasswordRecoveryView.xaml.cs
│   │   │   ├── PasswordView.xaml
│   │   │   ├── PasswordView.xaml.cs
│   │   │   ├── PrivacySecurityView.xaml
│   │   │   ├── PrivacySecurityView.xaml.cs
│   │   │   ├── PrivacyStatementView.xaml
│   │   │   ├── PrivacyStatementView.xaml.cs
│   │   │   ├── SecretChatsView.xaml
│   │   │   ├── SecretChatsView.xaml.cs
│   │   │   ├── SelectMultipleUsersView.xaml
│   │   │   ├── SelectMultipleUsersView.xaml.cs
│   │   │   ├── SessionsView.xaml
│   │   │   ├── SessionsView.xaml.cs
│   │   │   ├── SettingsView.xaml
│   │   │   ├── SettingsView.xaml.cs
│   │   │   ├── ShareView.xaml
│   │   │   ├── ShareView.xaml.cs
│   │   │   ├── SnapshotsView.xaml
│   │   │   ├── SnapshotsView.xaml.cs
│   │   │   ├── SpecialThanksView.xaml
│   │   │   ├── SpecialThanksView.xaml.cs
│   │   │   ├── StartupView.xaml
│   │   │   ├── StartupView.xaml.cs
│   │   │   ├── StickersView.xaml
│   │   │   ├── StickersView.xaml.cs
│   │   │   ├── TelegramPasswordBox.xaml
│   │   │   ├── TelegramPasswordBox.xaml.cs
│   │   │   ├── WebView.xaml
│   │   │   └── WebView.xaml.cs
│   │   ├── Auth/
│   │   │   ├── CancelConfirmResetView.xaml
│   │   │   ├── CancelConfirmResetView.xaml.cs
│   │   │   ├── ConfirmPasswordView.xaml
│   │   │   ├── ConfirmPasswordView.xaml.cs
│   │   │   ├── ConfirmView.xaml
│   │   │   ├── ConfirmView.xaml.cs
│   │   │   ├── ResetAccountView.xaml
│   │   │   ├── ResetAccountView.xaml.cs
│   │   │   ├── SignInView.xaml
│   │   │   ├── SignInView.xaml.cs
│   │   │   ├── SignUpView.xaml
│   │   │   └── SignUpView.xaml.cs
│   │   ├── Chats/
│   │   │   ├── AddAdminsView.xaml
│   │   │   ├── AddAdminsView.xaml.cs
│   │   │   ├── AddChannelManagerView.xaml
│   │   │   ├── AddChannelManagerView.xaml.cs
│   │   │   ├── AddChatParticipantView.xaml
│   │   │   ├── AddChatParticipantView.xaml.cs
│   │   │   ├── AddSecretChatParticipantView.xaml
│   │   │   ├── AddSecretChatParticipantView.xaml.cs
│   │   │   ├── ChannelAdministratorsView.xaml
│   │   │   ├── ChannelAdministratorsView.xaml.cs
│   │   │   ├── ChannelIntroView.xaml
│   │   │   ├── ChannelIntroView.xaml.cs
│   │   │   ├── ChannelMembersView.xaml
│   │   │   ├── ChannelMembersView.xaml.cs
│   │   │   ├── Chat2View.xaml
│   │   │   ├── Chat2View.xaml.cs
│   │   │   ├── ChatDetailsView.xaml
│   │   │   ├── ChatDetailsView.xaml.cs
│   │   │   ├── ChatView.xaml
│   │   │   ├── ChatView.xaml.cs
│   │   │   ├── ConvertToSupergroupView.xaml
│   │   │   ├── ConvertToSupergroupView.xaml.cs
│   │   │   ├── EditChatView.xaml
│   │   │   ├── EditChatView.xaml.cs
│   │   │   ├── EditGroupTypeView.xaml
│   │   │   ├── EditGroupTypeView.xaml.cs
│   │   │   ├── GroupsInCommonView.xaml
│   │   │   ├── GroupsInCommonView.xaml.cs
│   │   │   ├── InviteLinkView.xaml
│   │   │   └── InviteLinkView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ContactDetailsView.xaml
│   │   │   ├── ContactDetailsView.xaml.cs
│   │   │   ├── ContactInfoView.xaml
│   │   │   ├── ContactInfoView.xaml.cs
│   │   │   ├── ContactView.xaml
│   │   │   ├── ContactView.xaml.cs
│   │   │   ├── ContactsView.xaml
│   │   │   ├── ContactsView.xaml.cs
│   │   │   ├── EditContactView.xaml
│   │   │   ├── EditContactView.xaml.cs
│   │   │   ├── SecretContactDetailsView.xaml
│   │   │   ├── SecretContactDetailsView.xaml.cs
│   │   │   ├── SecretContactView.xaml
│   │   │   ├── SecretContactView.xaml.cs
│   │   │   ├── ShareContactView.xaml
│   │   │   └── ShareContactView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── ChatInviteControl.xaml
│   │   │   ├── ChatInviteControl.xaml.cs
│   │   │   ├── ConversationTileControl.xaml
│   │   │   ├── ConversationTileControl.xaml.cs
│   │   │   ├── FeaturedStickerSetControl.xaml
│   │   │   ├── FeaturedStickerSetControl.xaml.cs
│   │   │   ├── MainTitleControl.xaml
│   │   │   ├── MainTitleControl.xaml.cs
│   │   │   ├── MessagePlayerControl.xaml
│   │   │   ├── MessagePlayerControl.xaml.cs
│   │   │   ├── MessageStatusControl.xaml
│   │   │   ├── MessageStatusControl.xaml.cs
│   │   │   ├── PieSlice.cs
│   │   │   ├── SecretPhotoPlaceholder.xaml
│   │   │   ├── SecretPhotoPlaceholder.xaml.cs
│   │   │   ├── StickerSetControl.xaml
│   │   │   ├── StickerSetControl.xaml.cs
│   │   │   ├── UnreadCounter.xaml
│   │   │   ├── UnreadCounter.xaml.cs
│   │   │   ├── UserTileControl.xaml
│   │   │   └── UserTileControl.xaml.cs
│   │   ├── Debug/
│   │   │   ├── DebugView.xaml
│   │   │   ├── DebugView.xaml.cs
│   │   │   ├── LongPollView.xaml
│   │   │   ├── LongPollView.xaml.cs
│   │   │   ├── PerformanceView.xaml
│   │   │   └── PerformanceView.xaml.cs
│   │   ├── DialogDetailsView.xaml
│   │   ├── DialogDetailsView.xaml.cs
│   │   ├── Dialogs/
│   │   │   ├── ChooseDialogView.xaml
│   │   │   ├── ChooseDialogView.xaml.cs
│   │   │   ├── ChooseParticipantsView.xaml
│   │   │   ├── ChooseParticipantsView.xaml.cs
│   │   │   ├── CommandHintsView.xaml
│   │   │   ├── CommandHintsView.xaml.cs
│   │   │   ├── CommandsControl.xaml
│   │   │   ├── CommandsControl.xaml.cs
│   │   │   ├── CreateBroadcastView.xaml
│   │   │   ├── CreateBroadcastView.xaml.cs
│   │   │   ├── CreateChannelStep1View.xaml
│   │   │   ├── CreateChannelStep1View.xaml.cs
│   │   │   ├── CreateChannelStep2View.xaml
│   │   │   ├── CreateChannelStep2View.xaml.cs
│   │   │   ├── CreateChannelStep3View.xaml
│   │   │   ├── CreateChannelStep3View.xaml.cs
│   │   │   ├── CreateChannelView.xaml
│   │   │   ├── CreateChannelView.xaml.cs
│   │   │   ├── CreateDialogView.xaml
│   │   │   ├── CreateDialogView.xaml.cs
│   │   │   ├── DialogDetailsView.xaml
│   │   │   ├── DialogDetailsView.xaml.cs
│   │   │   ├── DialogSearchMessagesView.xaml
│   │   │   ├── DialogSearchMessagesView.xaml.cs
│   │   │   ├── DialogsView.xaml
│   │   │   ├── DialogsView.xaml.cs
│   │   │   ├── EmojiKeyboard.xaml
│   │   │   ├── EmojiKeyboard.xaml.cs
│   │   │   ├── EmojiKeyboardControl.xaml
│   │   │   ├── EmojiKeyboardControl.xaml.cs
│   │   │   ├── FastDialogDetailsView.xaml
│   │   │   ├── FastDialogDetailsView.xaml.cs
│   │   │   ├── HashtagHintsView.xaml
│   │   │   ├── HashtagHintsView.xaml.cs
│   │   │   ├── InlineBotResultsView.xaml
│   │   │   ├── InlineBotResultsView.xaml.cs
│   │   │   ├── MessageViewerView.xaml
│   │   │   ├── MessageViewerView.xaml.cs
│   │   │   ├── PinnedMessageView.xaml
│   │   │   ├── PinnedMessageView.xaml.cs
│   │   │   ├── SecretChatDebugView.xaml
│   │   │   ├── SecretChatDebugView.xaml.cs
│   │   │   ├── SecretDialogDetailsView.xaml
│   │   │   ├── SecretDialogDetailsView.xaml.cs
│   │   │   ├── StickerHintsView.xaml
│   │   │   ├── StickerHintsView.xaml.cs
│   │   │   ├── StickerPreviewMenu.xaml
│   │   │   ├── StickerPreviewMenu.xaml.cs
│   │   │   ├── UserActionView.xaml
│   │   │   ├── UserActionView.xaml.cs
│   │   │   ├── UsernameHintsView.xaml
│   │   │   └── UsernameHintsView.xaml.cs
│   │   ├── Media/
│   │   │   ├── AnimatedImageViewerView.xaml
│   │   │   ├── AnimatedImageViewerView.xaml.cs
│   │   │   ├── DecryptedImageViewerView.xaml
│   │   │   ├── DecryptedImageViewerView.xaml.cs
│   │   │   ├── FilesView.xaml
│   │   │   ├── FilesView.xaml.cs
│   │   │   ├── FullMediaView.xaml
│   │   │   ├── FullMediaView.xaml.cs
│   │   │   ├── ImageEditorView.xaml
│   │   │   ├── ImageEditorView.xaml.cs
│   │   │   ├── ImageViewerView.xaml
│   │   │   ├── ImageViewerView.xaml.cs
│   │   │   ├── LinksView.xaml
│   │   │   ├── LinksView.xaml.cs
│   │   │   ├── MapTileSources/
│   │   │   │   ├── GoogleMapsTileSource.cs
│   │   │   │   ├── OpenAeralMapTileSource.cs
│   │   │   │   └── OpenStreetMapTileSource.cs
│   │   │   ├── MapView.xaml
│   │   │   ├── MapView.xaml.cs
│   │   │   ├── MediaView.xaml
│   │   │   ├── MediaView.xaml.cs
│   │   │   ├── MusicView.xaml
│   │   │   ├── MusicView.xaml.cs
│   │   │   ├── ProfilePhotoViewerView.xaml
│   │   │   ├── ProfilePhotoViewerView.xaml.cs
│   │   │   ├── SecretMediaView.xaml
│   │   │   ├── SecretMediaView.xaml.cs
│   │   │   ├── VideoCaptureView.xaml
│   │   │   ├── VideoCaptureView.xaml.cs
│   │   │   ├── VideoPlayerView.xaml
│   │   │   └── VideoPlayerView.xaml.cs
│   │   ├── Search/
│   │   │   ├── SearchContactsView.xaml
│   │   │   ├── SearchContactsView.xaml.cs
│   │   │   ├── SearchDialogsView.xaml
│   │   │   ├── SearchDialogsView.xaml.cs
│   │   │   ├── SearchFilesView.xaml
│   │   │   ├── SearchFilesView.xaml.cs
│   │   │   ├── SearchLinksView.xaml
│   │   │   ├── SearchLinksView.xaml.cs
│   │   │   ├── SearchMessagesView.xaml
│   │   │   ├── SearchMessagesView.xaml.cs
│   │   │   ├── SearchMusicView.xaml
│   │   │   ├── SearchMusicView.xaml.cs
│   │   │   ├── SearchShellView.xaml
│   │   │   ├── SearchShellView.xaml.cs
│   │   │   ├── SearchVenuesView.xaml
│   │   │   ├── SearchVenuesView.xaml.cs
│   │   │   ├── SearchView.xaml
│   │   │   └── SearchView.xaml.cs
│   │   ├── ShellView.xaml
│   │   ├── ShellView.xaml.cs
│   │   └── TelegramViewBase.cs
│   └── packages.config
├── TelegramClient.Native/
│   ├── ConnectionSocket.cpp
│   ├── ConnectionSocket.h
│   ├── EmojiSuggestion.cpp
│   ├── EmojiSuggestion.h
│   ├── TelegramClient.Native.vcxproj
│   ├── TelegramClient.Native.vcxproj.filters
│   ├── emoji_suggestions.cpp
│   ├── emoji_suggestions.h
│   ├── emoji_suggestions_data.cpp
│   ├── emoji_suggestions_data.h
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.Opus/
│   ├── COpusCodec.cpp
│   ├── COpusCodec.h
│   ├── TelegramClient.Opus.cpp
│   ├── TelegramClient.Opus.h
│   ├── TelegramClient.Opus.vcxproj
│   ├── TelegramClient.Opus.vcxproj.filters
│   ├── audio.c
│   ├── opus/
│   │   ├── celt/
│   │   │   ├── _kiss_fft_guts.h
│   │   │   ├── arch.h
│   │   │   ├── arm/
│   │   │   │   ├── arm_celt_map.c
│   │   │   │   ├── armcpu.c
│   │   │   │   ├── armcpu.h
│   │   │   │   ├── fixed_armv4.h
│   │   │   │   ├── fixed_armv5e.h
│   │   │   │   ├── kiss_fft_armv4.h
│   │   │   │   ├── kiss_fft_armv5e.h
│   │   │   │   └── pitch_arm.h
│   │   │   ├── bands.c
│   │   │   ├── bands.h
│   │   │   ├── celt.c
│   │   │   ├── celt.h
│   │   │   ├── celt_decoder.c
│   │   │   ├── celt_encoder.c
│   │   │   ├── celt_lpc.c
│   │   │   ├── celt_lpc.h
│   │   │   ├── cpu_support.h
│   │   │   ├── cwrs.c
│   │   │   ├── cwrs.h
│   │   │   ├── ecintrin.h
│   │   │   ├── entcode.c
│   │   │   ├── entcode.h
│   │   │   ├── entdec.c
│   │   │   ├── entdec.h
│   │   │   ├── entenc.c
│   │   │   ├── entenc.h
│   │   │   ├── fixed_debug.h
│   │   │   ├── fixed_generic.h
│   │   │   ├── float_cast.h
│   │   │   ├── kiss_fft.c
│   │   │   ├── kiss_fft.h
│   │   │   ├── laplace.c
│   │   │   ├── laplace.h
│   │   │   ├── mathops.c
│   │   │   ├── mathops.h
│   │   │   ├── mdct.c
│   │   │   ├── mdct.h
│   │   │   ├── mfrngcod.h
│   │   │   ├── modes.c
│   │   │   ├── modes.h
│   │   │   ├── os_support.h
│   │   │   ├── pitch.c
│   │   │   ├── pitch.h
│   │   │   ├── quant_bands.c
│   │   │   ├── quant_bands.h
│   │   │   ├── rate.c
│   │   │   ├── rate.h
│   │   │   ├── stack_alloc.h
│   │   │   ├── static_modes_fixed.h
│   │   │   ├── static_modes_float.h
│   │   │   ├── vq.c
│   │   │   ├── vq.h
│   │   │   └── x86/
│   │   │       └── pitch_sse.h
│   │   ├── include/
│   │   │   ├── opus.h
│   │   │   ├── opus_custom.h
│   │   │   ├── opus_defines.h
│   │   │   ├── opus_multistream.h
│   │   │   └── opus_types.h
│   │   ├── ogg/
│   │   │   ├── bitwise.c
│   │   │   ├── framing.c
│   │   │   ├── ogg.h
│   │   │   └── os_types.h
│   │   ├── opusfile/
│   │   │   ├── info.c
│   │   │   ├── internal.c
│   │   │   ├── internal.h
│   │   │   ├── opusfile.c
│   │   │   ├── opusfile.h
│   │   │   └── stream.c
│   │   ├── silk/
│   │   │   ├── A2NLSF.c
│   │   │   ├── API.h
│   │   │   ├── CNG.c
│   │   │   ├── HP_variable_cutoff.c
│   │   │   ├── Inlines.h
│   │   │   ├── LPC_analysis_filter.c
│   │   │   ├── LPC_inv_pred_gain.c
│   │   │   ├── LP_variable_cutoff.c
│   │   │   ├── MacroCount.h
│   │   │   ├── MacroDebug.h
│   │   │   ├── NLSF2A.c
│   │   │   ├── NLSF_VQ.c
│   │   │   ├── NLSF_VQ_weights_laroia.c
│   │   │   ├── NLSF_decode.c
│   │   │   ├── NLSF_del_dec_quant.c
│   │   │   ├── NLSF_encode.c
│   │   │   ├── NLSF_stabilize.c
│   │   │   ├── NLSF_unpack.c
│   │   │   ├── NSQ.c
│   │   │   ├── NSQ_del_dec.c
│   │   │   ├── PLC.c
│   │   │   ├── PLC.h
│   │   │   ├── SigProc_FIX.h
│   │   │   ├── VAD.c
│   │   │   ├── VQ_WMat_EC.c
│   │   │   ├── ana_filt_bank_1.c
│   │   │   ├── arm/
│   │   │   │   ├── SigProc_FIX_armv4.h
│   │   │   │   ├── SigProc_FIX_armv5e.h
│   │   │   │   ├── macros_armv4.h
│   │   │   │   └── macros_armv5e.h
│   │   │   ├── biquad_alt.c
│   │   │   ├── bwexpander.c
│   │   │   ├── bwexpander_32.c
│   │   │   ├── check_control_input.c
│   │   │   ├── code_signs.c
│   │   │   ├── control.h
│   │   │   ├── control_SNR.c
│   │   │   ├── control_audio_bandwidth.c
│   │   │   ├── control_codec.c
│   │   │   ├── debug.c
│   │   │   ├── debug.h
│   │   │   ├── dec_API.c
│   │   │   ├── decode_core.c
│   │   │   ├── decode_frame.c
│   │   │   ├── decode_indices.c
│   │   │   ├── decode_parameters.c
│   │   │   ├── decode_pitch.c
│   │   │   ├── decode_pulses.c
│   │   │   ├── decoder_set_fs.c
│   │   │   ├── define.h
│   │   │   ├── enc_API.c
│   │   │   ├── encode_indices.c
│   │   │   ├── encode_pulses.c
│   │   │   ├── errors.h
│   │   │   ├── fixed/
│   │   │   │   ├── LTP_analysis_filter_FIX.c
│   │   │   │   ├── LTP_scale_ctrl_FIX.c
│   │   │   │   ├── apply_sine_window_FIX.c
│   │   │   │   ├── autocorr_FIX.c
│   │   │   │   ├── burg_modified_FIX.c
│   │   │   │   ├── corrMatrix_FIX.c
│   │   │   │   ├── encode_frame_FIX.c
│   │   │   │   ├── find_LPC_FIX.c
│   │   │   │   ├── find_LTP_FIX.c
│   │   │   │   ├── find_pitch_lags_FIX.c
│   │   │   │   ├── find_pred_coefs_FIX.c
│   │   │   │   ├── k2a_FIX.c
│   │   │   │   ├── k2a_Q16_FIX.c
│   │   │   │   ├── main_FIX.h
│   │   │   │   ├── noise_shape_analysis_FIX.c
│   │   │   │   ├── pitch_analysis_core_FIX.c
│   │   │   │   ├── prefilter_FIX.c
│   │   │   │   ├── process_gains_FIX.c
│   │   │   │   ├── regularize_correlations_FIX.c
│   │   │   │   ├── residual_energy16_FIX.c
│   │   │   │   ├── residual_energy_FIX.c
│   │   │   │   ├── schur64_FIX.c
│   │   │   │   ├── schur_FIX.c
│   │   │   │   ├── solve_LS_FIX.c
│   │   │   │   ├── structs_FIX.h
│   │   │   │   ├── vector_ops_FIX.c
│   │   │   │   └── warped_autocorrelation_FIX.c
│   │   │   ├── gain_quant.c
│   │   │   ├── init_decoder.c
│   │   │   ├── init_encoder.c
│   │   │   ├── inner_prod_aligned.c
│   │   │   ├── interpolate.c
│   │   │   ├── lin2log.c
│   │   │   ├── log2lin.c
│   │   │   ├── macros.h
│   │   │   ├── main.h
│   │   │   ├── pitch_est_defines.h
│   │   │   ├── pitch_est_tables.c
│   │   │   ├── process_NLSFs.c
│   │   │   ├── quant_LTP_gains.c
│   │   │   ├── resampler.c
│   │   │   ├── resampler_down2.c
│   │   │   ├── resampler_down2_3.c
│   │   │   ├── resampler_private.h
│   │   │   ├── resampler_private_AR2.c
│   │   │   ├── resampler_private_IIR_FIR.c
│   │   │   ├── resampler_private_down_FIR.c
│   │   │   ├── resampler_private_up2_HQ.c
│   │   │   ├── resampler_rom.c
│   │   │   ├── resampler_rom.h
│   │   │   ├── resampler_structs.h
│   │   │   ├── shell_coder.c
│   │   │   ├── sigm_Q15.c
│   │   │   ├── sort.c
│   │   │   ├── stereo_LR_to_MS.c
│   │   │   ├── stereo_MS_to_LR.c
│   │   │   ├── stereo_decode_pred.c
│   │   │   ├── stereo_encode_pred.c
│   │   │   ├── stereo_find_predictor.c
│   │   │   ├── stereo_quant_pred.c
│   │   │   ├── structs.h
│   │   │   ├── sum_sqr_shift.c
│   │   │   ├── table_LSF_cos.c
│   │   │   ├── tables.h
│   │   │   ├── tables_LTP.c
│   │   │   ├── tables_NLSF_CB_NB_MB.c
│   │   │   ├── tables_NLSF_CB_WB.c
│   │   │   ├── tables_gain.c
│   │   │   ├── tables_other.c
│   │   │   ├── tables_pitch_lag.c
│   │   │   ├── tables_pulses_per_block.c
│   │   │   ├── tuning_parameters.h
│   │   │   └── typedef.h
│   │   └── src/
│   │       ├── analysis.c
│   │       ├── analysis.h
│   │       ├── mlp.c
│   │       ├── mlp.h
│   │       ├── mlp_data.c
│   │       ├── opus.c
│   │       ├── opus_decoder.c
│   │       ├── opus_encoder.c
│   │       ├── opus_multistream.c
│   │       ├── opus_multistream_decoder.c
│   │       ├── opus_multistream_encoder.c
│   │       ├── opus_private.h
│   │       ├── repacketizer.c
│   │       ├── repacketizer_demo.c
│   │       └── tansig_table.h
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.Player/
│   ├── AudioPlayer.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.Player.csproj
├── TelegramClient.Player.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.Player.WP8.csproj
├── TelegramClient.ScheduledTaskAgent/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ScheduledAgent.cs
│   └── TelegramClient.ScheduledTaskAgent.csproj
├── TelegramClient.ScheduledTaskAgent.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.ScheduledTaskAgent.WP8.csproj
├── TelegramClient.Tasks/
│   ├── BackgroundDifferenceLoader.cs
│   ├── InteractiveNotificationsBackgroundTask.cs
│   ├── MessageSchedulerBackgroundTask.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── PushNotificationsBackgroundTask.cs
│   ├── PushUtils.cs
│   ├── Resources/
│   │   ├── de/
│   │   │   └── Resources.resw
│   │   ├── en/
│   │   │   └── Resources.resw
│   │   ├── es/
│   │   │   └── Resources.resw
│   │   ├── it/
│   │   │   └── Resources.resw
│   │   ├── nl/
│   │   │   └── Resources.resw
│   │   ├── pt/
│   │   │   └── Resources.resw
│   │   └── ru/
│   │       └── Resources.resw
│   └── TelegramClient.Tasks.csproj
├── TelegramClient.WP8/
│   ├── Behaviors/
│   │   └── InfiniteScrollingBehavior.cs
│   ├── Controls/
│   │   └── StartView/
│   │       ├── DragEventArgs.cs
│   │       ├── FlickEventArgs.cs
│   │       ├── GestureEventArgs.cs
│   │       ├── GestureHelper.cs
│   │       ├── InputBaseArgs.cs
│   │       ├── InputCompletedArgs.cs
│   │       ├── InputDeltaArgs.cs
│   │       ├── ManipulationGestureHelper.cs
│   │       ├── SafeRaise.cs
│   │       ├── StartView.cs
│   │       ├── StartViewItem.cs
│   │       ├── StartViewPanel.cs
│   │       └── TransformAnimator.cs
│   ├── LongListSelectorEx.cs
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── TelegramClient.WP8.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── LongListSelector.xaml
│   │   │   └── ToggleSwitch.xaml
│   │   └── Generic.xaml
│   ├── ViewModels/
│   │   ├── Contacts/
│   │   │   └── ContactsViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsViewModel.Audio.cs
│   │   │   ├── DialogsViewModel.cs
│   │   │   └── SecretDialogDetailsViewModel.Audio.cs
│   │   └── Media/
│   │       └── MultiImageEditorViewModel.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── StartupView.xaml
│   │   │   └── StartupView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ContactsView.xaml
│   │   │   └── ContactsView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── AudioRecorderControl.xaml
│   │   │   └── AudioRecorderControl.xaml.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsView.xaml
│   │   │   ├── DialogDetailsView.xaml.cs
│   │   │   ├── DialogsView.xaml
│   │   │   ├── DialogsView.xaml.cs
│   │   │   ├── SecretDialogDetailsView.xaml
│   │   │   └── SecretDialogDetailsView.xaml.cs
│   │   └── Media/
│   │       ├── FilesView.xaml
│   │       ├── FilesView.xaml.cs
│   │       ├── LinksView.xaml
│   │       ├── LinksView.xaml.cs
│   │       ├── MediaView.xaml
│   │       ├── MediaView.xaml.cs
│   │       ├── MultiImageEditorView.xaml
│   │       └── MultiImageEditorView.xaml.cs
│   ├── app.config
│   └── packages.config
├── TelegramClient.WP81/
│   ├── BackgroundProcess.cs
│   ├── Behaviors/
│   │   ├── FocusNextElementOnEnterBehavior.cs
│   │   └── InfiniteScrollingBehavior.cs
│   ├── BugsenseWrapper.cs
│   ├── Controls/
│   │   ├── GestureListener/
│   │   │   ├── GestureHelperEventArgs.cs
│   │   │   ├── GestureListener.cs
│   │   │   ├── GestureListenerStatic.cs
│   │   │   ├── GestureService.cs
│   │   │   ├── MathHelpers.cs
│   │   │   └── SafeRaise.cs
│   │   └── StartView/
│   │       ├── DragEventArgs.cs
│   │       ├── FlickEventArgs.cs
│   │       ├── GestureEventArgs.cs
│   │       ├── GestureHelper.cs
│   │       ├── InputBaseArgs.cs
│   │       ├── InputCompletedArgs.cs
│   │       ├── InputDeltaArgs.cs
│   │       ├── ManipulationGestureHelper.cs
│   │       ├── SafeRaise.cs
│   │       ├── StartView.cs
│   │       ├── StartViewItem.cs
│   │       ├── StartViewPanel.cs
│   │       └── TransformAnimator.cs
│   ├── Converters/
│   │   ├── ChannelParticipantsCountConverter.cs
│   │   ├── SecureFilePreviewConverter.cs
│   │   ├── ShippingOptionToStringConverter.cs
│   │   └── TTLMediaToVisibilityConverter.cs
│   ├── FFMpegBuild.txt
│   ├── Helpers/
│   │   ├── TemplateSelectors/
│   │   │   └── ImageViewerTemplateSelector.cs
│   │   └── WeakEventListener.cs
│   ├── Package.appxmanifest
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── PushNotificationsBackgroundTask.cs
│   ├── Services/
│   │   ├── Cache.cs
│   │   ├── IProxyChecker.cs
│   │   ├── IVoIPService.cs
│   │   ├── IWindowsPhoneStoreUpdateService.cs
│   │   ├── ProxyChecker.cs
│   │   ├── VoIPService.cs
│   │   ├── WNSPushService.cs
│   │   └── WindowsPhoneStoreUpdateService.cs
│   ├── TelegramClient.WP81.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── ToggleSwitch.xaml
│   │   │   ├── W10M.xaml
│   │   │   └── W10MCommon.xaml
│   │   └── SharedResourceDictionary.cs
│   ├── Utils/
│   │   ├── Passport.cs
│   │   ├── Password.cs
│   │   └── SRP.cs
│   ├── ViewModels/
│   │   ├── Additional/
│   │   │   ├── BioViewModel.cs
│   │   │   ├── CallsPrivacyViewModel.cs
│   │   │   ├── CallsSecurityViewModel.cs
│   │   │   ├── CameraViewModel.cs
│   │   │   ├── ChooseGeoLivePeriodViewModel.cs
│   │   │   ├── ChooseVideoQualityViewModel.cs
│   │   │   ├── ContactsSecurityViewModel.cs
│   │   │   ├── LoggedInViewModel.cs
│   │   │   ├── PassportSettingsViewModel.cs
│   │   │   ├── PhotoPickerViewModel.cs
│   │   │   ├── ProxyListViewModel.cs
│   │   │   └── ProxyViewModel.cs
│   │   ├── Calls/
│   │   │   ├── CallViewModel.cs
│   │   │   └── CallsViewModel.cs
│   │   ├── Chats/
│   │   │   └── GroupStickersViewModel.cs
│   │   ├── Contacts/
│   │   │   └── ShareContactDetailsViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsViewModel.Mentions.cs
│   │   │   ├── EmojiHintsViewModel.cs
│   │   │   ├── LiveLocationBadgeViewModel.cs
│   │   │   └── PlayerViewModel.cs
│   │   ├── Feed/
│   │   │   └── FeedViewModel.cs
│   │   ├── Media/
│   │   │   └── EditVideoViewModel.cs
│   │   ├── Passport/
│   │   │   ├── EmailCodeViewModel.cs
│   │   │   ├── EmailViewModel.cs
│   │   │   ├── EnterPasswordViewModel.cs
│   │   │   ├── PassportViewModel.cs
│   │   │   ├── PasswordIntroViewModel.cs
│   │   │   ├── PersonalDetailsViewModel.cs
│   │   │   ├── PhoneNumberCodeViewModel.cs
│   │   │   ├── PhoneNumberViewModel.cs
│   │   │   └── ResidentialAddressViewModel.cs
│   │   ├── Payments/
│   │   │   ├── CardInfoViewModel.cs
│   │   │   ├── CheckoutViewModel.cs
│   │   │   ├── PasswordEmailViewModel.cs
│   │   │   ├── PaymentInfo.cs
│   │   │   ├── PaymentViewModelBase.cs
│   │   │   ├── ReceiptViewModel.cs
│   │   │   ├── SavedCardInfoViewModel.cs
│   │   │   ├── ShippingInfoViewModel.cs
│   │   │   ├── ShippingMethodViewModel.cs
│   │   │   ├── Stripe/
│   │   │   │   ├── Card.cs
│   │   │   │   ├── CardUtils.cs
│   │   │   │   ├── DateUtils.cs
│   │   │   │   ├── JSON/
│   │   │   │   │   └── Response.cs
│   │   │   │   ├── StripeClient.cs
│   │   │   │   ├── StripeNetworkUtils.cs
│   │   │   │   ├── StripeTextUtils.cs
│   │   │   │   └── StripeToken.cs
│   │   │   ├── WebCardInfoViewModel.cs
│   │   │   └── WebVerificationViewModel.cs
│   │   └── Search/
│   │       └── SearchSharedContactsViewModel.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── BioView.xaml
│   │   │   ├── BioView.xaml.cs
│   │   │   ├── CallsPrivacyView.xaml
│   │   │   ├── CallsPrivacyView.xaml.cs
│   │   │   ├── CallsSecurityView.xaml
│   │   │   ├── CallsSecurityView.xaml.cs
│   │   │   ├── CameraView.xaml
│   │   │   ├── CameraView.xaml.cs
│   │   │   ├── ChooseGeoLivePeriodView.xaml
│   │   │   ├── ChooseGeoLivePeriodView.xaml.cs
│   │   │   ├── ChooseVideoQualityView.xaml
│   │   │   ├── ChooseVideoQualityView.xaml.cs
│   │   │   ├── ContactsSecurityView.xaml
│   │   │   ├── ContactsSecurityView.xaml.cs
│   │   │   ├── GifPlayerControl.xaml
│   │   │   ├── GifPlayerControl.xaml.cs
│   │   │   ├── LoggedInView.xaml
│   │   │   ├── LoggedInView.xaml.cs
│   │   │   ├── PassportSettingsView.xaml
│   │   │   ├── PassportSettingsView.xaml.cs
│   │   │   ├── PhotoPickerView.xaml
│   │   │   ├── PhotoPickerView.xaml.cs
│   │   │   ├── ProxyListView.xaml
│   │   │   ├── ProxyListView.xaml.cs
│   │   │   ├── ProxyView.xaml
│   │   │   ├── ProxyView.xaml.cs
│   │   │   ├── StartupView.xaml
│   │   │   └── StartupView.xaml.cs
│   │   ├── Calls/
│   │   │   ├── CallDebugControl.xaml
│   │   │   ├── CallDebugControl.xaml.cs
│   │   │   ├── CallRatingControl.xaml
│   │   │   ├── CallRatingControl.xaml.cs
│   │   │   ├── CallView.xaml
│   │   │   ├── CallView.xaml.cs
│   │   │   ├── CallsView.xaml
│   │   │   ├── CallsView.xaml.cs
│   │   │   ├── ReturnToCallControl.xaml
│   │   │   ├── ReturnToCallControl.xaml.cs
│   │   │   ├── SignalBarsControl.xaml
│   │   │   └── SignalBarsControl.xaml.cs
│   │   ├── Chats/
│   │   │   ├── GroupStickersView.xaml
│   │   │   └── GroupStickersView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ShareContactDetailsView.xaml
│   │   │   └── ShareContactDetailsView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── CameraControl.xaml
│   │   │   ├── CameraControl.xaml.cs
│   │   │   ├── CardTextBox.cs
│   │   │   ├── CropControl.xaml
│   │   │   ├── CropControl.xaml.cs
│   │   │   ├── DateTextBox.cs
│   │   │   ├── DecryptedMessageControl.xaml
│   │   │   ├── DecryptedMessageControl.xaml.cs
│   │   │   ├── DialogControl.xaml
│   │   │   ├── DialogControl.xaml.cs
│   │   │   ├── GroupedMessageControl.xaml
│   │   │   ├── GroupedMessageControl.xaml.cs
│   │   │   ├── GroupedMessages.cs
│   │   │   ├── InputBox.xaml
│   │   │   ├── InputBox.xaml.cs
│   │   │   ├── LabeledPasswordBox.xaml
│   │   │   ├── LabeledPasswordBox.xaml.cs
│   │   │   ├── LabeledTextBox.xaml
│   │   │   ├── LabeledTextBox.xaml.cs
│   │   │   ├── LiveLocationIcon.xaml
│   │   │   ├── LiveLocationIcon.xaml.cs
│   │   │   ├── LiveLocationProgress.xaml
│   │   │   ├── LiveLocationProgress.xaml.cs
│   │   │   ├── LiveLocationsControl.xaml
│   │   │   ├── LiveLocationsControl.xaml.cs
│   │   │   ├── MediaPhotoControl.xaml
│   │   │   ├── MediaPhotoControl.xaml.cs
│   │   │   ├── MediaVideoControl.xaml
│   │   │   ├── MediaVideoControl.xaml.cs
│   │   │   ├── MessageControl.xaml
│   │   │   ├── MessageControl.xaml.cs
│   │   │   ├── OpacityMaskBorder.xaml
│   │   │   ├── OpacityMaskBorder.xaml.cs
│   │   │   ├── OpenPhotoPicker.xaml
│   │   │   ├── OpenPhotoPicker.xaml.cs
│   │   │   ├── PhotoControl.xaml
│   │   │   ├── PhotoControl.xaml.cs
│   │   │   ├── Progress.xaml
│   │   │   ├── Progress.xaml.cs
│   │   │   ├── ProxyStatusControl.xaml
│   │   │   ├── ProxyStatusControl.xaml.cs
│   │   │   ├── RecordingControl.xaml
│   │   │   ├── RecordingControl.xaml.cs
│   │   │   ├── RibbonControl.xaml
│   │   │   ├── RibbonControl.xaml.cs
│   │   │   ├── RibbonImageControl.xaml
│   │   │   ├── RibbonImageControl.xaml.cs
│   │   │   ├── SelectionControl.xaml
│   │   │   ├── SelectionControl.xaml.cs
│   │   │   ├── ShareMessagePicker.xaml
│   │   │   ├── ShareMessagePicker.xaml.cs
│   │   │   ├── StatusControl.xaml
│   │   │   ├── StatusControl.xaml.cs
│   │   │   ├── TelegramAppBarButton.xaml
│   │   │   ├── TelegramAppBarButton.xaml.cs
│   │   │   ├── TelegramApplicationBar.xaml
│   │   │   ├── TelegramApplicationBar.xaml.cs
│   │   │   ├── TelegramDatePickerPage.xaml
│   │   │   ├── TelegramDatePickerPage.xaml.cs
│   │   │   ├── TelegramPopup.cs
│   │   │   ├── TextingControl.xaml
│   │   │   ├── TextingControl.xaml.cs
│   │   │   ├── TypingControl.xaml
│   │   │   ├── TypingControl.xaml.cs
│   │   │   ├── UpdateAppControl.xaml
│   │   │   ├── UpdateAppControl.xaml.cs
│   │   │   ├── UploadingControl.xaml
│   │   │   ├── UploadingControl.xaml.cs
│   │   │   ├── VideoTimelineControl.xaml
│   │   │   ├── VideoTimelineControl.xaml.cs
│   │   │   └── WaveformSlider.cs
│   │   ├── Dialogs/
│   │   │   ├── DocumentTileControl.xaml
│   │   │   ├── DocumentTileControl.xaml.cs
│   │   │   ├── EmojiHintsView.xaml
│   │   │   ├── EmojiHintsView.xaml.cs
│   │   │   ├── LiveLocationBadgeView.xaml
│   │   │   ├── LiveLocationBadgeView.xaml.cs
│   │   │   ├── PhotoTileControl.xaml
│   │   │   ├── PhotoTileControl.xaml.cs
│   │   │   ├── PlayerView.xaml
│   │   │   ├── PlayerView.xaml.cs
│   │   │   ├── SearchUserControl.xaml
│   │   │   ├── SearchUserControl.xaml.cs
│   │   │   ├── UnreadCounter.xaml
│   │   │   └── UnreadCounter.xaml.cs
│   │   ├── Feed/
│   │   │   ├── FeedView.xaml
│   │   │   └── FeedView.xaml.cs
│   │   ├── MainPage.xaml
│   │   ├── MainPage.xaml.cs
│   │   ├── Media/
│   │   │   ├── ColorPicker.xaml
│   │   │   ├── ColorPicker.xaml.cs
│   │   │   ├── EditVideoView.xaml
│   │   │   ├── EditVideoView.xaml.cs
│   │   │   ├── ExtendedImageEditor.xaml
│   │   │   ├── ExtendedImageEditor.xaml.cs
│   │   │   ├── MapUserTileControl.xaml
│   │   │   ├── MapUserTileControl.xaml.cs
│   │   │   ├── PhotoFace.cs
│   │   │   ├── StaticMapControl.xaml
│   │   │   ├── StaticMapControl.xaml.cs
│   │   │   ├── Sticker.xaml
│   │   │   ├── Sticker.xaml.cs
│   │   │   ├── StickerPosition.cs
│   │   │   ├── StickersControl.xaml
│   │   │   ├── StickersControl.xaml.cs
│   │   │   ├── TextLabel.xaml
│   │   │   └── TextLabel.xaml.cs
│   │   ├── Passport/
│   │   │   ├── EmailCodeView.xaml
│   │   │   ├── EmailCodeView.xaml.cs
│   │   │   ├── EmailView.xaml
│   │   │   ├── EmailView.xaml.cs
│   │   │   ├── EnterPasswordView.xaml
│   │   │   ├── EnterPasswordView.xaml.cs
│   │   │   ├── PassportView.xaml
│   │   │   ├── PassportView.xaml.cs
│   │   │   ├── PasswordIntroView.xaml
│   │   │   ├── PasswordIntroView.xaml.cs
│   │   │   ├── PersonalDetailsView.xaml
│   │   │   ├── PersonalDetailsView.xaml.cs
│   │   │   ├── PhoneNumberCodeView.xaml
│   │   │   ├── PhoneNumberCodeView.xaml.cs
│   │   │   ├── PhoneNumberView.xaml
│   │   │   ├── PhoneNumberView.xaml.cs
│   │   │   ├── ResidentialAddressView.xaml
│   │   │   └── ResidentialAddressView.xaml.cs
│   │   ├── Payments/
│   │   │   ├── CardInfoView.xaml
│   │   │   ├── CardInfoView.xaml.cs
│   │   │   ├── CheckoutView.xaml
│   │   │   ├── CheckoutView.xaml.cs
│   │   │   ├── PasswordEmailView.xaml
│   │   │   ├── PasswordEmailView.xaml.cs
│   │   │   ├── SavedCardInfoView.xaml
│   │   │   ├── SavedCardInfoView.xaml.cs
│   │   │   ├── ShippingInfoView.xaml
│   │   │   ├── ShippingInfoView.xaml.cs
│   │   │   ├── ShippingMethodView.xaml
│   │   │   ├── ShippingMethodView.xaml.cs
│   │   │   ├── WebCardInfoView.xaml
│   │   │   ├── WebCardInfoView.xaml.cs
│   │   │   ├── WebVerificationView.xaml
│   │   │   └── WebVerificationView.xaml.cs
│   │   └── Search/
│   │       ├── SearchSharedContactsView.xaml
│   │       └── SearchSharedContactsView.xaml.cs
│   ├── app.config
│   └── packages.config
├── TelegramClient.WP81.sln
├── TelegramClient.WebP/
│   ├── ImageUtils.cpp
│   ├── ImageUtils.h
│   ├── TelegramClient.WebP.cpp
│   ├── TelegramClient.WebP.h
│   ├── TelegramClient.WebP.vcxproj
│   ├── TelegramClient.WebP.vcxproj.filters
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.sln
├── VoipBackendServerHost/
│   ├── Package.appxmanifest
│   ├── VoipBackendServerHost.vcxproj
│   ├── VoipBackendServerHost.vcxproj.filters
│   ├── app.cpp
│   ├── app.h
│   ├── pch.cpp
│   └── pch.h
├── ffmpeg/
│   └── Build/
│       └── WindowsPhone8.1/
│           ├── ARM/
│           │   ├── bin/
│           │   │   ├── avcodec.lib
│           │   │   ├── avdevice.lib
│           │   │   ├── avfilter.lib
│           │   │   ├── avformat.lib
│           │   │   ├── avutil.lib
│           │   │   ├── swresample.lib
│           │   │   └── swscale.lib
│           │   ├── include/
│           │   │   ├── libavcodec/
│           │   │   │   ├── avcodec.h
│           │   │   │   ├── avdct.h
│           │   │   │   ├── avfft.h
│           │   │   │   ├── d3d11va.h
│           │   │   │   ├── dirac.h
│           │   │   │   ├── dv_profile.h
│           │   │   │   ├── dxva2.h
│           │   │   │   ├── qsv.h
│           │   │   │   ├── vaapi.h
│           │   │   │   ├── vda.h
│           │   │   │   ├── vdpau.h
│           │   │   │   ├── version.h
│           │   │   │   ├── videotoolbox.h
│           │   │   │   ├── vorbis_parser.h
│           │   │   │   └── xvmc.h
│           │   │   ├── libavdevice/
│           │   │   │   ├── avdevice.h
│           │   │   │   └── version.h
│           │   │   ├── libavfilter/
│           │   │   │   ├── avfilter.h
│           │   │   │   ├── avfiltergraph.h
│           │   │   │   ├── buffersink.h
│           │   │   │   ├── buffersrc.h
│           │   │   │   └── version.h
│           │   │   ├── libavformat/
│           │   │   │   ├── avformat.h
│           │   │   │   ├── avio.h
│           │   │   │   └── version.h
│           │   │   ├── libavutil/
│           │   │   │   ├── adler32.h
│           │   │   │   ├── aes.h
│           │   │   │   ├── aes_ctr.h
│           │   │   │   ├── attributes.h
│           │   │   │   ├── audio_fifo.h
│           │   │   │   ├── avassert.h
│           │   │   │   ├── avconfig.h
│           │   │   │   ├── avstring.h
│           │   │   │   ├── avutil.h
│           │   │   │   ├── base64.h
│           │   │   │   ├── blowfish.h
│           │   │   │   ├── bprint.h
│           │   │   │   ├── bswap.h
│           │   │   │   ├── buffer.h
│           │   │   │   ├── camellia.h
│           │   │   │   ├── cast5.h
│           │   │   │   ├── channel_layout.h
│           │   │   │   ├── common.h
│           │   │   │   ├── cpu.h
│           │   │   │   ├── crc.h
│           │   │   │   ├── des.h
│           │   │   │   ├── dict.h
│           │   │   │   ├── display.h
│           │   │   │   ├── downmix_info.h
│           │   │   │   ├── error.h
│           │   │   │   ├── eval.h
│           │   │   │   ├── ffversion.h
│           │   │   │   ├── fifo.h
│           │   │   │   ├── file.h
│           │   │   │   ├── frame.h
│           │   │   │   ├── hash.h
│           │   │   │   ├── hmac.h
│           │   │   │   ├── imgutils.h
│           │   │   │   ├── intfloat.h
│           │   │   │   ├── intreadwrite.h
│           │   │   │   ├── lfg.h
│           │   │   │   ├── log.h
│           │   │   │   ├── lzo.h
│           │   │   │   ├── macros.h
│           │   │   │   ├── mathematics.h
│           │   │   │   ├── md5.h
│           │   │   │   ├── mem.h
│           │   │   │   ├── motion_vector.h
│           │   │   │   ├── murmur3.h
│           │   │   │   ├── opt.h
│           │   │   │   ├── parseutils.h
│           │   │   │   ├── pixdesc.h
│           │   │   │   ├── pixelutils.h
│           │   │   │   ├── pixfmt.h
│           │   │   │   ├── random_seed.h
│           │   │   │   ├── rational.h
│           │   │   │   ├── rc4.h
│           │   │   │   ├── replaygain.h
│           │   │   │   ├── ripemd.h
│           │   │   │   ├── samplefmt.h
│           │   │   │   ├── sha.h
│           │   │   │   ├── sha512.h
│           │   │   │   ├── stereo3d.h
│           │   │   │   ├── tea.h
│           │   │   │   ├── threadmessage.h
│           │   │   │   ├── time.h
│           │   │   │   ├── timecode.h
│           │   │   │   ├── timestamp.h
│           │   │   │   ├── tree.h
│           │   │   │   ├── twofish.h
│           │   │   │   ├── version.h
│           │   │   │   └── xtea.h
│           │   │   ├── libswresample/
│           │   │   │   ├── swresample.h
│           │   │   │   └── version.h
│           │   │   └── libswscale/
│           │   │       ├── swscale.h
│           │   │       └── version.h
│           │   └── lib/
│           │       ├── avcodec-57.def
│           │       ├── avdevice-57.def
│           │       ├── avfilter-6.def
│           │       ├── avformat-57.def
│           │       ├── avutil-55.def
│           │       ├── pkgconfig/
│           │       │   ├── libavcodec.pc
│           │       │   ├── libavdevice.pc
│           │       │   ├── libavfilter.pc
│           │       │   ├── libavformat.pc
│           │       │   ├── libavutil.pc
│           │       │   ├── libswresample.pc
│           │       │   └── libswscale.pc
│           │       ├── swresample-2.def
│           │       └── swscale-4.def
│           ├── bin/
│           │   ├── avcodec.lib
│           │   ├── avformat.lib
│           │   ├── avutil.lib
│           │   ├── swresample.lib
│           │   └── swscale.lib
│           └── bin2/
│               ├── avcodec.lib
│               ├── avdevice.lib
│               ├── avfilter.lib
│               ├── avformat.lib
│               ├── avutil.lib
│               ├── swresample.lib
│               └── swscale.lib
├── libtgnet/
│   ├── BufferOutputStream.cpp
│   ├── BufferOutputStream.h
│   ├── ConnectionSocket.cpp
│   ├── ConnectionSocket.h
│   ├── ConnectionSocketWrapper.cpp
│   ├── ConnectionSocketWrapper.h
│   ├── MicrosoftCryptoImpl.cpp
│   ├── MicrosoftCryptoImpl.h
│   ├── libtgnet.vcxproj
│   ├── libtgnet.vcxproj.filters
│   ├── pch.cpp
│   └── pch.h
├── libtgvoip-public/
│   ├── BlockingQueue.cpp
│   ├── BlockingQueue.h
│   ├── BufferInputStream.cpp
│   ├── BufferInputStream.h
│   ├── BufferOutputStream.cpp
│   ├── BufferOutputStream.h
│   ├── BufferPool.cpp
│   ├── BufferPool.h
│   ├── Buffers.cpp
│   ├── Buffers.h
│   ├── CongestionControl.cpp
│   ├── CongestionControl.h
│   ├── EchoCanceller.cpp
│   ├── EchoCanceller.h
│   ├── JitterBuffer.cpp
│   ├── JitterBuffer.h
│   ├── MediaStreamItf.cpp
│   ├── MediaStreamItf.h
│   ├── MessageThread.cpp
│   ├── MessageThread.h
│   ├── NetworkSocket.cpp
│   ├── NetworkSocket.h
│   ├── OpusDecoder.cpp
│   ├── OpusDecoder.h
│   ├── OpusEncoder.cpp
│   ├── OpusEncoder.h
│   ├── PacketReassembler.cpp
│   ├── PacketReassembler.h
│   ├── PrivateDefines.h
│   ├── VoIPController.cpp
│   ├── VoIPController.h
│   ├── VoIPGroupController.cpp
│   ├── VoIPServerConfig.cpp
│   ├── VoIPServerConfig.h
│   ├── audio/
│   │   ├── AudioIO.cpp
│   │   ├── AudioIO.h
│   │   ├── AudioInput.cpp
│   │   ├── AudioInput.h
│   │   ├── AudioOutput.cpp
│   │   ├── AudioOutput.h
│   │   ├── Resampler.cpp
│   │   └── Resampler.h
│   ├── libtgvoip.WP81.vcxproj
│   ├── libtgvoip.WP81.vcxproj.filters
│   ├── logging.cpp
│   ├── logging.h
│   ├── os/
│   │   └── windows/
│   │       ├── AudioInputWASAPI.cpp
│   │       ├── AudioInputWASAPI.h
│   │       ├── AudioOutputWASAPI.cpp
│   │       ├── AudioOutputWASAPI.h
│   │       ├── CXWrapper.cpp
│   │       ├── CXWrapper.h
│   │       ├── NetworkSocketWinsock.cpp
│   │       ├── NetworkSocketWinsock.h
│   │       ├── WindowsSandboxUtils.cpp
│   │       └── WindowsSandboxUtils.h
│   ├── threading.h
│   ├── utils.h
│   └── webrtc_dsp/
│       └── webrtc/
│           ├── base/
│           │   ├── array_view.h
│           │   ├── atomicops.h
│           │   ├── basictypes.h
│           │   ├── checks.cc
│           │   ├── checks.h
│           │   ├── constructormagic.h
│           │   ├── safe_compare.h
│           │   ├── safe_conversions.h
│           │   ├── safe_conversions_impl.h
│           │   ├── sanitizer.h
│           │   ├── stringutils.cc
│           │   ├── stringutils.h
│           │   └── type_traits.h
│           ├── common_audio/
│           │   ├── audio_util.cc
│           │   ├── channel_buffer.cc
│           │   ├── channel_buffer.h
│           │   ├── fft4g.c
│           │   ├── fft4g.h
│           │   ├── include/
│           │   │   └── audio_util.h
│           │   ├── ring_buffer.c
│           │   ├── ring_buffer.h
│           │   ├── signal_processing/
│           │   │   ├── auto_corr_to_refl_coef.c
│           │   │   ├── auto_correlation.c
│           │   │   ├── complex_bit_reverse.c
│           │   │   ├── complex_fft.c
│           │   │   ├── complex_fft_tables.h
│           │   │   ├── copy_set_operations.c
│           │   │   ├── cross_correlation.c
│           │   │   ├── cross_correlation_neon.c
│           │   │   ├── division_operations.c
│           │   │   ├── dot_product_with_scale.c
│           │   │   ├── downsample_fast.c
│           │   │   ├── downsample_fast_neon.c
│           │   │   ├── energy.c
│           │   │   ├── filter_ar.c
│           │   │   ├── filter_ar_fast_q12.c
│           │   │   ├── filter_ma_fast_q12.c
│           │   │   ├── get_hanning_window.c
│           │   │   ├── get_scaling_square.c
│           │   │   ├── ilbc_specific_functions.c
│           │   │   ├── include/
│           │   │   │   ├── real_fft.h
│           │   │   │   ├── signal_processing_library.h
│           │   │   │   ├── spl_inl.h
│           │   │   │   ├── spl_inl_armv7.h
│           │   │   │   └── spl_inl_mips.h
│           │   │   ├── levinson_durbin.c
│           │   │   ├── lpc_to_refl_coef.c
│           │   │   ├── min_max_operations.c
│           │   │   ├── min_max_operations_neon.c
│           │   │   ├── randomization_functions.c
│           │   │   ├── real_fft.c
│           │   │   ├── refl_coef_to_lpc.c
│           │   │   ├── resample.c
│           │   │   ├── resample_48khz.c
│           │   │   ├── resample_by_2.c
│           │   │   ├── resample_by_2_internal.c
│           │   │   ├── resample_by_2_internal.h
│           │   │   ├── resample_fractional.c
│           │   │   ├── spl_init.c
│           │   │   ├── spl_inl.c
│           │   │   ├── spl_sqrt.c
│           │   │   ├── spl_sqrt_floor.c
│           │   │   ├── splitting_filter_impl.c
│           │   │   ├── sqrt_of_one_minus_x_squared.c
│           │   │   └── vector_scaling_operations.c
│           │   ├── sparse_fir_filter.cc
│           │   ├── sparse_fir_filter.h
│           │   ├── wav_file.cc
│           │   ├── wav_file.h
│           │   ├── wav_header.cc
│           │   └── wav_header.h
│           ├── modules/
│           │   └── audio_processing/
│           │       ├── aec/
│           │       │   ├── aec_common.h
│           │       │   ├── aec_core.cc
│           │       │   ├── aec_core.h
│           │       │   ├── aec_core_neon.cc
│           │       │   ├── aec_core_optimized_methods.h
│           │       │   ├── aec_core_sse2.cc
│           │       │   ├── aec_resampler.cc
│           │       │   ├── aec_resampler.h
│           │       │   ├── echo_cancellation.cc
│           │       │   └── echo_cancellation.h
│           │       ├── aecm/
│           │       │   ├── aecm_core.cc
│           │       │   ├── aecm_core.h
│           │       │   ├── aecm_core_c.cc
│           │       │   ├── aecm_core_neon.cc
│           │       │   ├── aecm_defines.h
│           │       │   ├── echo_control_mobile.cc
│           │       │   └── echo_control_mobile.h
│           │       ├── agc/
│           │       │   └── legacy/
│           │       │       ├── analog_agc.c
│           │       │       ├── analog_agc.h
│           │       │       ├── digital_agc.c
│           │       │       ├── digital_agc.h
│           │       │       └── gain_control.h
│           │       ├── logging/
│           │       │   ├── apm_data_dumper.cc
│           │       │   └── apm_data_dumper.h
│           │       ├── ns/
│           │       │   ├── defines.h
│           │       │   ├── noise_suppression.c
│           │       │   ├── noise_suppression.h
│           │       │   ├── noise_suppression_x.c
│           │       │   ├── noise_suppression_x.h
│           │       │   ├── ns_core.c
│           │       │   ├── ns_core.h
│           │       │   ├── nsx_core.c
│           │       │   ├── nsx_core.h
│           │       │   ├── nsx_core_c.c
│           │       │   ├── nsx_core_neon.c
│           │       │   ├── nsx_defines.h
│           │       │   └── windows_private.h
│           │       ├── splitting_filter.cc
│           │       ├── splitting_filter.h
│           │       ├── three_band_filter_bank.cc
│           │       ├── three_band_filter_bank.h
│           │       └── utility/
│           │           ├── block_mean_calculator.cc
│           │           ├── block_mean_calculator.h
│           │           ├── delay_estimator.cc
│           │           ├── delay_estimator.h
│           │           ├── delay_estimator_internal.h
│           │           ├── delay_estimator_wrapper.cc
│           │           ├── delay_estimator_wrapper.h
│           │           ├── ooura_fft.cc
│           │           ├── ooura_fft.h
│           │           ├── ooura_fft_neon.cc
│           │           ├── ooura_fft_sse2.cc
│           │           ├── ooura_fft_tables_common.h
│           │           └── ooura_fft_tables_neon_sse2.h
│           ├── system_wrappers/
│           │   ├── include/
│           │   │   ├── asm_defines.h
│           │   │   ├── compile_assert_c.h
│           │   │   ├── cpu_features_wrapper.h
│           │   │   └── metrics.h
│           │   └── source/
│           │       └── cpu_features.cc
│           └── typedefs.h
├── libtgvoipProxyStub/
│   ├── dlldata.c
│   ├── libtgvoip.h
│   ├── libtgvoipProxyStub.def
│   ├── libtgvoipProxyStub.vcxproj
│   ├── libtgvoip_i.c
│   └── libtgvoip_p.c
└── opencv/
    └── install/
        └── WP/
            └── 8.0/
                └── ARM/
                    ├── ARM/
                    │   └── vc11/
                    │       └── lib/
                    │           ├── OpenCVConfig.cmake
                    │           ├── OpenCVModules-debug.cmake
                    │           ├── OpenCVModules-release.cmake
                    │           ├── OpenCVModules.cmake
                    │           ├── opencv_calib3d300.lib
                    │           ├── opencv_calib3d300d.lib
                    │           ├── opencv_core300.lib
                    │           ├── opencv_core300d.lib
                    │           ├── opencv_features2d300.lib
                    │           ├── opencv_features2d300d.lib
                    │           ├── opencv_flann300.lib
                    │           ├── opencv_flann300d.lib
                    │           ├── opencv_hal300.lib
                    │           ├── opencv_hal300d.lib
                    │           ├── opencv_imgcodecs300.lib
                    │           ├── opencv_imgcodecs300d.lib
                    │           ├── opencv_imgproc300.lib
                    │           ├── opencv_imgproc300d.lib
                    │           ├── opencv_ml300.lib
                    │           ├── opencv_ml300d.lib
                    │           ├── opencv_objdetect300.lib
                    │           ├── opencv_objdetect300d.lib
                    │           ├── opencv_photo300.lib
                    │           ├── opencv_photo300d.lib
                    │           ├── opencv_shape300.lib
                    │           ├── opencv_shape300d.lib
                    │           ├── opencv_stitching300.lib
                    │           ├── opencv_stitching300d.lib
                    │           ├── opencv_video300.lib
                    │           ├── opencv_video300d.lib
                    │           ├── opencv_videoio300.lib
                    │           ├── opencv_videoio300d.lib
                    │           ├── opencv_videostab300.lib
                    │           └── opencv_videostab300d.lib
                    ├── LICENSE
                    ├── OpenCVConfig-version.cmake
                    ├── OpenCVConfig.cmake
                    ├── etc/
                    │   ├── haarcascades/
                    │   │   ├── haarcascade_eye.xml
                    │   │   ├── haarcascade_eye_tree_eyeglasses.xml
                    │   │   ├── haarcascade_frontalcatface.xml
                    │   │   ├── haarcascade_frontalcatface_extended.xml
                    │   │   ├── haarcascade_frontalface_alt.xml
                    │   │   ├── haarcascade_frontalface_alt2.xml
                    │   │   ├── haarcascade_frontalface_alt_tree.xml
                    │   │   ├── haarcascade_frontalface_default.xml
                    │   │   ├── haarcascade_fullbody.xml
                    │   │   ├── haarcascade_lefteye_2splits.xml
                    │   │   ├── haarcascade_licence_plate_rus_16stages.xml
                    │   │   ├── haarcascade_lowerbody.xml
                    │   │   ├── haarcascade_profileface.xml
                    │   │   ├── haarcascade_righteye_2splits.xml
                    │   │   ├── haarcascade_russian_plate_number.xml
                    │   │   ├── haarcascade_smile.xml
                    │   │   └── haarcascade_upperbody.xml
                    │   └── lbpcascades/
                    │       ├── lbpcascade_frontalcatface.xml
                    │       ├── lbpcascade_frontalface.xml
                    │       ├── lbpcascade_profileface.xml
                    │       └── lbpcascade_silverware.xml
                    └── include/
                        ├── opencv/
                        │   ├── cv.h
                        │   ├── cv.hpp
                        │   ├── cvaux.h
                        │   ├── cvaux.hpp
                        │   ├── cvwimage.h
                        │   ├── cxcore.h
                        │   ├── cxcore.hpp
                        │   ├── cxeigen.hpp
                        │   ├── cxmisc.h
                        │   ├── highgui.h
                        │   └── ml.h
                        └── opencv2/
                            ├── calib3d/
                            │   ├── calib3d.hpp
                            │   └── calib3d_c.h
                            ├── calib3d.hpp
                            ├── core/
                            │   ├── affine.hpp
                            │   ├── base.hpp
                            │   ├── bufferpool.hpp
                            │   ├── core.hpp
                            │   ├── core_c.h
                            │   ├── cuda/
                            │   │   ├── block.hpp
                            │   │   ├── border_interpolate.hpp
                            │   │   ├── color.hpp
                            │   │   ├── common.hpp
                            │   │   ├── datamov_utils.hpp
                            │   │   ├── detail/
                            │   │   │   ├── color_detail.hpp
                            │   │   │   ├── reduce.hpp
                            │   │   │   ├── reduce_key_val.hpp
                            │   │   │   ├── transform_detail.hpp
                            │   │   │   ├── type_traits_detail.hpp
                            │   │   │   └── vec_distance_detail.hpp
                            │   │   ├── dynamic_smem.hpp
                            │   │   ├── emulation.hpp
                            │   │   ├── filters.hpp
                            │   │   ├── funcattrib.hpp
                            │   │   ├── functional.hpp
                            │   │   ├── limits.hpp
                            │   │   ├── reduce.hpp
                            │   │   ├── saturate_cast.hpp
                            │   │   ├── scan.hpp
                            │   │   ├── simd_functions.hpp
                            │   │   ├── transform.hpp
                            │   │   ├── type_traits.hpp
                            │   │   ├── utility.hpp
                            │   │   ├── vec_distance.hpp
                            │   │   ├── vec_math.hpp
                            │   │   ├── vec_traits.hpp
                            │   │   ├── warp.hpp
                            │   │   ├── warp_reduce.hpp
                            │   │   └── warp_shuffle.hpp
                            │   ├── cuda.hpp
                            │   ├── cuda.inl.hpp
                            │   ├── cuda_stream_accessor.hpp
                            │   ├── cuda_types.hpp
                            │   ├── cvdef.h
                            │   ├── cvstd.hpp
                            │   ├── cvstd.inl.hpp
                            │   ├── directx.hpp
                            │   ├── eigen.hpp
                            │   ├── ippasync.hpp
                            │   ├── mat.hpp
                            │   ├── mat.inl.hpp
                            │   ├── matx.hpp
                            │   ├── ocl.hpp
                            │   ├── ocl_genbase.hpp
                            │   ├── opengl.hpp
                            │   ├── operations.hpp
                            │   ├── optim.hpp
                            │   ├── persistence.hpp
                            │   ├── private.cuda.hpp
                            │   ├── private.hpp
                            │   ├── ptr.inl.hpp
                            │   ├── sse_utils.hpp
                            │   ├── traits.hpp
                            │   ├── types.hpp
                            │   ├── types_c.h
                            │   ├── utility.hpp
                            │   ├── version.hpp
                            │   └── wimage.hpp
                            ├── core.hpp
                            ├── cvconfig.h
                            ├── features2d/
                            │   └── features2d.hpp
                            ├── features2d.hpp
                            ├── flann/
                            │   ├── all_indices.h
                            │   ├── allocator.h
                            │   ├── any.h
                            │   ├── autotuned_index.h
                            │   ├── composite_index.h
                            │   ├── config.h
                            │   ├── defines.h
                            │   ├── dist.h
                            │   ├── dummy.h
                            │   ├── dynamic_bitset.h
                            │   ├── flann.hpp
                            │   ├── flann_base.hpp
                            │   ├── general.h
                            │   ├── ground_truth.h
                            │   ├── hdf5.h
                            │   ├── heap.h
                            │   ├── hierarchical_clustering_index.h
                            │   ├── index_testing.h
                            │   ├── kdtree_index.h
                            │   ├── kdtree_single_index.h
                            │   ├── kmeans_index.h
                            │   ├── linear_index.h
                            │   ├── logger.h
                            │   ├── lsh_index.h
                            │   ├── lsh_table.h
                            │   ├── matrix.h
                            │   ├── miniflann.hpp
                            │   ├── nn_index.h
                            │   ├── object_factory.h
                            │   ├── params.h
                            │   ├── random.h
                            │   ├── result_set.h
                            │   ├── sampling.h
                            │   ├── saving.h
                            │   ├── simplex_downhill.h
                            │   └── timer.h
                            ├── flann.hpp
                            ├── hal/
                            │   ├── defs.h
                            │   ├── intrin.hpp
                            │   ├── intrin_cpp.hpp
                            │   ├── intrin_neon.hpp
                            │   └── intrin_sse.hpp
                            ├── hal.hpp
                            ├── imgcodecs/
                            │   ├── imgcodecs.hpp
                            │   ├── imgcodecs_c.h
                            │   └── ios.h
                            ├── imgcodecs.hpp
                            ├── imgproc/
                            │   ├── imgproc.hpp
                            │   ├── imgproc_c.h
                            │   └── types_c.h
                            ├── imgproc.hpp
                            ├── ml/
                            │   └── ml.hpp
                            ├── ml.hpp
                            ├── objdetect/
                            │   ├── detection_based_tracker.hpp
                            │   ├── objdetect.hpp
                            │   └── objdetect_c.h
                            ├── objdetect.hpp
                            ├── opencv.hpp
                            ├── opencv_modules.hpp
                            ├── photo/
                            │   ├── cuda.hpp
                            │   ├── photo.hpp
                            │   └── photo_c.h
                            ├── photo.hpp
                            ├── shape/
                            │   ├── emdL1.hpp
                            │   ├── hist_cost.hpp
                            │   ├── shape.hpp
                            │   ├── shape_distance.hpp
                            │   └── shape_transformer.hpp
                            ├── shape.hpp
                            ├── stitching/
                            │   ├── detail/
                            │   │   ├── autocalib.hpp
                            │   │   ├── blenders.hpp
                            │   │   ├── camera.hpp
                            │   │   ├── exposure_compensate.hpp
                            │   │   ├── matchers.hpp
                            │   │   ├── motion_estimators.hpp
                            │   │   ├── seam_finders.hpp
                            │   │   ├── timelapsers.hpp
                            │   │   ├── util.hpp
                            │   │   ├── util_inl.hpp
                            │   │   ├── warpers.hpp
                            │   │   └── warpers_inl.hpp
                            │   └── warpers.hpp
                            ├── stitching.hpp
                            ├── video/
                            │   ├── background_segm.hpp
                            │   ├── tracking.hpp
                            │   ├── tracking_c.h
                            │   └── video.hpp
                            ├── video.hpp
                            ├── videoio/
                            │   ├── cap_ios.h
                            │   ├── videoio.hpp
                            │   └── videoio_c.h
                            ├── videoio.hpp
                            ├── videostab/
                            │   ├── deblurring.hpp
                            │   ├── fast_marching.hpp
                            │   ├── fast_marching_inl.hpp
                            │   ├── frame_source.hpp
                            │   ├── global_motion.hpp
                            │   ├── inpainting.hpp
                            │   ├── log.hpp
                            │   ├── motion_core.hpp
                            │   ├── motion_stabilizing.hpp
                            │   ├── optical_flow.hpp
                            │   ├── outlier_rejection.hpp
                            │   ├── ring_buffer.hpp
                            │   ├── stabilizer.hpp
                            │   └── wobble_suppression.hpp
                            └── videostab.hpp

================================================
FILE CONTENTS
================================================

================================================
FILE: Agents/AgentHost.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System.Diagnostics;
using System.Windows;
using PhoneVoIPApp.BackEnd;
using PhoneVoIPApp.BackEnd.OutOfProcess;

namespace PhoneVoIPApp.Agents
{
    /// <summary>
    /// A static class that does process-level initialization/deinitializations.
    /// </summary>
    public static class AgentHost
    {
        #region Methods

        /// <summary>
        /// Indicates that an agent started running.
        /// </summary>
        internal static void OnAgentStarted()
        {
            // Initialize the native code - this only needs to be done once per process,s
            // but the method below will effectively be a no-op if called more than once.
            BackEnd.Globals.Instance.StartServer(RegistrationHelper.OutOfProcServerClassNames);
        }

        #endregion

        #region Private members

        /// <summary>
        /// Class constructor
        /// </summary>
        static AgentHost()
        {
            // Subscribe to the unhandled exception event
            Deployment.Current.Dispatcher.BeginInvoke(delegate
            {
                Application.Current.UnhandledException += AgentHost.OnUnhandledException;
            });

            // Create the singleton video renderer
            AgentHost.videoRenderer = new VideoRenderer();

            AgentHost.mtProtoUpdater = new MTProtoUpdater();

            // Store a pointer to the video renderer in the native Globals singleton,
            // so that the renderer can be used by native code in this process.
            Globals.Instance.VideoRenderer = AgentHost.videoRenderer;

            Globals.Instance.MTProtoUpdater = AgentHost.mtProtoUpdater;
        }

        /// <summary>
        /// Code to execute on unhandled exceptions.
        /// </summary>
        private static void OnUnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            Debug.WriteLine("[AgentHost] An unhandled exception of type {0} has occurred. Error code: 0x{1:X8}. Message: {2}",
                e.ExceptionObject.GetType(), e.ExceptionObject.HResult, e.ExceptionObject.Message);

            if (Debugger.IsAttached)
            {
                // An unhandled exception has occurred; break into the debugger
                Debugger.Break();
            }
        }

        #endregion

        #region Private

        // The singleton video renderer
        static VideoRenderer videoRenderer;

        static MTProtoUpdater mtProtoUpdater;

        #endregion
    }
}


================================================
FILE: Agents/Agents.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>10.0.20506</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{820034C1-645D-4340-8813-D980C1EF77DE}</ProjectGuid>
    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>PhoneVoIPApp.Agents</RootNamespace>
    <AssemblyName>PhoneVoIPApp.Agents</AssemblyName>
    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
    <SilverlightVersion>
    </SilverlightVersion>
    <SilverlightApplication>false</SilverlightApplication>
    <ValidateXaml>true</ValidateXaml>
    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>
    <TargetFrameworkProfile />
    <DefaultLanguage>en-US</DefaultLanguage>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>Bin\Debug</OutputPath>
    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>Bin\Release</OutputPath>
    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>Bin\x86\Debug</OutputPath>
    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>Bin\x86\Release</OutputPath>
    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>Bin\ARM\Debug</OutputPath>
    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>Bin\ARM\Release</OutputPath>
    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
    <NoStdLib>true</NoStdLib>
    <NoConfig>true</NoConfig>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget />
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="AgentHost.cs" />
    <Compile Include="CallInProgressAgentImpl.cs" />
    <Compile Include="ForegroundLifetimeAgentImpl.cs" />
    <Compile Include="MTProtoUpdater.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="PushPayload.cs" />
    <Compile Include="PushUtils.cs" />
    <Compile Include="RegistrationHelper.cs" />
    <Compile Include="ScheduledAgentImpl.cs" />
    <Compile Include="VideoMediaStreamSource.cs" />
    <Compile Include="VideoRenderer.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="PushPayload.xml" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\BackEnd\BackEnd.vcxproj">
      <Project>{C8D75245-FFCF-4932-A228-C9CC8BB60B03}</Project>
      <Name>BackEnd</Name>
    </ProjectReference>
    <ProjectReference Include="..\Telegram.Api.WP8\Telegram.Api.WP8.csproj">
      <Project>{e79d5093-8038-4a5f-8a98-ca38c0d0886f}</Project>
      <Name>Telegram.Api.WP8</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
  <ProjectExtensions />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

================================================
FILE: Agents/CallInProgressAgentImpl.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using Microsoft.Phone.Networking.Voip;
using PhoneVoIPApp.BackEnd;
using Telegram.Api;
using Telegram.Api.Aggregator;
using Telegram.Api.Extensions;
using Telegram.Api.Services;
using Telegram.Api.Services.Cache;
using Telegram.Api.Services.Connection;
using Telegram.Api.Services.Updates;
using Telegram.Api.TL;
using Telegram.Api.TL.Functions.Updates;
using Telegram.Api.Transport;

namespace PhoneVoIPApp.Agents
{
    /// <summary>
    /// An agent that is launched when the first call becomes active and is canceled when the last call ends.
    /// </summary>
    public class CallInProgressAgentImpl : VoipCallInProgressAgent
    {
        public static bool Suppress { get; set; }

        private bool _logEnabled = true;

        private void Log(string message, Action callback = null)
        {
            if (!_logEnabled) return;

            Telegram.Logs.Log.Write(string.Format("[CallInProgressAgentImpl] {0} {1}", GetHashCode(), message), callback.SafeInvoke);
#if DEBUG
            //PushUtils.AddToast("push", message, string.Empty, string.Empty, null, null);
#endif
        }

        private readonly object _initConnectionSyncRoot = new object();

        private TLInitConnection GetInitConnection()
        {
            return TLUtils.OpenObjectFromMTProtoFile<TLInitConnection>(_initConnectionSyncRoot, Constants.InitConnectionFileName) ??
                new TLInitConnection78
                {
                    Flags = new TLInt(0),
                    DeviceModel = new TLString("unknown"),
                    AppVersion = new TLString("background task"),
                    SystemVersion = new TLString("8.10.0.0")
                };
        }

        private static IMTProtoService _mtProtoService;

        private static IMTProtoService MTProtoService
        {
            get
            {
                return _mtProtoService;

            }
            set
            {
                _mtProtoService = value;

            }
        }

        private static ITransportService _transportService;

        private void InitializeServiceAsync(System.Action callback)
        {
            Debug.WriteLine("[CallInProgressAgentImpl {0}] _mtProtoService == null {1}", GetHashCode(), _mtProtoService == null);

            if (MTProtoService == null)
            {
                var deviceInfoService = new Telegram.Api.Services.DeviceInfo.DeviceInfoService(GetInitConnection(), true, "BackgroundDifferenceLoader", 1);
                var cacheService = new MockupCacheService();
                var updatesService = new MockupUpdatesService();

                _transportService = new TransportService();
                var connectionService = new ConnectionService(deviceInfoService);
                var publicConfigService = new MockupPublicConfigService();

                var mtProtoService = new MTProtoService(deviceInfoService, updatesService, cacheService, _transportService, connectionService, publicConfigService);
                mtProtoService.Initialized += (o, e) =>
                {
                    //Log(string.Format("[MTProtoUpdater {0}] Initialized", GetHashCode()));
                    Thread.Sleep(1000);
                    callback.SafeInvoke();
                };
                mtProtoService.InitializationFailed += (o, e) =>
                {
                    //Log(string.Format("[MTProtoUpdater {0}] InitializationFailed", GetHashCode()));
                };
                mtProtoService.Initialize();

                MTProtoService = mtProtoService;
            }
            else
            {
                callback.SafeInvoke();
            }
        }

        /// <summary>
        /// Constructor
        /// </summary>
        public CallInProgressAgentImpl()
            : base()
        {
            _timer = new Timer(OnTimer);
        }

        private Timer _timer;

        private void OnTimer(object state)
        {
            Log(string.Format("OnTimer call_id={0} suppress={1}", Globals.Instance.CallController != null ? Globals.Instance.CallController.CallId.ToString() : "null", Suppress));
            Debug.WriteLine("[CallInProgressAgentImpl {0}] OnTick.", GetHashCode());

            //InitializeServiceAsync(() =>
            //{
            //    var getStateAction = new TLGetState();
            //    var actions = new List<TLObject> { getStateAction };
            //    MTProtoService.SendActionsAsync(actions, (request, result) =>
            //        {
            //            Log("[CallInProgressAgentImpl] getState result=" + result);
            //        },
            //        error =>
            //        {
            //            Log("[CallInProgressAgentImpl] getState error=" + error);
            //        });
            //});
        }

        /// <summary>
        /// The first call has become active.
        /// </summary>
        protected override void OnFirstCallStarting()
        {
            Debug.WriteLine("[CallInProgressAgentImpl {0}] The first call has started.", GetHashCode());

            Log("Start timer");
            // Indicate that an agent has started running
            AgentHost.OnAgentStarted();
            _timer.Change(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(5.0));
        }

        /// <summary>
        /// The last call has ended.
        /// </summary>
        protected override void OnCancel()
        {
            Debug.WriteLine("[CallInProgressAgentImpl {0}] The last call has ended. Calling NotifyComplete", GetHashCode());

            if (MTProtoService != null) MTProtoService.Stop();
            Log("Stop timer");
            _timer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);

            // This agent is done
            base.NotifyComplete();
        }
    }
}


================================================
FILE: Agents/ForegroundLifetimeAgentImpl.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using Microsoft.Phone.Networking.Voip;
using System.Diagnostics;
using System.Threading;
using Microsoft.Phone.Scheduler;

namespace PhoneVoIPApp.Agents
{
    /// <summary>
    /// An agent that is invoked when the UI process calls Microsoft.Phone.Networking.Voip.VoipBackgroundProcess.Launched()
    /// and is canceled when the UI leaves the foreground.
    /// </summary>
    public sealed class ForegroundLifetimeAgentImpl : VoipForegroundLifetimeAgent
    {
        public ForegroundLifetimeAgentImpl()
            : base()
        {

        }

        /// <summary>
        /// A method that is called as a result of 
        /// </summary>
        protected override void OnLaunched()
        {
            Debug.WriteLine("[ForegroundLifetimeAgentImpl] The UI has entered the foreground.");

            // Indicate that an agent has started running
            AgentHost.OnAgentStarted();
        }

        protected override void OnCancel()
        {
            Debug.WriteLine("[ForegroundLifetimeAgentImpl] The UI is leaving the foreground");
            
            // Make sure that this process has finished becoming ready before trying to complete this agent.
            // Otherwise, the process may exit without telling the UI that it is ready (and therefore make the UI unresponsive)
            uint currentProcessId = PhoneVoIPApp.BackEnd.Globals.GetCurrentProcessId();
            string backgroundProcessReadyEventName = PhoneVoIPApp.BackEnd.Globals.GetBackgroundProcessReadyEventName(currentProcessId);
            using (EventWaitHandle backgroundProcessReadyEvent = new EventWaitHandle(initialState: false, mode: EventResetMode.ManualReset, name: backgroundProcessReadyEventName))
            {
                backgroundProcessReadyEvent.WaitOne();
                Debug.WriteLine("[ForegroundLifetimeAgentImpl] Background process {0} is ready", currentProcessId);
            }

            // This agent is done
            Debug.WriteLine("[ForegroundLifetimeAgentImpl] Calling NotifyComplete");
            base.NotifyComplete();
        }
    }
}


================================================
FILE: Agents/MTProtoUpdater.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System;
using System.Diagnostics;
using PhoneVoIPApp.BackEnd;
using Telegram.Api;
using Telegram.Api.Aggregator;
using Telegram.Api.Extensions;
using Telegram.Api.TL;

namespace PhoneVoIPApp.Agents
{
    internal class MTProtoUpdater : IMTProtoUpdater, IHandle<TLUpdateBase>
    {
        private static bool _logEnabled = true;

        private static readonly int _id = new Random().Next(999);

        private static void Log(string message, Action callback = null)
        {
            if (!_logEnabled) return;

            Telegram.Logs.Log.Write(string.Format("::MTProtoUpdater {0} {1}", _id, message), callback.SafeInvoke);
#if DEBUG
            //PushUtils.AddToast("push", message, string.Empty, string.Empty, null, null);
#endif
        }

        private readonly object _initConnectionSyncRoot = new object();

        private TLInitConnection GetInitConnection()
        {
            return TLUtils.OpenObjectFromMTProtoFile<TLInitConnection>(_initConnectionSyncRoot, Constants.InitConnectionFileName) ??
                new TLInitConnection
                {
                    DeviceModel = new TLString("unknown"),
                    AppVersion = new TLString("background task"),
                    SystemVersion = new TLString("8.10.0.0")
                };
        }

        public void Start(int pts, int date, int qts)
        {
            Log(string.Format("[MTProtoUpdater {0}] Start timer", GetHashCode()));

            CallInProgressAgentImpl.Suppress = true;
        }

        public void Stop()
        {
            Log(string.Format("[MTProtoUpdater {0}] Stop timer", GetHashCode()));

            CallInProgressAgentImpl.Suppress = false;
        }

        public void ReceivedCall(long id, long accessHash)
        {
        }

        public void DiscardCall(long id, long accessHash)
        {

        }

        public static void Handle(TLUpdateBase updateBase)
        {
            var updatePhoneCall = updateBase as TLUpdatePhoneCall;
            if (updatePhoneCall != null)
            {
                var phoneCallDiscarded = updatePhoneCall.PhoneCall as TLPhoneCallDiscarded61;
                //if (phoneCallDiscarded != null && Globals.Instance.CallController.CallId == phoneCallDiscarded.Id.Value)
                //{
                //    Globals.Instance.CallController.EndCall();
                //}
            }

            //Globals.Instance.CallController.HandleUpdatePhoneCall();
        }

        void IHandle<TLUpdateBase>.Handle(TLUpdateBase message)
        {
            Handle(message);
        }
    }
}


================================================
FILE: Agents/Properties/AssemblyInfo.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Resources;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Agents")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Agents")]
[assembly: AssemblyCopyright("Copyright ©  2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("77ef4b49-898d-4cfc-b8d7-ef7338a0da79")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build Numbers 
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: NeutralResourcesLanguageAttribute("en-US")]


================================================
FILE: Agents/PushPayload.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
namespace PhoneVoIPApp.Agents {
    using System.Xml.Serialization;
    
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17613")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="WPNotification")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="WPNotification", IsNullable=false)]
    public partial class Notification {
        
        private string nameField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string Name {
            get {
                return this.nameField;
            }
            set {
                this.nameField = value;
            }
        }

        private string numberField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string Number {
            get {
                return this.numberField;
            }
            set {
                this.numberField = value;
            }
        }

        private string locKey;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string LocKey
        {
            get
            {
                return this.locKey;
            }
            set
            {
                this.locKey = value;
            }
        }

        private string locArguments;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string LocArguments
        {
            get
            {
                return this.locArguments;
            }
            set
            {
                this.locArguments = value;
            }
        }

        private string data;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string Data
        {
            get
            {
                return this.data;
            }
            set
            {
                this.data = value;
            }
        }
    }
}


================================================
FILE: Agents/PushPayload.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<wp:Notification xmlns:wp="WPNotification">
  <Name>Kim Abercrombie</Name>
  <Number>+1-555-555-1234</Number>
</wp:Notification>


================================================
FILE: Agents/PushUtils.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#define INTERACTIVE_NOTIFICATIONS
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Windows.Data.Xml.Dom;
using Windows.Storage;
#if WNS_PUSH_SERVICE
using Windows.UI.Notifications;
#endif
using Telegram.Api.Helpers;

namespace PhoneVoIPApp.Agents
{
    public static class PushUtils2
    {

        private static readonly Dictionary<string, string> _locKeys = new Dictionary<string, string>
        {
            {"PINNED_AUDIO", "pinned a voice message"},
            {"PINNED_CONTACT", "pinned a contact"},
            {"PINNED_DOC", "pinned a file"},
            {"PINNED_GAME", "pinned a game"},
            {"PINNED_GEO", "pinned a map"},
            {"PINNED_GIF", "pinned a GIF"},
            {"PINNED_INVOICE", "pinned an invoice"},
            {"PINNED_NOTEXT", "pinned a message"},
            {"PINNED_PHOTO", "pinned a photo"},
            {"PINNED_STICKER", "pinned a sticker"},
            {"PINNED_TEXT", "pinned \"{1}\""},
            {"PINNED_VIDEO", "pinned a video"},

            {"MESSAGE_FWDS", "forwarded you {1} messages"},
            {"MESSAGE_TEXT", "{1}"},
            {"MESSAGE_NOTEXT", "sent you a message"},
            {"MESSAGE_PHOTO", "sent you a photo"},
            {"MESSAGE_VIDEO", "sent you a video"},
            {"MESSAGE_DOC", "sent you a document"},
            {"MESSAGE_GIF", "sent you a GIF"},
            {"MESSAGE_AUDIO", "sent you a voice message"},
            {"MESSAGE_CONTACT", "shared a contact with you"},
            {"MESSAGE_GEO", "sent you a map"},
            {"MESSAGE_STICKER", "sent you a sticker"},
            {"MESSAGE_GAME", "invited you to play {1}"},
            {"MESSAGE_INVOICE", "sent you an invoice for {1}"},

            {"CHAT_MESSAGE_FWDS", "{0} forwarded {2} messages to the group"},
            {"CHAT_MESSAGE_TEXT", "{0}: {2}"},
            {"CHAT_MESSAGE_NOTEXT", "{0} sent a message to the group"},
            {"CHAT_MESSAGE_PHOTO", "{0} sent a photo to the group"},
            {"CHAT_MESSAGE_VIDEO", "{0} sent a video to the group"},
            {"CHAT_MESSAGE_DOC", "{0} sent a document to the group"},
            {"CHAT_MESSAGE_GIF", "{0} sent a GIF to the group"},
            {"CHAT_MESSAGE_AUDIO", "{0} sent a voice message to the group"},
            {"CHAT_MESSAGE_CONTACT", "{0} shared a contact in the group"},
            {"CHAT_MESSAGE_GEO", "{0} sent a map to the group"},
            {"CHAT_MESSAGE_STICKER", "{0} sent a sticker to the group"},
            {"CHAT_MESSAGE_GAME", "{0} invited the group to play {2}"},
            {"CHAT_MESSAGE_INVOICE", "{0} sent an invoice for {2}"},

            {"CHANNEL_MESSAGE_FWDS", "posted {1} forwarded messages"},
            {"CHANNEL_MESSAGE_TEXT", "{1}"},
            {"CHANNEL_MESSAGE_NOTEXT", "posted a message"},
            {"CHANNEL_MESSAGE_PHOTO", "posted a photo"},
            {"CHANNEL_MESSAGE_VIDEO", "posted a video"},
            {"CHANNEL_MESSAGE_DOC", "posted a document"},
            {"CHANNEL_MESSAGE_GIF", "posted a GIF"},
            {"CHANNEL_MESSAGE_AUDIO", "posted a voice message"},
            {"CHANNEL_MESSAGE_CONTACT", "posted a contact"},
            {"CHANNEL_MESSAGE_GEO", "posted a map"},
            {"CHANNEL_MESSAGE_STICKER", "posted a sticker"},
            {"CHANNEL_MESSAGE_GAME", "invited you to play {1}"},

            {"CHAT_CREATED", "{0} invited you to the group"},
            {"CHAT_TITLE_EDITED", "{0} edited the group's name"},
            {"CHAT_PHOTO_EDITED", "{0} edited the group's photo"},
            {"CHAT_ADD_MEMBER", "{0} invited {2} to the group"},
            {"CHAT_ADD_YOU", "{0} invited you to the group"},
            {"CHAT_DELETE_MEMBER", "{0} kicked {2} from the group"},
            {"CHAT_DELETE_YOU", "{0} kicked you from the group"},
            {"CHAT_LEFT", "{0} has left the group"},
            {"CHAT_RETURNED", "{0} has returned to the group"},
            {"GEOCHAT_CHECKIN", "{0} has checked-in"},
            {"CHAT_JOINED", "{0} has joined the group"},

            {"CONTACT_JOINED", "{0} joined the App!"},
            {"AUTH_UNKNOWN", "New login from unrecognized device {0}"},
            {"AUTH_REGION", "New login from unrecognized device {0}, location: {1}"},

            {"CONTACT_PHOTO", "updated profile photo"},

            {"ENCRYPTION_REQUEST", "You have a new message"},
            {"ENCRYPTION_ACCEPT", "You have a new message"},
            {"ENCRYPTED_MESSAGE", "You have a new message"},

            {"DC_UPDATE", "Open this notification to update app settings"},

            {"LOCKED_MESSAGE", "You have a new message"}
        };

        private static void AppendTile(XmlDocument toTile, XmlDocument fromTile)
        {
            var fromTileNode = toTile.ImportNode(fromTile.GetElementsByTagName("binding").Item(0), true);
            toTile.GetElementsByTagName("visual")[0].AppendChild(fromTileNode);
        }

        private static void UpdateTile(string caption, string message)
        {
#if WNS_PUSH_SERVICE
            var tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication("xcee0f789y8059y4881y8883y347265c01f93x");
            //tileUpdater.EnableNotificationQueue(false);
            tileUpdater.EnableNotificationQueue(true);
            tileUpdater.EnableNotificationQueueForSquare150x150(false);
            //tileUpdater.EnableNotificationQueueForWide310x150(true);

            var wideTileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150IconWithBadgeAndText);
            SetImage(wideTileXml, "IconicSmall110.png");
            SetText(wideTileXml, caption, message);

            var squareTile150Xml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150IconWithBadge);
            SetImage(squareTile150Xml, "IconicTileMedium202.png");
            AppendTile(wideTileXml, squareTile150Xml);

            var squareTile71Xml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare71x71IconWithBadge);
            SetImage(squareTile71Xml, "IconicSmall110.png");
            AppendTile(wideTileXml, squareTile71Xml);

            try
            {
                tileUpdater.Update(new TileNotification(wideTileXml));
            }
            catch (Exception ex)
            {
                Telegram.Logs.Log.Write(ex.ToString());
            }
#endif
        }

        private static void UpdateBadge(int badgeNumber)
        {
#if WNS_PUSH_SERVICE
            var badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication("xcee0f789y8059y4881y8883y347265c01f93x");
            if (badgeNumber == 0)
            {
                badgeUpdater.Clear();
                return;
            }

            var badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeNumber);

            var badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
            badgeElement.SetAttribute("value", badgeNumber.ToString());

            try
            {
                badgeUpdater.Update(new BadgeNotification(badgeXml));
            }
            catch (Exception ex)
            {
                Telegram.Logs.Log.Write(ex.ToString());
            }
#endif
        }

        private static bool IsMuted(Data data)
        {
            return data.mute == "1";
        }

        private static bool IsServiceNotification(Data data)
        {
            return data.loc_key == "DC_UPDATE";
        }

        private static void RemoveToastGroup(string groupname)
        {
#if WNS_PUSH_SERVICE
            ToastNotificationManager.History.RemoveGroup(groupname);
#endif
        }

        private static string GetCaption(Data data)
        {
            var locKey = data.loc_key;
            if (locKey == null)
            {
                return "locKey=null";
            }

            if (locKey.StartsWith("CHAT") || locKey.StartsWith("GEOCHAT"))
            {
                return data.loc_args[1];
            }

            if (locKey.StartsWith("MESSAGE"))
            {
                return data.loc_args[0];
            }

            if (locKey.StartsWith("CHANNEL"))
            {
                return data.loc_args[0];
            }

            if (locKey.StartsWith("PINNED"))
            {
                return data.loc_args[0];
            }

            if (locKey.StartsWith("AUTH")
                || locKey.StartsWith("CONTACT")
                || locKey.StartsWith("ENCRYPTED")
                || locKey.StartsWith("ENCRYPTION")
                || locKey.StartsWith("PHONE"))
            {
                return "Telegram";
            }

#if DEBUG
            return locKey;
#else
            return "Telegram";
#endif
        }

        private static string GetSound(Data data)
        {
            return data.sound;
        }

        private static string GetGroup(Data data)
        {
            return data.group;
        }

        private static string GetTag(Data data)
        {
            return data.tag;
        }

        private static string GetLaunch(Data data)
        {
            var locKey = data.loc_key;
            if (locKey == null) return null;

            var path = "/Views/ShellView.xaml";
            if (locKey == "DC_UPDATE")
            {
                path = "/Views/Additional/SettingsView.xaml";
            }

            var customParams = new List<string> { "Action=" + locKey };
            if (data.custom != null)
            {
                customParams.AddRange(data.custom.GetParams());
            }

            return string.Format("{0}?{1}", path, string.Join("&", customParams));
        }

        private static string GetMessage(Data data)
        {
            var locKey = data.loc_key;
            if (locKey == null)
            {
                Telegram.Logs.Log.Write("::PushNotificationsBackgroundTask locKey=null text=" + data.text);
                return string.Empty;
            }

            string locValue = "";
            if (_locKeys.TryGetValue(locKey, out locValue))
            {
                
            }
            //var resourceLoader = ResourceLoader.GetForViewIndependentUse("TelegramClient.Tasks/Resources");
            //locValue = resourceLoader.GetString(locKey);

            if (locValue != "")
            {
                return string.Format(locValue, data.loc_args).Replace("\r\n", "\n").Replace("\n", " ");
            }
            var builder = new StringBuilder();
            if (data.loc_args != null)
            {
                builder.AppendLine("loc_args");
                foreach (var locArg in data.loc_args)
                {
                    builder.AppendLine(locArg);
                }
            }
            Telegram.Logs.Log.Write(string.Format("::PushNotificationsBackgroundTask missing locKey={0} locArgs={1}", locKey, builder.ToString()));

            //if (locKey.StartsWith("CHAT") || locKey.StartsWith("GEOCHAT"))
            //{
            //    return data.text;
            //}

            //if (locKey.StartsWith("MESSAGE"))
            //{
            //    if (locKey == "MESSAGE_TEXT")
            //    {
            //        return data.loc_args[1];
            //    }

            //    return data.text; //add localization string here 
            //}

#if DEBUG
            return data.text;
#else
            return string.Empty;
#endif
        }

        public static void UpdateToastAndTiles(RootObject rootObject)
        {
            if (rootObject == null) return;
            if (rootObject.data == null) return;

            if (rootObject.data.loc_key == null)
            {
                var groupname = GetGroup(rootObject.data);
                RemoveToastGroup(groupname);
                return;
            }

            var caption = GetCaption(rootObject.data);
            var message = GetMessage(rootObject.data);
            var sound = GetSound(rootObject.data);
            var launch = GetLaunch(rootObject.data);
            var tag = GetTag(rootObject.data);
            var group = GetGroup(rootObject.data);

            if (!IsMuted(rootObject.data) && !Notifications.IsDisabled)
            {
                AddToast(rootObject, caption, message, sound, launch, tag, group);
            }
            if (!IsServiceNotification(rootObject.data))
            {
                UpdateTile(caption, message);
            }
            UpdateBadge(rootObject.data.badge);
        }

        private static void SetToastImage(XmlDocument document, string imageSource, bool isUserPlaceholder)
        {
            var imageElements = document.GetElementsByTagName("image");
            if (imageSource == null)
            {
                ((XmlElement)imageElements[0]).SetAttribute("src", isUserPlaceholder ? "ms-appx:///Images/W10M/user_placeholder.png" : "ms-appx:///Images/W10M/group_placeholder.png");
            }
            else
            {
                ((XmlElement)imageElements[0]).SetAttribute("src", "ms-appdata:///local/" + imageSource);
            }
        }

        private static void SetImage(XmlDocument document, string imageSource)
        {
            var imageElements = document.GetElementsByTagName("image");
            ((XmlElement)imageElements[0]).SetAttribute("src", imageSource);
        }

        private static void SetSound(XmlDocument document, string soundSource)
        {
            //return;

            if (!Regex.IsMatch(soundSource, @"^sound[1-6]$", RegexOptions.IgnoreCase))
            {
                return;
            }

            var toastNode = document.SelectSingleNode("/toast");
            ((XmlElement)toastNode).SetAttribute("duration", "long");
            var audioElement = document.CreateElement("audio");
            audioElement.SetAttribute("src", "ms-appx:///Sounds/" + soundSource + ".wav");
            audioElement.SetAttribute("loop", "false");

            toastNode.AppendChild(audioElement);
        }

        private static void SetLaunch(RootObject rootObject, XmlDocument document, string launch)
        {
            if (string.IsNullOrEmpty(launch))
            {
                return;
            }
            if (rootObject != null
                && rootObject.data != null
                && rootObject.data.system != null
                && rootObject.data.system.StartsWith("10")) //10.0.10572.0 or less
            {
                try
                {
                    var currentVersion = new Version(rootObject.data.system);
                    var minVersion = new Version("10.0.10572.0");
                    if (currentVersion < minVersion)
                    {
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Telegram.Logs.Log.Write(ex.ToString());
                }
            }
            //launch = "/Views/ShellView.xaml";
            var toastNode = document.SelectSingleNode("/toast");
            ((XmlElement)toastNode).SetAttribute("launch", launch);
        }

        private static void SetText(XmlDocument document, string caption, string message)
        {
            var toastTextElements = document.GetElementsByTagName("text");
            toastTextElements[0].InnerText = caption ?? string.Empty;
            toastTextElements[1].InnerText = message ?? string.Empty;
        }

        private static string GetArguments(string peer, string peerId, bool needAccessHash, Custom custom)
        {
            string arguments = null;

            if (custom.mtpeer != null && custom.mtpeer.ah != null || !needAccessHash)
            {
                arguments = string.Format("{0}={1}", peer, peerId);

                if (custom.mtpeer != null && custom.mtpeer.ah != null)
                {
                    arguments += string.Format(" access_hash={0}", custom.mtpeer.ah);
                }

                if (custom.msg_id != null)
                {
                    arguments += string.Format(" msg_id={0}", custom.msg_id);
                }
            }

            return arguments;
        }

        private static void GetArgumentsAndImageSource(RootObject rootObject, out string arguments, out string imageSource)
        {
            arguments = null;
            imageSource = null;

            if (rootObject != null)
            {
                var data = rootObject.data;
                if (data != null)
                {
                    var custom = data.custom;
                    if (custom != null)
                    {
                        if (custom.from_id != null)
                        {
                            int fromId;
                            if (Int32.TryParse(custom.from_id, out fromId))
                            {
                                arguments = GetArguments("from_id", custom.from_id, true, custom);
                            }
                        }
                        else if (custom.chat_id != null)
                        {
                            int chatId;
                            if (Int32.TryParse(custom.chat_id, out chatId))
                            {
                                arguments = GetArguments("chat_id", custom.chat_id, false, custom);
                            }
                        }
                        else if (custom.channel_id != null)
                        {
                            int channelId;
                            if (Int32.TryParse(custom.channel_id, out channelId))
                            {
                                if (data.loc_key != null
                                    && data.loc_key.StartsWith("CHAT"))
                                {
                                    arguments = GetArguments("channel_id", custom.channel_id, true, custom);
                                }
                            }
                        }

                        imageSource = GetImageSource(custom);
                    }
                }
            }
        }

        private static void SetActions(XmlDocument document, string arguments)
        {
            if (arguments == null) return;

            //var resourceLoader = ResourceLoader.GetForViewIndependentUse("TelegramClient.Tasks/Resources");

            //"<actions>" +
            //"<input id=\"message\" type=\"text\" placeHolderContent=\"Type a reply\" />" +
            //"<action activationType=\"background\" content=\"Reply\" arguments=\"{0}\" hint-inputId=\"message\" imageUri=\"Assets/Icons/send.png\"/>" +
            //"</actions>"

            var toastNode = document.SelectSingleNode("/toast");
            var actionsElement = document.CreateElement("actions");

            var inputElement = document.CreateElement("input");
            inputElement.SetAttribute("id", "message");
            inputElement.SetAttribute("type", "text");
            inputElement.SetAttribute("placeHolderContent", "Type reply"); //resourceLoader.GetString("TypeReply"));
            actionsElement.AppendChild(inputElement);

            var replyAction = document.CreateElement("action");
            replyAction.SetAttribute("activationType", "background");
            replyAction.SetAttribute("content", "Reply"); //resourceLoader.GetString("Reply"));
            replyAction.SetAttribute("arguments", "action=reply " + arguments);
            replyAction.SetAttribute("hint-inputId", "message");
            replyAction.SetAttribute("imageUri", "Images/W10M/ic_send_2x.png");
            actionsElement.AppendChild(replyAction);

            var muteAction = document.CreateElement("action");
            muteAction.SetAttribute("activationType", "background");
            muteAction.SetAttribute("content", "Mute 1 hour"); //resourceLoader.GetString("Mute1Hour"));
            muteAction.SetAttribute("arguments", "action=mute " + arguments);
            actionsElement.AppendChild(muteAction);

            var disableAction = document.CreateElement("action");
            disableAction.SetAttribute("activationType", "background");
            disableAction.SetAttribute("content", "Disable"); //resourceLoader.GetString("Disable"));
            disableAction.SetAttribute("arguments", "action=disable " + arguments);
            actionsElement.AppendChild(disableAction);

            toastNode.AppendChild(actionsElement);
        }

        public static void AddToast(RootObject rootObject, string caption, string message, string sound, string launch, string tag, string group)
        {
#if WNS_PUSH_SERVICE

#if INTERACTIVE_NOTIFICATIONS

            var toastNotifier = ToastNotificationManager.CreateToastNotifier("xcee0f789y8059y4881y8883y347265c01f93x"); //("xcee0f789y8059y4881y8883y347265c01f93x");
            //toastNotifier.Setting = 
            Version version = Environment.OSVersion.Version;
            if (rootObject.data.system != null && rootObject.data.system != null)
            {
                Version.TryParse(rootObject.data.system, out version);
            }
            var toastXml = new XmlDocument();
            if (version != null && version.Major >= 10)
            {
                string arguments;
                string imageSource;
                GetArgumentsAndImageSource(rootObject, out arguments, out imageSource);

                var xml = 
                    "<toast>" +
                    "<visual>" +
                    "<binding template=\"ToastImageAndText02\">" +
                    "<text id=\"1\"></text>" +
                    "<text id=\"2\"></text>" +
                    "<image id=\"1\" placement=\"appLogoOverride\" src=\"\" hint-crop=\"circle\" />" +
                    "</binding>" +
                    "</visual>" +
                    "</toast>";

                toastXml.LoadXml(xml);
                SetToastImage(toastXml, imageSource, arguments != null && arguments.StartsWith("from_id"));
                SetActions(toastXml, arguments);
            }
            else
            {
                toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
            }

            SetText(toastXml, caption, message);
            SetLaunch(rootObject, toastXml, launch);

            if (!string.IsNullOrEmpty(sound) 
                && !string.Equals(sound, "default", StringComparison.OrdinalIgnoreCase))
            {
                SetSound(toastXml, sound);
            }

            try
            {
                var toast = new ToastNotification(toastXml);
                if (tag != null) toast.Tag = tag;
                if (group != null) toast.Group = group;
                //RemoveToastGroup(group);
                toastNotifier.Show(toast);
            }
            catch (Exception ex)
            {
                Telegram.Logs.Log.Write(ex.ToString());
            }
#else
            var toastNotifier = ToastNotificationManager.CreateToastNotifier();

            var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
            SetText(toastXml, caption, message);
            SetLaunch(toastXml, launch);

            if (!string.IsNullOrEmpty(sound)
                && !string.Equals(sound, "default", StringComparison.OrdinalIgnoreCase))
            {
                SetSound(toastXml, sound);
            }

            try
            {
                var toast = new ToastNotification(toastXml);
                if (tag != null) toast.Tag = tag;
                if (group != null) toast.Group = group;
                //RemoveToastGroup(group);
                toastNotifier.Show(toast);
            }
            catch (Exception ex)
            {
                Telegram.Logs.Log.Write(ex.ToString());
            }
#endif

#endif
        }

        public static T GetRootObject<T>(string payload) where T : class
        {
            var serializer = new DataContractJsonSerializer(typeof(T));
            T rootObject;
            using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(payload)))
            {
                rootObject = serializer.ReadObject(stream) as T;
            }

            return rootObject;
        }

        private static async Task<bool> IsFileExists(string fileName)
        {
            bool fileExists = true;
            Stream fileStream = null;
            StorageFile file = null;

            try
            {
                file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
                fileStream = await file.OpenStreamForReadAsync();
                fileStream.Dispose();
            }
            catch (FileNotFoundException)
            {
                // If the file dosn't exits it throws an exception, make fileExists false in this case 
                fileExists = false;
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }

            return fileExists;
        }

        private static string GetImageSource(Custom custom)
        {
            string imageSource = null;
            if (custom.mtpeer != null)
            {
                var location = custom.mtpeer.ph;
                if (location != null)
                {
                    var fileName = String.Format("{0}_{1}_{2}.jpg",
                        location.volume_id,
                        location.local_id,
                        location.secret);

                    if (IsFileExists(fileName).Result)
                    {
                        imageSource = fileName;
                    }
                }
            }

            return imageSource;
        }

        public static string GetImageSource(MTPeer mtpeer)
        {
            string imageSource = null;
            if (mtpeer != null)
            {
                var location = mtpeer.ph;
                if (location != null)
                {
                    var fileName = String.Format("{0}_{1}_{2}.jpg",
                        location.volume_id,
                        location.local_id,
                        location.secret);

                    if (IsFileExists(fileName).Result)
                    {
                        imageSource = fileName;
                    }
                }
            }

            return imageSource;
        }
    }

    public sealed class Photo
    {
        public string volume_id { get; set; }
        public string local_id { get; set; }
        public string secret { get; set; }
        public int dc_id { get; set; }
    }

    public sealed class MTPeer
    {
        public string ah { get; set; }
        public Photo ph { get; set; }
    }

    public sealed class Custom
    {
        public string msg_id { get; set; }
        public string from_id { get; set; }
        public string chat_id { get; set; }
        public string channel_id { get; set; }
        public MTPeer mtpeer { get; set; }
        public string call_id { get; set; }
        public string call_ah { get; set; }

        public string group
        {
            get
            {
                if (chat_id != null) return "c" + chat_id;
                if (channel_id != null) return "c" + chat_id;
                if (from_id != null) return "u" + from_id;
                return null;
            }
        }

        public string tag { get { return msg_id; } }

        public IEnumerable<string> GetParams()
        {
            if (msg_id != null) yield return "msg_id=" + msg_id;
            if (from_id != null) yield return "from_id=" + from_id;
            if (chat_id != null) yield return "chat_id=" + chat_id;
            if (channel_id != null) yield return "channel_id=" + channel_id;
        }
    }

    public sealed class Data
    {
        public Custom custom { get; set; }
        public string sound { get; set; }
        public string mute { get; set; }
        public int badge { get; set; }
        public string loc_key { get; set; }
        public string[] loc_args { get; set; }
        public int random_id { get; set; }
        public int user_id { get; set; }
        public string text { get; set; }
        public string system { get; set; }

        public string group { get { return custom != null ? custom.group : null; } }
        public string tag { get { return custom != null ? custom.tag : null; } }
    }

    public sealed class RootObject
    {
        public int date { get; set; }
        public Data data { get; set; }
    }
}


================================================
FILE: Agents/RegistrationHelper.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.34011
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace PhoneVoIPApp.BackEnd.OutOfProcess {
    
    
    internal sealed class RegistrationHelper {
        
        internal static string[] OutOfProcServerClassNames = new string[] {
                "PhoneVoIPApp.BackEnd.OutOfProcess.Server"};
    }
}


================================================
FILE: Agents/ScheduledAgentImpl.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Xml.Serialization;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Microsoft.Phone.Networking.Voip;
using Microsoft.Phone.Scheduler;
using PhoneVoIPApp.BackEnd;
using Telegram.Api;
using Telegram.Api.Aggregator;
using Telegram.Api.Services;
using Telegram.Api.Services.Cache;
using Telegram.Api.Services.Connection;
using Telegram.Api.Services.Location;
using Telegram.Api.Services.Updates;
using Telegram.Api.TL;
using Telegram.Api.TL.Functions.Phone;
using Telegram.Api.Transport;

namespace PhoneVoIPApp.Agents
{
    public class ScheduledAgentImpl : ScheduledTaskAgent
    {
        private readonly Mutex _appOpenMutex = new Mutex(false, Constants.TelegramMessengerMutexName);

        private static bool _logEnabled = true;

        private static readonly int _id = new Random().Next(999);

        private static void Log(string message, Action callback = null)
        {
            if (!_logEnabled) return;

            Telegram.Logs.Log.WriteSync = true;
            Telegram.Logs.Log.Write(string.Format("::ScheduledAgentImpl {0} {1}", _id, message), callback);
#if DEBUG
            //PushUtils.AddToast("push", message, string.Empty, string.Empty, null, null);
#endif
        }

        public ScheduledAgentImpl()
        {
        }

        //private static void SetText(XmlDocument document, string caption, string message)
        //{
        //    var toastTextElements = document.GetElementsByTagName("text");
        //    toastTextElements[0].InnerText = caption ?? string.Empty;
        //    toastTextElements[1].InnerText = message ?? string.Empty;
        //}

        private static void SetText(XmlDocument document, string caption, string message)
        {
            var toastTextElements = document.GetElementsByTagName("text");
            toastTextElements[0].InnerText = caption ?? string.Empty;
            toastTextElements[1].InnerText = message ?? string.Empty;
        }

        protected override void OnInvoke(ScheduledTask task)
        {
            Debug.WriteLine("[ScheduledAgentImpl {0}] ScheduledAgentImpl has been invoked with argument of type {1}.", GetHashCode(), task.GetType());

            // Indicate that an agent has started running
            AgentHost.OnAgentStarted();

            Log(string.Format("start with argument of type {0}", task.GetType()));
            if (!_appOpenMutex.WaitOne(0))
            {
                Log("cancel");
                Complete();
                return;
            }
            _appOpenMutex.ReleaseMutex();

            var incomingCallTask = task as VoipHttpIncomingCallTask;
            if (incomingCallTask != null)
            {
                isIncomingCallAgent = true;

                var messageBody = HttpUtility.HtmlDecode(Encoding.UTF8.GetString(incomingCallTask.MessageBody, 0, incomingCallTask.MessageBody.Length));
                Notification pushNotification = null;
                try
                {
                    using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(messageBody ?? string.Empty)))
                    {
                        var xs = new XmlSerializer(typeof(Notification));
                        pushNotification = (Notification)xs.Deserialize(ms);
                    }
                }
                catch (Exception ex)
                {
                    Log(string.Format("cannot deserialize message_body={0}", messageBody));
#if DEBUG
                    var toastNotifier = ToastNotificationManager.CreateToastNotifier();

                    var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
                    SetText(toastXml, "Notification Exception", string.Empty);

                    try
                    {
                        var toast = new ToastNotification(toastXml);
                        //RemoveToastGroup(group);
                        toastNotifier.Show(toast);
                    }
                    catch (Exception ex2)
                    {
                        Telegram.Logs.Log.Write(ex.ToString());
                    }
#endif
                }

                if (pushNotification != null)
                {
                    var rootObject = PushUtils2.GetRootObject<RootObject>(pushNotification.Data);
                    if (rootObject != null
                        && rootObject.data != null)
                    {
                        if (rootObject.data.custom != null
                            && rootObject.data.custom.from_id != null
                            && rootObject.data.custom.call_id != null
                            && rootObject.data.custom.call_ah != null)
                        {
                            var contactImage = PushUtils2.GetImageSource(rootObject.data.custom.mtpeer) ?? string.Empty;
                            var contactName = rootObject.data.loc_args != null && rootObject.data.loc_args.Length > 0
                                ? rootObject.data.loc_args[0]
                                : string.Empty;
                            Debug.WriteLine("[{0}] Incoming call from caller {1}, id {2}", incomingCallAgentId,
                                contactName, rootObject.data.custom.from_id);

                            long contactId = 0;
                            long callId = 0;
                            long callAccessHash = 0;
                            if (long.TryParse(rootObject.data.custom.from_id, out contactId)
                                && long.TryParse(rootObject.data.custom.call_id, out callId)
                                && long.TryParse(rootObject.data.custom.call_ah, out callAccessHash))
                            {
                                if (string.Equals(rootObject.data.loc_key, "PHONE_CALL_REQUEST",
                                    StringComparison.OrdinalIgnoreCase))
                                {
                                    if (BackEnd.Globals.Instance.CallController.CallStatus == CallStatus.InProgress)
                                    {
                                        OnIncomingCallDialogDismissed(callId, callAccessHash, true);
                                        return;
                                    }

                                    // Initiate incoming call processing
                                    // If you want to pass in additional information such as pushNotification.Number, you can
                                    var incomingCallProcessingStarted =
                                        BackEnd.Globals.Instance.CallController.OnIncomingCallReceived(contactName,
                                            contactId, contactImage, callId, callAccessHash,
                                            OnIncomingCallDialogDismissed);
                                    if (incomingCallProcessingStarted)
                                    {
                                        // will Complete() at OnIncomingCallDialogDismissed
                                        return;
                                    }

                                    //PushUtils2.AddToast(rootObject, "Caption", "Message", "", "", "tag", "group");
                                }
                                else if (string.Equals(rootObject.data.loc_key, "PHONE_CALL_DECLINE",
                                    StringComparison.OrdinalIgnoreCase))
                                {
                                    var currentCallId = BackEnd.Globals.Instance.CallController.CallId;
                                    if (currentCallId == callId)
                                    {
                                        Log(string.Format("PHONE_CALL_DECLINE CallController.EndCall call_id={0}", callId));
                                        var result = BackEnd.Globals.Instance.CallController.EndCall();
                                        Log(string.Format("PHONE_CALL_DECLINE CallController.EndCall call_id={0} result={1}", callId, result));
                                    }
                                }
                            }
                        }
                        else if (string.Equals(rootObject.data.loc_key, "GEO_LIVE_PENDING"))
                        {
                            ProcessLiveLocations();
                        }
                        else
                        {
                            //PushUtils2.UpdateToastAndTiles(rootObject);
                        }
                    }
                }

                Complete();
                return;
            }
            else
            {
                VoipKeepAliveTask keepAliveTask = task as VoipKeepAliveTask;
                if (keepAliveTask != null)
                {
                    this.isIncomingCallAgent = false;

                    // Refresh tokens, get new certs from server, etc.
                    BackEnd.Globals.Instance.DoPeriodicKeepAlive();
                    this.Complete();
                }
                else
                {
                    throw new InvalidOperationException(string.Format("Unknown scheduled task type {0}", task.GetType()));
                }
            }
        }

        // This is a request to complete this agent
        protected override void OnCancel()
        {
            Debug.WriteLine("[{0}] Cancel requested.", this.isIncomingCallAgent ? ScheduledAgentImpl.incomingCallAgentId : ScheduledAgentImpl.keepAliveAgentId);
            this.Complete();
        }

        private readonly object _initConnectionSyncRoot = new object();

        private TLInitConnection GetInitConnection()
        {
            return TLUtils.OpenObjectFromMTProtoFile<TLInitConnection>(_initConnectionSyncRoot, Constants.InitConnectionFileName) ??
                new TLInitConnection
                {
                    DeviceModel = new TLString("unknown"),
                    AppVersion = new TLString("background task"),
                    SystemVersion = new TLString("8.10.0.0")
                };
        }

        // This method is called when the incoming call processing is complete
        private void OnIncomingCallDialogDismissed(long callId, long callAccessHash, bool rejected)
        {
            Debug.WriteLine("[IncomingCallAgent] Incoming call processing is now complete.");

            if (rejected)
            {
                var deviceInfoService = new Telegram.Api.Services.DeviceInfo.DeviceInfoService(GetInitConnection(), true, "BackgroundDifferenceLoader", 1);
                var cacheService = new MockupCacheService();
                var updatesService = new MockupUpdatesService();
                var transportService = new TransportService();
                var connectionService = new ConnectionService(deviceInfoService);
                var publicConfigService = new MockupPublicConfigService();

                var manualResetEvent = new ManualResetEvent(false);
                var mtProtoService = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, publicConfigService);
                mtProtoService.Initialized += (o, e) =>
                {
                    var peer = new TLInputPhoneCall
                    {
                        Id = new TLLong(callId),
                        AccessHash = new TLLong(callAccessHash)
                    };

                    var getStateAction = new TLDiscardCall
                    {
                        Peer = peer,
                        Duration = new TLInt(0),
                        Reason = new TLPhoneCallDiscardReasonBusy(),
                        ConnectionId = new TLLong(0)
                    };
                    var actions = new List<TLObject> { getStateAction };

                    mtProtoService.SendActionsAsync(actions,
                        (request, result) =>
                        {
                            manualResetEvent.Set();
                        },
                        error =>
                        {
                            manualResetEvent.Set();
                        });
                };
                mtProtoService.InitializationFailed += (o, e) =>
                {
                    manualResetEvent.Set();
                };
                mtProtoService.Initialize();

#if DEBUG
                manualResetEvent.WaitOne();
#else
                manualResetEvent.WaitOne(TimeSpan.FromSeconds(10.0));
#endif

                mtProtoService.Stop();
            }

            this.Complete();
        }

        private void ProcessLiveLocations()
        {
            var deviceInfoService = new Telegram.Api.Services.DeviceInfo.DeviceInfoService(GetInitConnection(), true, "BackgroundDifferenceLoader", 1);
            var cacheService = new MockupCacheService();
            var updatesService = new MockupUpdatesService();
            var transportService = new TransportService();
            var connectionService = new ConnectionService(deviceInfoService);
            var publicConfigService = new MockupPublicConfigService();

            var manualResetEvent = new ManualResetEvent(false);
            var eventAggregator = new TelegramEventAggregator();
            var mtProtoService = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, publicConfigService);
            mtProtoService.Initialized += (o, e) =>
            {
                var liveLocationsService = new LiveLocationService(mtProtoService, eventAggregator);

                liveLocationsService.Load();

                liveLocationsService.UpdateAll();

                manualResetEvent.Set();
            };
            mtProtoService.InitializationFailed += (o, e) =>
            {
                manualResetEvent.Set();
            };
            mtProtoService.Initialize();

            var timeout = 
#if DEBUG
                Timeout.InfiniteTimeSpan;
#else
                TimeSpan.FromSeconds(30.0);
#endif

            var result = manualResetEvent.WaitOne(timeout);
        }

        // Complete this agent.
        private void Complete()
        {
            Debug.WriteLine("[{0}] Calling NotifyComplete", this.isIncomingCallAgent ? ScheduledAgentImpl.incomingCallAgentId : ScheduledAgentImpl.keepAliveAgentId);

            Log(string.Format("[{0}] Calling NotifyComplete", this.isIncomingCallAgent ? ScheduledAgentImpl.incomingCallAgentId : ScheduledAgentImpl.keepAliveAgentId));

            // This agent is done
            base.NotifyComplete();
        }

        // Strings used in tracing
        private const string keepAliveAgentId = "KeepAliveAgent";
        private const string incomingCallAgentId = "IncomingCallAgent";

        // Indicates if this agent instance is handling an incoming call or not
        private bool isIncomingCallAgent;
    }
}


================================================
FILE: Agents/VideoMediaStreamSource.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows.Media;
using System.Threading;

namespace PhoneVoIPApp.Agents
{
    public class VideoMediaStreamSource : MediaStreamSource, IDisposable
    {
        public class VideoSample
        {
            public VideoSample(Windows.Storage.Streams.IBuffer _buffer, UInt64 _hnsPresentationTime, UInt64 _hnsSampleDuration)
            {
                buffer = _buffer;
                hnsPresentationTime = _hnsPresentationTime;
                hnsSampleDuration = _hnsSampleDuration;
            }

            public Windows.Storage.Streams.IBuffer buffer;
            public UInt64 hnsPresentationTime;
            public UInt64 hnsSampleDuration;
        }

        private const int maxQueueSize = 4;
        private int _frameWidth;
        private int _frameHeight;
        private bool isDisposed = false;
        private Queue<VideoSample> _sampleQueue;

        private object lockObj = new object();
        private ManualResetEvent shutdownEvent;

        private int _outstandingGetVideoSampleCount;

        private MediaStreamDescription _videoDesc;
        private Dictionary<MediaSampleAttributeKeys, string> _emptySampleDict = new Dictionary<MediaSampleAttributeKeys, string>();

        public VideoMediaStreamSource(Stream audioStream, int frameWidth, int frameHeight)
        {
            _frameWidth = frameWidth;
            _frameHeight = frameHeight;
            shutdownEvent = new ManualResetEvent(false);
            _sampleQueue = new Queue<VideoSample>(VideoMediaStreamSource.maxQueueSize);
            _outstandingGetVideoSampleCount = 0;
            BackEnd.Globals.Instance.TransportController.VideoMessageReceived += TransportController_VideoMessageReceived;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        public void Shutdown()
        {
            shutdownEvent.Set();
            lock (lockObj)
            {
                if (_outstandingGetVideoSampleCount > 0)
                {
                    // ReportGetSampleCompleted must be called after GetSampleAsync to avoid memory leak. So, send
                    // an empty MediaStreamSample here.
                    MediaStreamSample msSamp = new MediaStreamSample(
                        _videoDesc,
                        null,
                        0,
                        0,
                        0,
                        0,
                        _emptySampleDict);
                    ReportGetSampleCompleted(msSamp);
                    _outstandingGetVideoSampleCount = 0;
                }
            }
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!this.isDisposed)
            {
                if (disposing)
                {
                    BackEnd.Globals.Instance.TransportController.VideoMessageReceived -= TransportController_VideoMessageReceived;
                }
                isDisposed = true;
            }
        }

        void TransportController_VideoMessageReceived(Windows.Storage.Streams.IBuffer ibuffer, UInt64 hnsPresenationTime, UInt64 hnsSampleDuration)
        {
            lock (lockObj)
            {
                if (_sampleQueue.Count >= VideoMediaStreamSource.maxQueueSize)
                {
                    // Dequeue and discard oldest
                    _sampleQueue.Dequeue();
                }

                _sampleQueue.Enqueue(new VideoSample(ibuffer, hnsPresenationTime, hnsSampleDuration));
                SendSamples();
            }

        }

        private void SendSamples()
        {
            while (_sampleQueue.Count() > 0 && _outstandingGetVideoSampleCount > 0)
            {
                if (!(shutdownEvent.WaitOne(0)))
                {
                    VideoSample vs = _sampleQueue.Dequeue();
                    Stream s = System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.AsStream(vs.buffer);

                    // Send out the next sample
                    MediaStreamSample msSamp = new MediaStreamSample(
                        _videoDesc,
                        s,
                        0,
                        s.Length,
                        (long)vs.hnsPresentationTime,
                        (long)vs.hnsSampleDuration,
                        _emptySampleDict);

                    ReportGetSampleCompleted(msSamp);
                    _outstandingGetVideoSampleCount--;
                }
                else
                {
                    // If video rendering is shutting down we should no longer deliver frames
                    return;
                }
            }
        }

        private void PrepareVideo()
        {
            // Stream Description 
            Dictionary<MediaStreamAttributeKeys, string> streamAttributes =
                new Dictionary<MediaStreamAttributeKeys, string>();

            // Select the same encoding and dimensions as the video capture
            streamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "H264";
            streamAttributes[MediaStreamAttributeKeys.Height] = _frameHeight.ToString();
            streamAttributes[MediaStreamAttributeKeys.Width] = _frameWidth.ToString();

            MediaStreamDescription msd =
                new MediaStreamDescription(MediaStreamType.Video, streamAttributes);

            _videoDesc = msd;
        }

        private void PrepareAudio()
        {
        }

        protected override void OpenMediaAsync()
        {
            // Init
            Dictionary<MediaSourceAttributesKeys, string> sourceAttributes =
                new Dictionary<MediaSourceAttributesKeys, string>();
            List<MediaStreamDescription> availableStreams =
                new List<MediaStreamDescription>();

            PrepareVideo();

            availableStreams.Add(_videoDesc);

            // a zero timespan is an infinite video
            sourceAttributes[MediaSourceAttributesKeys.Duration] =
                TimeSpan.FromSeconds(0).Ticks.ToString(CultureInfo.InvariantCulture);

            sourceAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();

            // tell Silverlight that we've prepared and opened our video
            ReportOpenMediaCompleted(sourceAttributes, availableStreams);
        }

        protected override void GetSampleAsync(MediaStreamType mediaStreamType)
        {
            if (mediaStreamType == MediaStreamType.Audio)
            {
            }
            else if (mediaStreamType == MediaStreamType.Video)
            {
                lock (lockObj)
                {
                    _outstandingGetVideoSampleCount++;
                    SendSamples();
                }
            }
        }

        protected override void CloseMedia()
        {
        }

        protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
        {
            throw new NotImplementedException();
        }

        protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
        {
            throw new NotImplementedException();
        }

        protected override void SeekAsync(long seekToTime)
        {
            ReportSeekCompleted(seekToTime);
        }
    }
}


================================================
FILE: Agents/VideoRenderer.cs
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
using Microsoft.Phone.Media;
using PhoneVoIPApp.BackEnd;
using System;
using System.Diagnostics;
using System.Windows;

namespace PhoneVoIPApp.Agents
{
    /// <summary>
    /// A class that renders video from the background process.
    /// Note, the MediaElement that actually displays the video is in the UI process - 
    /// this class receives video from the remote party and writes it to a media streamer.
    /// The media streamer handles connecting the rendered video stream to the media element that
    /// displays it in the UI process.
    /// </summary>
    internal class VideoRenderer : IVideoRenderer
    {
        /// <summary>
        /// Constructor
        /// </summary>
        internal VideoRenderer()
        {
        }

        #region IVideoRenderer methods

        /// <summary>
        /// Start rendering video.
        /// Note, this method may be called multiple times in a row.
        /// </summary>
        public void Start()
        {
            if (this.isRendering)
                return; // Nothing more to be done

            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                try
                {
                    Debug.WriteLine("[VideoRenderer::Start] Video rendering setup");
                    StartMediaStreamer();
                    this.isRendering = true;
                }
                catch (Exception err)
                {
                    Debug.WriteLine("[VideoRenderer::Start] " + err.Message);
                }
            });
        }

        private void StartMediaStreamer()
        {
            if (mediaStreamer == null)
            {
                mediaStreamer = MediaStreamerFactory.CreateMediaStreamer(123);
            }

            // Using default resolution of 640x480
            mediaStreamSource = new VideoMediaStreamSource(null, 640, 480);
            mediaStreamer.SetSource(mediaStreamSource);
        }

        /// <summary>
        /// Stop rendering video.
        /// Note, this method may be called multiple times in a row.
        /// </summary>
        public void Stop()
        {
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                if (!this.isRendering)
                    return; // Nothing more to be done

                Debug.WriteLine("[VoIP Background Process] Video rendering stopped.");
                mediaStreamSource.Shutdown();                
                mediaStreamSource.Dispose();
                mediaStreamSource = null;
                mediaStreamer.Dispose();
                mediaStreamer = null;

                this.isRendering = false;
            });
        }

        #endregion

        #region Private members

        // Indicates if rendering is already in progress or not
        private bool isRendering;
        private VideoMediaStreamSource mediaStreamSource;
        private MediaStreamer mediaStreamer;

        #endregion
    }
}


================================================
FILE: BackEnd/ApiLock.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include "ApiLock.h"

namespace PhoneVoIPApp
{
    namespace BackEnd
    {
        // A mutex used to protect objects accessible from the API surface exposed by this DLL
        std::recursive_mutex g_apiLock;
    }
}


================================================
FILE: BackEnd/ApiLock.h
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#pragma once
#include <mutex>

namespace PhoneVoIPApp
{
    namespace BackEnd
    {
        // A mutex used to protect objects accessible from the API surface exposed by this DLL
        extern std::recursive_mutex g_apiLock;
    }
}


================================================
FILE: BackEnd/BackEnd.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|ARM">
      <Configuration>Debug</Configuration>
      <Platform>ARM</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|ARM">
      <Configuration>Release</Configuration>
      <Platform>ARM</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{c8d75245-ffcf-4932-a228-c9cc8bb60b03}</ProjectGuid>
    <RootNamespace>PhoneVoIPApp.BackEnd</RootNamespace>
    <DefaultLanguage>en-US</DefaultLanguage>
    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath11)</VCTargetsPath>
    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
    <TargetPlatformIdentifier>Windows Phone</TargetPlatformIdentifier>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
    <WinMDAssembly>true</WinMDAssembly>
    <ProjectName>BackEnd</ProjectName>
    <ApplicationType>Windows Phone Silverlight</ApplicationType>
    <ApplicationTypeRevision>8.1</ApplicationTypeRevision>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <MidlEnv>win32</MidlEnv>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <MidlEnv>arm32</MidlEnv>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <PlatformToolset>v120</PlatformToolset>
    <MidlEnv>win32</MidlEnv>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <PlatformToolset>v120</PlatformToolset>
    <MidlEnv>arm32</MidlEnv>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <GenerateManifest>false</GenerateManifest>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
    <TargetName>$(RootNamespace)</TargetName>
    <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets>
    <OutDir>$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
    <IntDir>$(PlatformTarget)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
    <TargetName>$(RootNamespace)</TargetName>
    <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets>
    <OutDir>$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
    <IntDir>$(PlatformTarget)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <TargetName>$(RootNamespace)</TargetName>
    <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets>
    <OutDir>$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
    <IntDir>$(PlatformTarget)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <TargetName>$(RootNamespace)</TargetName>
    <CustomBuildAfterTargets>PostBuildEvent</CustomBuildAfterTargets>
    <OutDir>$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(MSBuildProjectName)\</OutDir>
    <IntDir>$(PlatformTarget)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>_WINRT_DLL;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>_WINRT_DLL;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
    <ClCompile>
      <PreprocessorDefinitions>_WINRT_DLL;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
    <ClCompile>
      <PreprocessorDefinitions>_WINRT_DLL;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
      <AdditionalDependencies>windowsphonecore.lib;runtimeobject.lib;PhoneAudioSes.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <!-- TODO:Please remove below IgnoreSpecificDefaultLibraries once dev11 bug 362091 is fixed -->
      <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
      <GenerateWindowsMetadata Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</GenerateWindowsMetadata>
      <GenerateWindowsMetadata Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</GenerateWindowsMetadata>
      <GenerateWindowsMetadata Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateWindowsMetadata>
      <GenerateWindowsMetadata Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateWindowsMetadata>
    </Link>
    <CustomBuildStep>
      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
        pushd "$(OutDir)"
        WinMdIdl.exe "$(OutDir)$(RootNamespace).winmd"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).idl"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).OutOfProcess.idl"
        popd</Command>
    </CustomBuildStep>
    <CustomBuildStep>
      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(OutDir)$(RootNamespace).idl;$(OutDir)$(RootNamespace).OutOfProcess.idl;$(SolutionDir)$(ProjectName)ProxyStub\dlldata.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_p.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess.h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_p.c;%(Outputs)</Outputs>
    </CustomBuildStep>
    <CustomBuildStep>
      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
        pushd "$(OutDir)"
        WinMdIdl.exe "$(OutDir)$(RootNamespace).winmd"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).idl"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).OutOfProcess.idl"       
        popd</Command>
    </CustomBuildStep>
    <CustomBuildStep>
      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(OutDir)$(RootNamespace).idl;$(OutDir)$(RootNamespace).OutOfProcess.idl;$(SolutionDir)$(ProjectName)ProxyStub\dlldata.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_p.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess.h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_p.c;%(Outputs)</Outputs>
    </CustomBuildStep>
    <CustomBuildStep>
      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
        pushd "$(OutDir)"
        WinMdIdl.exe "$(OutDir)$(RootNamespace).winmd"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).idl"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).OutOfProcess.idl"
        popd</Command>
    </CustomBuildStep>
    <CustomBuildStep>
      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)$(RootNamespace).idl;$(OutDir)$(RootNamespace).OutOfProcess.idl;$(SolutionDir)$(ProjectName)ProxyStub\dlldata.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_p.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess.h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_p.c;%(Outputs)</Outputs>
    </CustomBuildStep>
    <CustomBuildStep>
      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
        pushd "$(OutDir)"
        WinMdIdl.exe "$(OutDir)$(RootNamespace).winmd"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).idl"
        MIdl.exe /env $(MidlEnv) /winrt /ns_prefix /metadata_dir "$(TargetPlatformSdkMetadataLocation)" /out "$(SolutionDir)$(ProjectName)ProxyStub" "$(OutDir)$(RootNamespace).OutOfProcess.idl"
        popd</Command>
    </CustomBuildStep>
    <CustomBuildStep>
      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)$(RootNamespace).idl;$(OutDir)$(RootNamespace).OutOfProcess.idl;$(SolutionDir)$(ProjectName)ProxyStub\dlldata.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace)_p.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess.h;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_i.c;$(SolutionDir)$(ProjectName)ProxyStub\$(RootNamespace).OutOfProcess_p.c;%(Outputs)</Outputs>
    </CustomBuildStep>
  </ItemDefinitionGroup>
  <ItemGroup>
    <Reference Include="Windows">
      <IsWinMDFile>true</IsWinMDFile>
    </Reference>
    <Reference Include="platform.winmd">
      <IsWinMDFile>true</IsWinMDFile>
      <Private>false</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="ApiLock.h" />
    <ClInclude Include="BackEndAudio.h" />
    <ClInclude Include="BackEndCapture.h" />
    <ClInclude Include="BackEndNativeBuffer.h" />
    <ClInclude Include="BackEndTransport.h" />
    <ClInclude Include="CallController.h" />
    <ClInclude Include="Globals.h" />
    <ClInclude Include="ICallControllerStatusListener.h" />
    <ClInclude Include="IConfig.h" />
    <ClInclude Include="IVideoRenderer.h" />
    <ClInclude Include="IMTProtoUpdater.h" />
    <ClInclude Include="Server.h" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="ApiLock.cpp" />
    <ClCompile Include="BackEndAudio.cpp" />
    <ClCompile Include="BackEndCapture.cpp" />
    <ClCompile Include="BackEndTransport.cpp" />
    <ClCompile Include="CallController.cpp" />
    <ClCompile Include="Globals.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\libtgvoip-public\libtgvoip.WP81.vcxproj">
      <Project>{21f10158-c078-4bd7-a82a-9c4aeb8e2f8e}</Project>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: BackEnd/BackEndAudio.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include "BackEndAudio.h"
#include "ApiLock.h"
#include "BackEndNativeBuffer.h"

using namespace PhoneVoIPApp::BackEnd;
using namespace Windows::System::Threading;

// Begin of audio helpers
//size_t inline GetWaveFormatSize(const WAVEFORMATEX& format)
//{
//    return (sizeof WAVEFORMATEX) + (format.wFormatTag == WAVE_FORMAT_PCM ? 0 : format.cbSize);
//}
//
//void FillPcmFormat(WAVEFORMATEX& format, WORD wChannels, int nSampleRate, WORD wBits)
//{
//    format.wFormatTag        = WAVE_FORMAT_PCM;
//    format.nChannels         = wChannels;
//    format.nSamplesPerSec    = nSampleRate;
//    format.wBitsPerSample    = wBits;
//    format.nBlockAlign       = format.nChannels * (format.wBitsPerSample / 8);
//    format.nAvgBytesPerSec   = format.nSamplesPerSec * format.nBlockAlign;
//    format.cbSize            = 0;
//}
//
//size_t BytesFromDuration(int nDurationInMs, const WAVEFORMATEX& format)
//{
//    return size_t(nDurationInMs * FLOAT(format.nAvgBytesPerSec) / 1000);
//}
//
//size_t SamplesFromDuration(int nDurationInMs, const WAVEFORMATEX& format)
//{
//    return size_t(nDurationInMs * FLOAT(format.nSamplesPerSec) / 1000);
//}
//// End of audio helpers
//
//BOOL WaveFormatCompare(const WAVEFORMATEX& format1, const WAVEFORMATEX& format2)
//{
//    size_t cbSizeFormat1 = GetWaveFormatSize(format1);
//    size_t cbSizeFormat2 = GetWaveFormatSize(format2);
//
//    return (cbSizeFormat1 == cbSizeFormat2) && (memcmp(&format1, &format2, cbSizeFormat1) == 0);
//}
//
//BackEndAudio::BackEndAudio() :
//    m_pDefaultRenderDevice(NULL),
//    m_pRenderClient(NULL),
//    m_pClock(NULL),
//    m_pVolume(NULL),
//    m_nMaxFrameCount(0),
//    m_pwfx(NULL),
//    m_pDefaultCaptureDevice(NULL),
//    m_pCaptureClient(NULL),
//    m_sourceFrameSizeInBytes(0),
//    hCaptureEvent(NULL),
//    hShutdownEvent(NULL),
//    m_CaptureThread(nullptr),
//    transportController(nullptr),
//    started(false)
//{
//    this->onTransportMessageReceivedHandler = ref new MessageReceivedEventHandler(this, &BackEndAudio::OnTransportMessageReceived);
//}
//
//void BackEndAudio::OnTransportMessageReceived(Windows::Storage::Streams::IBuffer^ stream, UINT64, UINT64)
//{
//    BYTE* pBuffer = NativeBuffer::GetBytesFromIBuffer(stream);
//    int size = stream->Length;
//
//    while (m_pRenderClient && size && pBuffer)
//    {
//        HRESULT hr = E_FAIL;
//        unsigned int padding = 0;
//
//        hr = m_pDefaultRenderDevice->GetCurrentPadding(&padding);
//        if (SUCCEEDED(hr))
//        {
//            BYTE* pRenderBuffer = NULL;
//            unsigned int incomingFrameCount = size / m_sourceFrameSizeInBytes;
//            unsigned int framesToWrite = m_nMaxFrameCount - padding;
//            
//            if (framesToWrite > incomingFrameCount)
//            {
//                framesToWrite = incomingFrameCount;
//            }
//
//            if (framesToWrite)
//            {
//                hr = m_pRenderClient->GetBuffer(framesToWrite, &pRenderBuffer);
//
//                if (SUCCEEDED(hr))
//                {
//                    unsigned int bytesToBeWritten = framesToWrite * m_sourceFrameSizeInBytes;
//
//                    memcpy(pRenderBuffer, pBuffer, bytesToBeWritten);
//
//                    // Release the buffer
//                    m_pRenderClient->ReleaseBuffer(framesToWrite, 0);
//
//                    pBuffer += bytesToBeWritten;
//                    size -= bytesToBeWritten;
//                }
//            }
//        }
//    }
//}
//
//void BackEndAudio::Start()
//{
//    // Make sure only one API call is in progress at a time
//    std::lock_guard<std::recursive_mutex> lock(g_apiLock);
//
//    if (started)
//        return;
//
//    HRESULT hr = InitCapture();
//    if (SUCCEEDED(hr))
//    {
//        hr =  InitRender();
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = StartAudioThreads();
//    }
//
//    if (FAILED(hr))
//    {
//        Stop();
//        throw ref new Platform::COMException(hr, L"Unable to start audio");
//    }
//
//    started = true;
//}
//
//void BackEndAudio::Stop()
//{
//    // Make sure only one API call is in progress at a time
//    std::lock_guard<std::recursive_mutex> lock(g_apiLock);
//
//    if (!started)
//        return;
//
//    // Shutdown the threads
//    if (hShutdownEvent)
//    {
//        SetEvent(hShutdownEvent);
//    }
//
//    if (m_CaptureThread != nullptr)
//    {
//        m_CaptureThread->Cancel();
//        m_CaptureThread->Close();
//        m_CaptureThread = nullptr;
//    }
//
//    if (m_pDefaultRenderDevice)
//    {
//        m_pDefaultRenderDevice->Stop();
//    }
//
//    if (m_pDefaultCaptureDevice)
//    {
//        m_pDefaultCaptureDevice->Stop();
//    }
//
//    if (m_pVolume)
//    {
//        m_pVolume->Release();
//        m_pVolume = NULL;
//    }
//    if (m_pClock)
//    {
//        m_pClock->Release();
//        m_pClock = NULL;
//    }
//
//    if (m_pRenderClient)
//    {
//        m_pRenderClient->Release();
//        m_pRenderClient = NULL;
//    }
//
//
//
//    if (m_pDefaultRenderDevice)
//    {
//        m_pDefaultRenderDevice->Release();
//        m_pDefaultRenderDevice = NULL;
//    }
//
//    if (m_pDefaultCaptureDevice)
//    {
//        m_pDefaultCaptureDevice->Release();
//        m_pDefaultCaptureDevice = NULL;
//    }
//
//	if (m_pCaptureClient)
//	{
//		m_pCaptureClient->Release();
//		m_pCaptureClient = NULL;
//	}
//
//    if (m_pwfx)
//    {
//        CoTaskMemFree((LPVOID)m_pwfx);
//        m_pwfx = NULL;
//    }
//
//    if (hCaptureEvent)
//    {
//        CloseHandle(hCaptureEvent);
//        hCaptureEvent = NULL;
//    }
//
//    if (hShutdownEvent)
//    {
//        CloseHandle(hShutdownEvent);
//        hShutdownEvent = NULL;
//    }
//
//    started = false;
//}
//
//void BackEndAudio::CaptureThread(Windows::Foundation::IAsyncAction^ operation)
//{
//    HRESULT hr = m_pDefaultCaptureDevice->Start();
//    BYTE *pLocalBuffer = new BYTE[MAX_RAW_BUFFER_SIZE];
//    HANDLE eventHandles[] = {
//                             hCaptureEvent,        // WAIT_OBJECT0 
//                             hShutdownEvent        // WAIT_OBJECT0 + 1
//                            };
//
//    if (SUCCEEDED(hr) && pLocalBuffer)
//    {
//        unsigned int uAccumulatedBytes = 0;
//        while (SUCCEEDED(hr))
//        {
//            DWORD waitResult = WaitForMultipleObjectsEx(SIZEOF_ARRAY(eventHandles), eventHandles, FALSE, INFINITE, FALSE);
//            if (WAIT_OBJECT_0 == waitResult)
//            {
//                BYTE* pbData = nullptr;
//                UINT32 nFrames = 0;
//                DWORD dwFlags = 0;
//                if (SUCCEEDED(hr))
//                {
//                    hr = m_pCaptureClient->GetBuffer(&pbData, &nFrames, &dwFlags, nullptr, nullptr);
//                    unsigned int incomingBufferSize = nFrames * m_sourceFrameSizeInBytes;
//
//                    if (MAX_RAW_BUFFER_SIZE - uAccumulatedBytes < incomingBufferSize)
//                    {
//                        // Send what has been accumulated
//                        if (transportController)
//                        {
//                            transportController->WriteAudio(pLocalBuffer, uAccumulatedBytes);
//                        }
//
//                        // Reset our counter
//                        uAccumulatedBytes = 0;
//                    }
//
//                    memcpy(pLocalBuffer + uAccumulatedBytes, pbData, incomingBufferSize);
//                    uAccumulatedBytes += incomingBufferSize;
//                }
//
//                if (SUCCEEDED(hr))
//                {
//                    hr = m_pCaptureClient->ReleaseBuffer(nFrames);
//                }
//            }
//            else if (WAIT_OBJECT_0 + 1 == waitResult)
//            {
//                // We're being asked to shutdown
//                break;
//            }
//            else
//            {
//                // Unknown return value
//                DbgRaiseAssertionFailure();
//            }
//        }
//    }
//    delete[] pLocalBuffer;
//}
//
//HRESULT BackEndAudio::StartAudioThreads()
//{
//    hShutdownEvent = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS);
//    if (!hShutdownEvent)
//    {
//        return HRESULT_FROM_WIN32(GetLastError());
//    }
//
//    m_CaptureThread = ThreadPool::RunAsync(ref new WorkItemHandler(this, &BackEndAudio::CaptureThread), WorkItemPriority::High, WorkItemOptions::TimeSliced);
//    return S_OK;
//}
//
//BackEndAudio::~BackEndAudio()
//{
//    if (transportController)
//    {
//        transportController->AudioMessageReceived -= onTransportMessageReceivedHandlerToken;
//        transportController = nullptr;
//    }
//}
//
//HRESULT BackEndAudio::InitRender()
//{
//    HRESULT hr = E_FAIL;
//
//    LPCWSTR pwstrRendererId = GetDefaultAudioRenderId(AudioDeviceRole::Communications);
//
//    if (NULL == pwstrRendererId)
//    {
//        hr = E_FAIL;
//    }
//
//    hr = ActivateAudioInterface(pwstrRendererId, __uuidof(IAudioClient2), (void**)&m_pDefaultRenderDevice);
//
//        // Set the category through SetClientProperties
//    AudioClientProperties properties = {};
//    if (SUCCEEDED(hr))
//    {
//        properties.cbSize = sizeof AudioClientProperties;
//        properties.eCategory = AudioCategory_Communications;
//        hr = m_pDefaultRenderDevice->SetClientProperties(&properties);
//    }
//
//    WAVEFORMATEX* pwfx = nullptr;
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->GetMixFormat(&pwfx);
//    }
//
//    WAVEFORMATEX format = {};
//    if (SUCCEEDED(hr))
//    {
//        FillPcmFormat(format, pwfx->nChannels, pwfx->nSamplesPerSec, pwfx->wBitsPerSample); 
//        hr = m_pDefaultRenderDevice->Initialize(AUDCLNT_SHAREMODE_SHARED,
//            0,
//            2000 * 10000,  // Seconds in hns
//            0, // periodicity
//            &format, 
//            NULL);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->GetService(__uuidof(IAudioRenderClient), (void**)&m_pRenderClient);
//    }
//    
//    // Check for other supported GetService interfaces as well
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->GetService(__uuidof(IAudioClock), (void**)&m_pClock);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->GetService(__uuidof(ISimpleAudioVolume), (void**)&m_pVolume);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->GetBufferSize(&m_nMaxFrameCount);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultRenderDevice->Start();
//    }
//
//    if (pwstrRendererId)
//    {
//        CoTaskMemFree((LPVOID)pwstrRendererId);
//    }
//
//    return hr;
//}
//
//HRESULT BackEndAudio::InitCapture()
//{
//    HRESULT hr = E_FAIL;
//
//    LPCWSTR pwstrCaptureId = GetDefaultAudioCaptureId(AudioDeviceRole::Communications);
//
//    if (NULL == pwstrCaptureId)
//    {
//        hr = E_FAIL;
//    }
//
//    hr = ActivateAudioInterface(pwstrCaptureId, __uuidof(IAudioClient2), (void**)&m_pDefaultCaptureDevice);
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultCaptureDevice->GetMixFormat(&m_pwfx);
//    }
//
//    // Set the category through SetClientProperties
//    AudioClientProperties properties = {};
//    if (SUCCEEDED(hr))
//    {
//        properties.cbSize = sizeof AudioClientProperties;
//        properties.eCategory = AudioCategory_Communications;
//        hr = m_pDefaultCaptureDevice->SetClientProperties(&properties);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//		WAVEFORMATEX format = {};
//		if (SUCCEEDED(hr))
//		{
//
//			FillPcmFormat(format, m_pwfx->nChannels, m_pwfx->nSamplesPerSec, m_pwfx->wBitsPerSample);
//
//			m_sourceFrameSizeInBytes = (format.wBitsPerSample / 8) * format.nChannels;
//			hr = m_pDefaultCaptureDevice->Initialize(AUDCLNT_SHAREMODE_SHARED, 0x88140000, 1000 * 10000, 0, &format, NULL);
//		}
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hCaptureEvent = CreateEventEx(NULL, NULL, 0, EVENT_ALL_ACCESS);
//        if (NULL == hCaptureEvent)
//        {
//            hr = HRESULT_FROM_WIN32(GetLastError());
//        }
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultCaptureDevice->SetEventHandle(hCaptureEvent);
//    }
//
//    if (SUCCEEDED(hr))
//    {
//        hr = m_pDefaultCaptureDevice->GetService(__uuidof(IAudioCaptureClient), (void**)&m_pCaptureClient);
//    }
//    
//    if (pwstrCaptureId)
//    {
//        CoTaskMemFree((LPVOID)pwstrCaptureId);
//    }
//    return hr;
//}
//
//void BackEndAudio::SetTransport(BackEndTransport^ transport)
//{
//    transportController = transport;
//    if (transportController != nullptr)
//    {
//        onTransportMessageReceivedHandlerToken = transportController->AudioMessageReceived += onTransportMessageReceivedHandler;
//    }
//}


================================================
FILE: BackEnd/BackEndAudio.h
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#pragma once
#include "windows.h"

#define MAX_RAW_BUFFER_SIZE 1024*128

#include <synchapi.h>
#include <audioclient.h>
#include <phoneaudioclient.h>

#include "BackEndTransport.h"

namespace PhoneVoIPApp
{
    namespace BackEnd
    {
        //public ref class BackEndAudio sealed
        //{
        //public:
        //    // Constructor
        //    BackEndAudio();

        //    // Destructor
        //    virtual ~BackEndAudio();

        //    void SetTransport(BackEndTransport^ transport);
        //    
        //    void Start();
        //    void Stop();

        //private:
        //    HRESULT InitRender();
        //    HRESULT InitCapture();
        //    HRESULT StartAudioThreads();
        //    void CaptureThread(Windows::Foundation::IAsyncAction^ operation);
        //    void OnTransportMessageReceived(Windows::Storage::Streams::IBuffer^ stream, UINT64, UINT64);
        //    
        //    BackEndTransport^ transportController;

        //    PhoneVoIPApp::BackEnd::MessageReceivedEventHandler^ onTransportMessageReceivedHandler;
        //    Windows::Foundation::EventRegistrationToken onTransportMessageReceivedHandlerToken;

        //    int m_sourceFrameSizeInBytes;

        //    WAVEFORMATEX* m_pwfx;

        //    // Devices
        //    IAudioClient2* m_pDefaultRenderDevice;
        //    IAudioClient2* m_pDefaultCaptureDevice;

        //    // Actual render and capture objects
        //    IAudioRenderClient* m_pRenderClient;
        //    IAudioCaptureClient* m_pCaptureClient;

        //    // Misc interfaces
        //    IAudioClock* m_pClock; 
        //    ISimpleAudioVolume* m_pVolume;

        //    // Audio buffer size
        //    UINT32 m_nMaxFrameCount;
        //    HANDLE hCaptureEvent;

        //    // Event for stopping audio capture/render
        //    HANDLE hShutdownEvent;

        //    Windows::Foundation::IAsyncAction^ m_CaptureThread;

        //    // Has audio started?
        //    bool started;
        //};
    }
}


================================================
FILE: BackEnd/BackEndCapture.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include "BackEndCapture.h"
#include "ApiLock.h"
#include <ppltasks.h>

using namespace PhoneVoIPApp::BackEnd;
using namespace Windows::System::Threading;
using namespace Microsoft::WRL;
using namespace Windows::Foundation;
using namespace Platform;
using namespace Windows::Phone::Media::Capture;
using namespace Windows::Storage::Streams;
using namespace Concurrency;

BackEndCapture::BackEndCapture() :
    started(false),
    videoOnlyDevice(nullptr),
    pVideoSink(NULL),
    pVideoDevice(NULL),
    cameraLocation(CameraSensorLocation::Front)
{
    hStopCompleted = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS);
    if (!hStopCompleted)
    {
        throw ref new Platform::Exception(HRESULT_FROM_WIN32(GetLastError()), L"Could not create shutdown event");
    }

    hStartCompleted = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS);
    if (!hStartCompleted)
    {
        throw ref new Platform::Exception(HRESULT_FROM_WIN32(GetLastError()), L"Could not create start event");
    }
}

void BackEndCapture::Start(CameraLocation newCameraLocation)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (started)
        return;
    if(newCameraLocation == CameraLocation::Front)
    {
        cameraLocation = Windows::Phone::Media::Capture::CameraSensorLocation::Front;
    }
    else if(newCameraLocation == CameraLocation::Back)
    {
        cameraLocation = Windows::Phone::Media::Capture::CameraSensorLocation::Back;
    }

    InitCapture();

    started = true;
}

void BackEndCapture::Stop()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);
    ::OutputDebugString(L"+[BackendCapture::Stop] => Trying to stop capture\n");
    if (!started)
    {
        ::OutputDebugString(L"-[BackendCapture::Stop] => finished stopping capture\n");
        return;
    }
    if (videoOnlyDevice)
    {
        OutputDebugString(L"Destroying VideoCaptureDevice\n");

        try
        {
            videoOnlyDevice->StopRecordingAsync()->Completed = ref new AsyncActionCompletedHandler([this] (IAsyncAction ^action, Windows::Foundation::AsyncStatus status){
                if(status == Windows::Foundation::AsyncStatus::Completed)
                {
                    OutputDebugString(L"[BackendCapture::StopRecordingAsync]  Video successfully stopped.\n");
                }
                else
                {
                    OutputDebugString(L"[BackEndCapture::StopRecordingAsync] Error occurred while stopping recording.\n");
                }
                this->videoCaptureAction = nullptr;
                this->videoOnlyDevice = nullptr;
                started = false;
                SetEvent(hStopCompleted);
            });
        }
        catch(...)
        {
            // A Platform::ObjectDisposedException can be raised if the app has had its access
            // to video revoked (most commonly when the app is going out of the foreground)
            OutputDebugString(L"Exception caught while destroying video capture\n");
            this->videoCaptureAction = nullptr;
            this->videoOnlyDevice = nullptr;
            started = false;
            SetEvent(hStopCompleted);
        }

        if (pVideoDevice)
        {
            pVideoDevice->Release();
            pVideoDevice = NULL;
        }

        if (pVideoSink)
        {
            pVideoSink->Release();
            pVideoSink = NULL;
        }
    }
    ::OutputDebugString(L"-[BackendCapture::Stop] => finished stopping capture\n");
}

BackEndCapture::~BackEndCapture()
{
    if(m_ToggleThread)
    {
        m_ToggleThread->Cancel();
        m_ToggleThread->Close();
        m_ToggleThread = nullptr;
    }
}

void BackEndCapture::InitCapture()
{
    ::OutputDebugString(L"+[BackendCapture::InitCapture] => Initializing Capture\n");
    Windows::Foundation::Size dimensions;
    dimensions.Width = 640;
    dimensions.Height = 480;
    Collections::IVectorView<Size> ^availableSizes = AudioVideoCaptureDevice::GetAvailableCaptureResolutions(this->cameraLocation);
    Collections::IIterator<Windows::Foundation::Size> ^availableSizesIterator = availableSizes->First();

    IAsyncOperation<AudioVideoCaptureDevice^> ^openOperation = nullptr;
    while(!openOperation && availableSizesIterator->HasCurrent)
    {
        // TODO: You should select the appropriate resolution that's supported here,
        // TODO: and then setup your renderer with that selected res.
        // TODO: This shows how to iterate through all supported resolutions.  We're assuming 640x480 support
        if(availableSizesIterator->Current.Height == 480 && availableSizesIterator->Current.Width == 640)
        {
            openOperation = AudioVideoCaptureDevice::OpenForVideoOnlyAsync(this->cameraLocation, dimensions);
        }
        availableSizesIterator->MoveNext();
    }

    openOperation->Completed = ref new AsyncOperationCompletedHandler<AudioVideoCaptureDevice^>([this] (IAsyncOperation<AudioVideoCaptureDevice^> ^operation, Windows::Foundation::AsyncStatus status)
    {
        if(status == Windows::Foundation::AsyncStatus::Completed)
        {
            std::lock_guard<std::recursive_mutex> lock(g_apiLock);
            
            ::OutputDebugString(L"+[BackendCapture::InitCapture] => OpenAsyncOperation started\n");
            
            auto videoDevice = operation->GetResults();

            this->videoOnlyDevice = videoDevice;
            IAudioVideoCaptureDeviceNative *pNativeDevice = NULL; 
            HRESULT hr = reinterpret_cast<IUnknown*>(videoDevice)->QueryInterface(__uuidof(IAudioVideoCaptureDeviceNative), (void**) &pNativeDevice);
            
            if (NULL == pNativeDevice || FAILED(hr))
            {
                throw ref new FailureException("Unable to QI IAudioVideoCaptureDeviceNative");
            }

            // Save off the native device
            this->pVideoDevice = pNativeDevice;

            // Create the sink
            MakeAndInitialize<CaptureSampleSink>(&(this->pVideoSink), transportController);
            this->pVideoSink->SetTransport(this->transportController);
            pNativeDevice->SetVideoSampleSink(this->pVideoSink);

            // Use the same encoding format as in VideoMediaStreamSource.cs
            videoDevice->VideoEncodingFormat = CameraCaptureVideoFormat::H264;

            SetEvent(hStartCompleted);

            // Start recording to our sink
            this->videoCaptureAction = videoDevice->StartRecordingToSinkAsync();
            videoCaptureAction->Completed = ref new AsyncActionCompletedHandler([this] (IAsyncAction ^asyncInfo, Windows::Foundation::AsyncStatus status)
            {
                if(status == Windows::Foundation::AsyncStatus::Completed)
                {
                    ::OutputDebugString(L"[BackendCapture::InitCapture] => StartRecordingToSinkAsync completed\n");
                }
                else if(status == Windows::Foundation::AsyncStatus::Error || status == Windows::Foundation::AsyncStatus::Canceled)
                {
                    ::OutputDebugString(L"[BackendCapture::InitCapture] => StartRecordingToSinkAsync did not complete\n");
                } 
            });

            ::OutputDebugString(L"-[BackendCapture::InitCapture] => OpenAsyncOperation Completed\n");
        }
        else if(status == Windows::Foundation::AsyncStatus::Canceled)
        {
            ::OutputDebugString(L"[BackendCapture::InitCapture] => OpenAsyncOperation Canceled\n");
        }
        else if(status == Windows::Foundation::AsyncStatus::Error)
        {
            ::OutputDebugString(L"[BackendCapture::InitCapture] => OpenAsyncOperation encountered an error.\n");
        }
    });
    ::OutputDebugString(L"-[BackendCapture::InitCapture] => Initializing Capture\n");
}

void BackEndCapture::ToggleCamera()
{
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if(m_ToggleThread)
    {
        m_ToggleThread->Cancel();
        m_ToggleThread->Close();
        m_ToggleThread = nullptr;
    }

    m_ToggleThread = ThreadPool::RunAsync(ref new WorkItemHandler(this, &BackEndCapture::ToggleCameraThread), WorkItemPriority::High, WorkItemOptions::TimeSliced);
}


void BackEndCapture::ToggleCameraThread(Windows::Foundation::IAsyncAction^ operation)
{
    ::OutputDebugString(L"+[BackendCapture::ToggleCamera] => Toggling camera \n");
    CameraLocation newCameraLocation;
    ResetEvent(hStopCompleted);
    Stop();
    DWORD waitResult = WaitForSingleObjectEx(hStopCompleted, INFINITE, FALSE);
    if(waitResult == WAIT_OBJECT_0)
    {
        ResetEvent(hStartCompleted);
        if(cameraLocation == Windows::Phone::Media::Capture::CameraSensorLocation::Back)
        {
            newCameraLocation = CameraLocation::Front;
        }
        else
        {
            newCameraLocation = CameraLocation::Back;
        }
        Start(newCameraLocation);
    }
    else
    {
        throw ref new Platform::Exception(HRESULT_FROM_WIN32(waitResult), L"Error waiting for capture to stop when toggling cameras");
    }

    waitResult = WaitForSingleObjectEx(hStartCompleted, INFINITE, FALSE);
    if(waitResult == WAIT_OBJECT_0)
    {
        CameraLocationChanged(newCameraLocation);
    }
    else
    {
        throw ref new Platform::Exception(HRESULT_FROM_WIN32(waitResult), L"Error waiting for capture to start when toggling cameras");
    }
    ::OutputDebugString(L"-[BackendCapture::ToggleCamera] => Toggling camera \n");
}

void BackEndCapture::SetTransport(BackEndTransport^ transport)
{
    transportController = transport;
}


================================================
FILE: BackEnd/BackEndCapture.h
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#pragma once
#include "windows.h"
#include "implements.h"
#include "ICallControllerStatusListener.h"
#include "BackEndTransport.h"
#include <Windows.Phone.Media.Capture.h>
#include <Windows.Phone.Media.Capture.Native.h>

namespace PhoneVoIPApp
{
    namespace BackEnd
    {
        public delegate void CameraLocationChangedEventHandler(PhoneVoIPApp::BackEnd::CameraLocation);

        class CaptureSampleSink :
            public Microsoft::WRL::RuntimeClass<
            Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>, 
            ICameraCaptureSampleSink>
        {
            DWORD m_dwSampleCount;
            BackEndTransport ^m_transport;

        public:

            STDMETHODIMP RuntimeClassInitialize(BackEndTransport ^transportController)
            {
                m_dwSampleCount = 0;
                m_transport = transportController;
                return S_OK;
            }

            DWORD GetSampleCount()
            {
                return m_dwSampleCount;
            }

            IFACEMETHODIMP_(void)
                OnSampleAvailable(
                ULONGLONG hnsPresentationTime,
                ULONGLONG hnsSampleDuration,
                DWORD cbSample,
                BYTE* pSample)
            {
                m_dwSampleCount++;
                if (m_transport)
                {
                    m_transport->WriteVideo(pSample, cbSample, hnsPresentationTime, hnsSampleDuration);
                }
            }

            void SetTransport(BackEndTransport ^transport)
            {
                m_transport = transport;
            }
        };

        public ref class BackEndCapture sealed
        {
        public:
            // Constructor
            BackEndCapture();

            void SetTransport(BackEndTransport^ transport);

            void Start(CameraLocation cameraLocation);
            void Stop();

            void ToggleCamera();

            event CameraLocationChangedEventHandler^ CameraLocationChanged;

        private:
            // Destructor
            ~BackEndCapture();

            void InitCapture();

            void ToggleCameraThread(Windows::Foundation::IAsyncAction^ operation);

            // Has capture started?
            bool started;

            // Events to signal whether capture has stopped/started
            HANDLE hStopCompleted;
            HANDLE hStartCompleted;

            Windows::Foundation::IAsyncAction^ m_ToggleThread;

            // Transport
            BackEndTransport^ transportController;

            // Native sink and video device
            CaptureSampleSink *pVideoSink;
            IAudioVideoCaptureDeviceNative *pVideoDevice;

            Windows::Phone::Media::Capture::CameraSensorLocation cameraLocation;

            Windows::Phone::Media::Capture::AudioVideoCaptureDevice ^videoOnlyDevice;
            Windows::Foundation::IAsyncAction ^videoCaptureAction;

        };
    }
}


================================================
FILE: BackEnd/BackEndNativeBuffer.h
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#pragma once
#include "windows.h"
#include <robuffer.h>
#include <wrl.h>
#include <wrl/implements.h>
#include <wrl\client.h>
#include <windows.storage.streams.h>

namespace PhoneVoIPApp
{
    namespace BackEnd
    {

        /// <summary>
        /// The purpose of this class is to transform byte buffers into an IBuffer
        /// </summary>
        class NativeBuffer : public Microsoft::WRL::RuntimeClass<
                           Microsoft::WRL::RuntimeClassFlags< Microsoft::WRL::RuntimeClassType::WinRtClassicComMix >,
                           ABI::Windows::Storage::Streams::IBuffer,
                           Windows::Storage::Streams::IBufferByteAccess,
                           Microsoft::WRL::FtmBase>
        {

        public:
            virtual ~NativeBuffer()
            {
                if (m_pBuffer && m_bIsOwner)
                {
                    delete[] m_pBuffer;
                    m_pBuffer = NULL;
                }
            }

            STDMETHODIMP RuntimeClassInitialize(UINT totalSize)
            {
                m_uLength = totalSize;
                m_uFullSize = totalSize;
                m_pBuffer = new BYTE[totalSize];
                m_bIsOwner = TRUE;
                return S_OK;
            }

            STDMETHODIMP RuntimeClassInitialize(BYTE* pBuffer, UINT totalSize, BOOL fTakeOwnershipOfPassedInBuffer)
            {
                m_uLength = totalSize;
                m_uFullSize = totalSize;
                m_pBuffer = pBuffer;
                m_bIsOwner = fTakeOwnershipOfPassedInBuffer;
                return S_OK;
            }

            STDMETHODIMP Buffer( BYTE **value)
            {
                *value = m_pBuffer;
                return S_OK;
            }

             STDMETHODIMP get_Capacity(UINT32 *value)
             {
                 *value = m_uFullSize;
                 return S_OK;
             }
                        
            STDMETHODIMP get_Length(UINT32 *value)
            {
                *value = m_uLength;
                return S_OK;
            }
                        
            STDMETHODIMP put_Length(UINT32 value)
            {
                if(value > m_uFullSize)
                {
                    return E_INVALIDARG;
                }
                m_uLength = value;
                return S_OK;
            }

            static Windows::Storage::Streams::IBuffer^ GetIBufferFromNativeBuffer(Microsoft::WRL::ComPtr<NativeBuffer> spNativeBuffer)
            {
                auto iinspectable = reinterpret_cast<IInspectable*>(spNativeBuffer.Get());
                return reinterpret_cast<Windows::Storage::Streams::IBuffer^>(iinspectable);
            }
            static BYTE* GetBytesFromIBuffer(Windows::Storage::Streams::IBuffer^ buffer)
            {
                auto iinspectable = (IInspectable*)reinterpret_cast<IInspectable*>(buffer);
                Microsoft::WRL::ComPtr<Windows::Storage::Streams::IBufferByteAccess> spBuffAccess;
                HRESULT hr = iinspectable->QueryInterface(__uuidof(Windows::Storage::Streams::IBufferByteAccess), (void **)&spBuffAccess);
                UCHAR * pReadBuffer;
                spBuffAccess->Buffer(&pReadBuffer);
                return pReadBuffer;
            }
        private:
            UINT32 m_uLength;
            UINT32 m_uFullSize;
            BYTE* m_pBuffer;
            BOOL m_bIsOwner;
        };
    }
}


================================================
FILE: BackEnd/BackEndTransport.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include "BackEndTransport.h"
#include "BackEndNativeBuffer.h"
#include <ppltasks.h>

using namespace PhoneVoIPApp::BackEnd;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Storage::Streams;
using namespace Windows::System::Threading;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Details;

BackEndTransport::BackEndTransport()
{
}


void BackEndTransport::WriteAudio(BYTE* bytes, int byteCount)
{
    Write(bytes, byteCount, TransportMessageType::Audio, 0, 0);
}

void BackEndTransport::WriteVideo(BYTE* bytes, int byteCount, UINT64 hnsPresenationTime, UINT64 hnsSampleDuration)

{
    Write(bytes, byteCount, TransportMessageType::Video, hnsPresenationTime, hnsSampleDuration);
}

void BackEndTransport::Write(BYTE* bytes, int byteCount, TransportMessageType::Value dataType, UINT64 hnsPresenationTime, UINT64 hnsSampleDuration)
{

    static const int MaxPacketSize = 10*1024*1024;

    int bytesToSend = byteCount;

    while (bytesToSend)
    {
        int chunkSize = bytesToSend > MaxPacketSize ? MaxPacketSize : bytesToSend;
        ComPtr<NativeBuffer> spNativeBuffer = NULL;
        if (dataType == TransportMessageType::Audio)
        {
            MakeAndInitialize<NativeBuffer>(&spNativeBuffer, bytes, chunkSize, FALSE);
            AudioMessageReceived(NativeBuffer::GetIBufferFromNativeBuffer(spNativeBuffer), hnsPresenationTime, hnsSampleDuration);
        }
        else
        {
            // Temporarily duplicating this for sample so that MSS can own this
            // buffer, and will be released when the stream itself is released
            BYTE* pMem = new BYTE[chunkSize];
                
            memcpy((void*) pMem, (void*) bytes, chunkSize);

            MakeAndInitialize<NativeBuffer>(&spNativeBuffer, pMem, chunkSize, TRUE);
            VideoMessageReceived(NativeBuffer::GetIBufferFromNativeBuffer(spNativeBuffer), hnsPresenationTime, hnsSampleDuration);
        }

        // Increment byte position
        bytes += chunkSize;
        bytesToSend -= chunkSize;            
    }
    return;

}

BackEndTransport::~BackEndTransport()
{
}


================================================
FILE: BackEnd/BackEndTransport.h
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#pragma once
#include "windows.h"

namespace PhoneVoIPApp
{
    namespace BackEnd
    {
        namespace TransportMessageType
        {
            enum Value
            {
                Audio = 0,
                Video = 1
            };
        }

        public delegate void MessageReceivedEventHandler(Windows::Storage::Streams::IBuffer ^pBuffer, UINT64 hnsPresentationTime, UINT64 hnsSampleDuration);

        /// <summary>
        /// This is an abstraction of a network transport class
        /// which does not actually send data over the network.
        /// </summary>
        public ref class BackEndTransport sealed
        {
        public:
            // Constructor
            BackEndTransport();

            // Destructor
            virtual ~BackEndTransport();

            void WriteAudio(BYTE* bytes, int byteCount);
            void WriteVideo(BYTE* bytes, int byteCount, UINT64 hnsPresentationTime, UINT64 hnsSampleDuration);

            event MessageReceivedEventHandler^ AudioMessageReceived;
            event MessageReceivedEventHandler^ VideoMessageReceived;

        private:
            void Write(BYTE* bytes, int byteCount, TransportMessageType::Value dataType, UINT64 hnsPresentationTime, UINT64 hnsSampleDurationTime);
        };
    }
}


================================================
FILE: BackEnd/BackgroundTask.cpp
================================================
#include "BackgroundTask.h"
#include "Globals.h"
#include "CallController.h"

using namespace PhoneVoIPApp::BackEnd;
using namespace Windows::ApplicationModel::Background;
using namespace Windows::Phone::Networking::Voip;
using namespace Windows::Foundation;
using namespace Platform;
using namespace Windows::Phone::Media::Devices;

BackgroundTask::BackgroundTask()
{

}

void BackgroundTask::Run(IBackgroundTaskInstance^ taskInstance){

	return;

	VoipCallCoordinator^ callCoordinator = Windows::Phone::Networking::Voip::VoipCallCoordinator::GetDefault();

	Windows::Phone::Networking::Voip::VoipPhoneCall^ incomingCall;

	String^ installFolder = String::Concat(Windows::ApplicationModel::Package::Current->InstalledLocation->Path, "\\");
	TimeSpan timeout;
	timeout.Duration = 90 * 10 * 1000 * 1000; // in 100ns units
	callCoordinator->RequestNewIncomingCall(
		ref new String(L"/Views/ShellView.xaml"),
		ref new String(L"test contact"),
		ref new String(L"test number"),
		ref new Uri(installFolder, "Assets\\DefaultContactImage.png"),
		ref new String(L"PhoneVoIPApp"),
		ref new Uri(installFolder, "Assets\\ApplicationIcon.png"),
		ref new String(L"call details"),                      // Was this call forwarded/delegated to this user on behalf of someone else? At this time, we won't use this field
		ref new Uri(installFolder, "Assets\\Ringtone.wma"),
		VoipCallMedia::Audio,
		timeout,                // Maximum amount of time to ring for
		&incomingCall);
}

void BackgroundTask::IncomingCallDissmissed(){

}


================================================
FILE: BackEnd/BackgroundTask.h
================================================
#pragma once

using namespace Windows::ApplicationModel::Background;

namespace PhoneVoIPApp
{
	namespace BackEnd
	{
		[Windows::Foundation::Metadata::WebHostHidden]
		public ref class BackgroundTask sealed : public IBackgroundTask
		{
		public:
			BackgroundTask();
			virtual void Run(IBackgroundTaskInstance^ taskInstance);

		private:
			void IncomingCallDissmissed();
		};
	}
}



================================================
FILE: BackEnd/CallController.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include "CallController.h"
#include "BackEndAudio.h"
#include "BackEndCapture.h"
#include "Server.h"

using namespace PhoneVoIPApp::BackEnd;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Phone::Media::Devices;
using namespace Windows::Phone::Networking::Voip;

LibTgVoipStateListener::LibTgVoipStateListener(){

}

void LibTgVoipStateListener::OnCallStateChanged(libtgvoip::VoIPControllerWrapper^ sender, libtgvoip::CallState newState)
{
	if (this->statusListener != nullptr){
		this->statusListener->OnCallStateChanged((CallState)newState);
	}
}

void LibTgVoipStateListener::OnSignalBarsChanged(libtgvoip::VoIPControllerWrapper^ sender, int newSignal)
{
	if (this->statusListener != nullptr){
		this->statusListener->OnSignalBarsChanged(newSignal);
	}
}

void LibTgVoipStateListener::SetStatusCallback(ICallControllerStatusListener^ statusListener)
{
	this->statusListener = statusListener;
}

void CallController::StartMTProtoUpdater()
{
	if (Globals::Instance->MTProtoUpdater != nullptr)
	{
		Globals::Instance->MTProtoUpdater->Start(0, 0, 0);
	}
}

void CallController::StopMTProtoUpdater()
{
	if (Globals::Instance->MTProtoUpdater != nullptr)
	{
		Globals::Instance->MTProtoUpdater->Stop();
	}
}

void CallController::HandleUpdatePhoneCall()
{

	::OutputDebugString(L"[CallController::HandleUpdatePhoneCall]\n");
}

void CallController::CreateVoIPControllerWrapper()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	wrapper = ref new libtgvoip::VoIPControllerWrapper();
	
	//wrapper->SetStateCallback(stateListener);
	wrapper->CallStateChanged += ref new libtgvoip::CallStateChangedEventHandler(
		stateListener,
		&LibTgVoipStateListener::OnCallStateChanged
	);
	wrapper->SignalBarsChanged += ref new libtgvoip::SignalBarsChangedEventHandler(
		stateListener,
		&LibTgVoipStateListener::OnSignalBarsChanged
	);
}

void CallController::DeleteVoIPControllerWrapper()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		delete wrapper;
		wrapper = nullptr;
	}
}

void CallController::SetConfig(Config config)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		wrapper->SetConfig(config.InitTimeout, config.RecvTimeout, (libtgvoip::DataSavingMode)config.DataSavingMode, config.EnableAEC, config.EnableNS, config.EnableAGC, config.LogFilePath, config.StatsDumpFilePath);
	}
}

void CallController::SetEncryptionKey(const Platform::Array<uint8>^ key, bool isOutgoing)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		wrapper->SetEncryptionKey(key, isOutgoing);
	}
}

void CallController::SetPublicEndpoints(const Platform::Array<EndpointStruct>^ endpoints, bool allowP2P, int connectionMaxLayer)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		auto points = ref new Platform::Array<libtgvoip::Endpoint^>(endpoints->Length);

		for (int i = 0; i < endpoints->Length; i++)
		{
			auto point = ref new libtgvoip::Endpoint();
			point->id = endpoints[i].id;
			point->port = endpoints[i].port;
			point->ipv4 = endpoints[i].ipv4;
			point->ipv6 = endpoints[i].ipv6;

			auto length = endpoints[i].peerTag->Length();
			auto it = endpoints[i].peerTag->Begin();
			auto peerTag = ref new Platform::Array<byte>(length);
			for (size_t i = 0; i < length; i++)
			{
				peerTag[i] = (byte)it[i];
			}
			point->peerTag = peerTag;

			points[i] = point;
		}

		wrapper->SetPublicEndpoints(points, allowP2P, connectionMaxLayer);
	}
}

void CallController::SetProxy(ProxyStruct proxy)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		wrapper->SetProxy((libtgvoip::ProxyProtocol)proxy.protocol, proxy.address, proxy.port, proxy.username, proxy.password);
	}
}

void CallController::Start()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		wrapper->Start();
	}
}

void Handler(Windows::System::Threading::ThreadPoolTimer^ timer){
	::OutputDebugString(L"PeriodicTimer.Handler");
}

void CallController::Connect()
{
	::OutputDebugString(L"[CallController::Connect]\n");

	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr)
	{
		wrapper->Connect();
	}
}

void CallController::SetMicMute(bool mute)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		wrapper->SetMicMute(mute);
	}
}
void CallController::SwitchSpeaker(bool external)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	libtgvoip::VoIPControllerWrapper::SwitchSpeaker(external);
}

void CallController::SetStatusCallback(ICallControllerStatusListener^ statusListener)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    this->statusListener = statusListener;
	this->stateListener->SetStatusCallback(statusListener);
}

void CallController::UpdateServerConfig(Platform::String^ json)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	libtgvoip::VoIPControllerWrapper::UpdateServerConfig(json);
}

int64 CallController::GetPreferredRelayID()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		return wrapper->GetPreferredRelayID();
	}

	return 0;
}

Error CallController::GetLastError()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		return (Error)wrapper->GetLastError();
	}

	return Error::Unknown;
}

Platform::String^ CallController::GetVersion()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	return libtgvoip::VoIPControllerWrapper::GetVersion();
}

int CallController::GetSignalBarsCount()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		return wrapper->GetSignalBarsCount();
	}

	return 0;
}

Platform::String^ CallController::GetDebugLog()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		return wrapper->GetDebugLog();
	}

	return nullptr;
}

Platform::String^ CallController::GetDebugString()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	if (wrapper != nullptr){
		return wrapper->GetDebugString();
	}

	return nullptr;
}

bool CallController::InitiateOutgoingCall(Platform::String^ recepientName, int64 recepientId, int64 id, int64 accessHash, 
	Config config, const Platform::Array<uint8>^ key, bool outgoing, const Platform::Array<Platform::String^>^ emojis, 
	const Platform::Array<EndpointStruct>^ endpoints, bool allowP2P, int connectionMaxLayer,
	ProxyStruct proxy)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	VoipPhoneCall^ outgoingCall = nullptr;

	// In this sample, we allow only one call at a time.
	if (this->activeCall != nullptr)
	{
		::OutputDebugString(L"[CallController::InitiateOutgoingCall] => Only one active call allowed in this sample at a time\n");

		this->activeCall->NotifyCallEnded();

		// If we receive a request to initiate an outgoing call when another call is in progress,
		// we just ignore it. 
		//return false;
	}

	::OutputDebugString(L"[CallController::InitiateOutgoingCall] => Starting outgoing call\n");

	// Start a new outgoing call.
	this->callCoordinator->RequestNewOutgoingCall(this->callInProgressPageUri, recepientName, "Telegram", VoipCallMedia::Audio
		//| VoipCallMedia::Video
		, &outgoingCall);

	// Tell the phone service that this call is active.
	// Normally, we do this only when the remote party has accepted the call.
	outgoingCall->NotifyCallActive();

	// Store it as the active call - assume we support both audio and video
	this->SetActiveCall(outgoingCall, recepientId, id, accessHash, key, outgoing, emojis, VoipCallMedia::Audio
		//| VoipCallMedia::Video
		);

	this->DeleteVoIPControllerWrapper();
	this->CreateVoIPControllerWrapper();
	this->SetConfig(config);
	this->SetEncryptionKey(key, outgoing);
	this->SetPublicEndpoints(endpoints, allowP2P, connectionMaxLayer);
	this->SetProxy(proxy);
	this->Start();
	//UpdateNetworkType(null);
	this->Connect();


	return true;
}

bool CallController::InitiateOutgoingCall(Platform::String^ recepientName, int64 recepientId, int64 callId, int64 callAccessHash)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    VoipPhoneCall^ outgoingCall = nullptr;

    // In this sample, we allow only one call at a time.
    if (this->activeCall != nullptr)
    {
        ::OutputDebugString(L"[CallController::InitiateOutgoingCall] => Only one active call allowed in this sample at a time\n");

        // If we receive a request to initiate an outgoing call when another call is in progress,
        // we just ignore it. 
        return false;
    }

    ::OutputDebugString(L"[CallController::InitiateOutgoingCall] => Starting outgoing call\n");

    // Start a new outgoing call.
    this->callCoordinator->RequestNewOutgoingCall(this->callInProgressPageUri, recepientName, "Telegram", VoipCallMedia::Audio
		//| VoipCallMedia::Video
		, &outgoingCall);

    // Tell the phone service that this call is active.
    // Normally, we do this only when the remote party has accepted the call.
    outgoingCall->NotifyCallActive();

    // Store it as the active call - assume we support both audio and video
	this->SetActiveCall(outgoingCall, recepientId, callId, callAccessHash, nullptr, true, nullptr, VoipCallMedia::Audio
		//| VoipCallMedia::Video
		);

    return true;
}

bool CallController::OnIncomingCallReceived(Platform::String^ contactName, int64 contactId, Platform::String^ contactImage, int64 callId, int64 callAccessHash, IncomingCallDialogDismissedCallback^ incomingCallDialogDismissedCallback)
{
    VoipPhoneCall^ incomingCall = nullptr;

    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // TODO: If required, contact your cloud service here for more information about the incoming call.

    try
    {
        TimeSpan timeout;
        timeout.Duration = 25 * 10 * 1000 * 1000; // in 100ns units

        ::OutputDebugString(L"[CallController::OnIncomingCallReceived] => Will time out in 90 seconds\n");

        // Store the caller number of this incoming call
        this->incomingId = contactId;
		this->incomingCallId = callId;
		this->incomingCallAccessHash = callAccessHash;

        // Store the callback that needs to be called when the incoming call dialog has been dismissed,
        // either because the call was accepted or rejected by the user.
        this->onIncomingCallDialogDismissed = incomingCallDialogDismissedCallback;
		//Windows::ApplicationModel::Package::Current->InstalledLocation->Path
		Uri^ contactImageUri = nullptr;
		if (contactImage != nullptr)
		{
			String^ localFolder = String::Concat(Windows::Storage::ApplicationData::Current->LocalFolder->Path, "\\");
			contactImageUri = ref new Uri(localFolder, contactImage);
		}

        // Ask the Phone Service to start a new incoming call
        this->callCoordinator->RequestNewIncomingCall(
            this->callInProgressPageUri,
            contactName,
            "Telegram Call",
            contactImageUri,
            this->voipServiceName,
            this->brandingImageUri,
            "",                      // Was this call forwarded/delegated to this user on behalf of someone else? At this time, we won't use this field
            this->ringtoneUri,
            VoipCallMedia::Audio,	// | VoipCallMedia::Video,
            timeout,                // Maximum amount of time to ring for
            &incomingCall);
    }
    catch(...)
    {
        // Requesting an incoming call can fail if there is already an incoming call in progress.
        // This is rare, but possible. Treat this case like a missed call.
        ::OutputDebugString(L"[CallController::OnIncomingCallReceived] => An exception has occurred\n");
        return false;
    }

    // Register for events about this incoming call.
    incomingCall->AnswerRequested += this->acceptCallRequestedHandler;
    incomingCall->RejectRequested += this->rejectCallRequestedHandler;

    return true;
}

bool CallController::HoldCall()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // Nothing to do - there is no call to put on hold
        return false;
    }

    ::OutputDebugString(L"[CallController::HoldCall] => Trying to put call on hold\n");

    // Change the call status before notifying that the call is held because
    // access to the camera will be removed once NotifyCallHeld is called
    this->SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus::Held);

    // Hold the active call
    this->activeCall->NotifyCallHeld();

    // TODO: Contact your cloud service and let it know that the active call has been put on hold.

    return true;
}

bool CallController::ResumeCall()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // Nothing to do - there is no call to resume
        return false;
    }

    ::OutputDebugString(L"[CallController::ResumeCall] => Trying to resume a call\n");

    // Resume the active call
    this->activeCall->NotifyCallActive();

    // TODO: Contact your cloud service and let it know that the active call has been resumed.

    // Change the call status after notifying that the call is active
    // if it is done before access to the camera will not have been granted yet
    this->SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus::InProgress);

    return true;
}

bool CallController::EndCall()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // Nothing to do - there is no call to end
        return false;
    }

    ::OutputDebugString(L"[CallController::EndCall] => Trying to end a call\n");

    // Unregister from audio endpoint changes
    this->audioRoutingManager->AudioEndpointChanged -= this->audioEndpointChangedHandlercookie;

    // TODO: Contact your cloud service and let it know that the active call has ended.

    // End the active call.
    this->activeCall->NotifyCallEnded();
    this->activeCall = nullptr;

	// Reset libtgvoip call params
	this->key = nullptr;
	this->callId = -1;
	this->callAccessHash = 0;
	this->otherPartyId = 0;
	this->emojis = nullptr;
    
    // Reset camera choice to front facing for next call
    this->cameraLocation = PhoneVoIPApp::BackEnd::CameraLocation::Front;

	// Change the call status
	this->SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus::None);

    return true;
}

bool CallController::ToggleCamera()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // Nothing to do - there is no call to end
        return false;
    }
    ::OutputDebugString(L"[CallController::ToggleCamera] => Trying to toggle the camera\n");

    Globals::Instance->CaptureController->ToggleCamera();

    return true;
}

PhoneVoIPApp::BackEnd::CallStatus CallController::CallStatus::get()
{
    // No need to lock - this get is idempotent
    return this->callStatus;
}

PhoneVoIPApp::BackEnd::CameraLocation CallController::CameraLocation::get()
{
    // No need to lock - this get is idempotent
    return this->cameraLocation;
}

PhoneVoIPApp::BackEnd::MediaOperations CallController::MediaOperations::get()
{
    // No need to lock - this get is idempotent
    return this->mediaOperations;
}

bool CallController::IsShowingVideo::get()
{
    // No need to lock - this get is idempotent
    return this->isShowingVideo;
}

void CallController::IsShowingVideo::set(bool value)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // Has anything changed?
    if (this->isShowingVideo == value)
        return; // No

    // Update the value
    this->isShowingVideo = value;

    // Start/stop video capture/render based on this change
    this->UpdateMediaOperations();
}

bool CallController::IsRenderingVideo::get()
{
    // No need to lock - this get is idempotent
    return this->isRenderingVideo;
}

void CallController::IsRenderingVideo::set(bool value)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // Has anything changed?
    if (this->isRenderingVideo == value)
        return; // No

    // Update the value
    this->isRenderingVideo = value;

    // Start/stop video capture/render based on this change
    this->UpdateMediaOperations();
}

CallAudioRoute CallController::AvailableAudioRoutes::get()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // There is no call in progress
        return CallAudioRoute::None;
    }

    return (CallAudioRoute)(this->audioRoutingManager->AvailableAudioEndpoints);
}

CallAudioRoute CallController::AudioRoute::get()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall == nullptr)
    {
        // There is no call in progress
        return CallAudioRoute::None;
    }

    auto audioEndpoint = this->audioRoutingManager->GetAudioEndpoint();
    switch(audioEndpoint)
    {
    case AudioRoutingEndpoint::Earpiece:
    case AudioRoutingEndpoint::WiredHeadset:
    case AudioRoutingEndpoint::WiredHeadsetSpeakerOnly:
        return CallAudioRoute::Earpiece;

    case AudioRoutingEndpoint::Default:
    case AudioRoutingEndpoint::Speakerphone:
        return CallAudioRoute::Speakerphone;

    case AudioRoutingEndpoint::Bluetooth:
    case AudioRoutingEndpoint::BluetoothWithNoiseAndEchoCancellation:
        return CallAudioRoute::Bluetooth;

    default:
        throw ref new FailureException("Unexpected audio routing endpoint");
    }

}

void CallController::AudioRoute::set(CallAudioRoute newRoute)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->callStatus != PhoneVoIPApp::BackEnd::CallStatus::InProgress)
    {
        // There is no call in progress - do nothing
        return;
    }

    switch(newRoute)
    {
    case CallAudioRoute::Earpiece:
        this->audioRoutingManager->SetAudioEndpoint(AudioRoutingEndpoint::Earpiece);
        break;

    case CallAudioRoute::Speakerphone:
        this->audioRoutingManager->SetAudioEndpoint(AudioRoutingEndpoint::Speakerphone);
        break;

    case CallAudioRoute::Bluetooth:
        this->audioRoutingManager->SetAudioEndpoint(AudioRoutingEndpoint::Bluetooth);
        break;

    case CallAudioRoute::None:
    default:
        throw ref new FailureException("Cannot set audio route to CallAudioRoute::None");
    }
}

Platform::String^ CallController::OtherPartyName::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);
	return this->otherPartyName;
}

int64 CallController::OtherPartyId::get()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);
    return this->otherPartyId;
}

Windows::Foundation::DateTime CallController::CallStartTime::get()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (this->activeCall != nullptr)
    {
        // There is a call in progress
        return this->activeCall->StartTime;
    }
    else
    {
        // There is no call in progress
        Windows::Foundation::DateTime minValue;
        minValue.UniversalTime = 0;
        return minValue;
    }
}

int64 CallController::CallId::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);
	return this->callId;
}

int64 CallController::CallAccessHash::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);
	return this->callAccessHash;
}

int64 CallController::AcceptedCallId::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	return this->acceptedCallId;
}

void CallController::AcceptedCallId::set(int64 value)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	this->acceptedCallId = value;
}

Platform::Array<uint8>^ CallController::Key::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	return this->key;
}

bool CallController::Outgoing::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	return this->outgoing;
}

Platform::Array<Platform::String^>^ CallController::Emojis::get()
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	return this->emojis;
}

CallController::CallController() :
	wrapper(nullptr),
    callInProgressPageUri(L"/Views/ShellView.xaml"),
    voipServiceName(nullptr),
    defaultContactImageUri(nullptr),
    brandingImageUri(nullptr),
    ringtoneUri(nullptr),
    statusListener(nullptr),
    callStatus(PhoneVoIPApp::BackEnd::CallStatus::None),
    otherPartyName(nullptr),
    otherPartyId(-1),
    incomingId(-1),
	acceptedCallId(-1),
	key(nullptr),
	emojis(nullptr),
    mediaOperations(PhoneVoIPApp::BackEnd::MediaOperations::None),
    onIncomingCallDialogDismissed(nullptr),
    activeCall(nullptr),
    cameraLocation(PhoneVoIPApp::BackEnd::CameraLocation::Front)
{
	this->stateListener = ref new LibTgVoipStateListener();
    this->callCoordinator = VoipCallCoordinator::GetDefault();
    this->audioRoutingManager = AudioRoutingManager::GetDefault();

    // URIs required for interactions with the VoipCallCoordinator
    String^ installFolder = String::Concat(Windows::ApplicationModel::Package::Current->InstalledLocation->Path, "\\");
    //this->defaultContactImageUri = ref new Uri(installFolder, "Assets\\DefaultContactImage.png");
    this->voipServiceName = ref new String(L"Telegram");
    this->brandingImageUri = ref new Uri(installFolder, "SquareTile150x150.png");
    //this->ringtoneUri = ref new Uri(installFolder, "Assets\\Ringtone.wma");

    // Event handler delegates - creating them once and storing them as member variables
    // avoids having to create new delegate objects for each phone call.
    this->acceptCallRequestedHandler = ref new TypedEventHandler<VoipPhoneCall^, CallAnswerEventArgs^>(this, &CallController::OnAcceptCallRequested);
    this->rejectCallRequestedHandler = ref new TypedEventHandler<VoipPhoneCall^, CallRejectEventArgs^>(this, &CallController::OnRejectCallRequested);
    this->holdCallRequestedHandler = ref new TypedEventHandler<VoipPhoneCall^, CallStateChangeEventArgs^>(this, &CallController::OnHoldCallRequested);
    this->resumeCallRequestedHandler = ref new TypedEventHandler<VoipPhoneCall^, CallStateChangeEventArgs^>(this, &CallController::OnResumeCallRequested);
    this->endCallRequestedHandler = ref new TypedEventHandler<VoipPhoneCall^, CallStateChangeEventArgs^>(this, &CallController::OnEndCallRequested);
    this->audioEndpointChangedHandler = ref new TypedEventHandler<AudioRoutingManager^, Object^>(this, &CallController::OnAudioEndpointChanged);
    this->cameraLocationChangedHandler = ref new CameraLocationChangedEventHandler(this, &CallController::OnCameraLocationChanged);
}

CallController::~CallController()
{
}

void CallController::SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus newStatus)
{
    // No need to lock - private method

    if (newStatus == this->callStatus)
        return; // Nothing more to do

    // Change the call status
    this->callStatus = newStatus;

    // Update audio/video capture/render status, if required.
    this->UpdateMediaOperations();

    // If required, let the UI know.
    if (this->statusListener != nullptr)
    {
        this->statusListener->OnCallStatusChanged(this->callStatus);
    }
}

void CallController::SetActiveCall(VoipPhoneCall^ call, int64 contactId, int64 callId, int64 callAccessHash, const Platform::Array<uint8_t>^ key, bool outgoing, const Platform::Array<Platform::String^>^ emojis, VoipCallMedia callMedia)
{
    // No need to lock - private method

    // The specified call is now active.
    // For an incoming call, this means that the local party has accepted the call.
    // For an outoing call, this means that the remote party has accepted the call.
    this->activeCall = call;

    // Listen to state changes of the active call.
    call->HoldRequested += this->holdCallRequestedHandler;
    call->ResumeRequested += this->resumeCallRequestedHandler;
    call->EndRequested += this->endCallRequestedHandler;

    // Register for audio endpoint changes
    this->audioEndpointChangedHandlercookie = this->audioRoutingManager->AudioEndpointChanged += this->audioEndpointChangedHandler;

    // Store information about the other party in the call
    this->otherPartyName = this->activeCall->ContactName;
	this->otherPartyId = contactId;
	this->callId = callId;
	this->callAccessHash = callAccessHash;

	if (key != nullptr)
	{
		this->key = ref new Platform::Array<uint8_t>(key->Data, key->Length);
	}
	else
	{
		this->key = nullptr;
	}
	if (emojis != nullptr)
	{
		this->emojis = ref new Platform::Array<Platform::String^>(emojis->Data, emojis->Length);
	}
	else
	{
		this->emojis = nullptr;
	}

	this->outgoing = outgoing;

    // Change the call status
    this->SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus::InProgress);

    // Figure out if video/audio capture/render are all allowed
    PhoneVoIPApp::BackEnd::MediaOperations newOperations = PhoneVoIPApp::BackEnd::MediaOperations::None;
    if ((callMedia & VoipCallMedia::Audio) != VoipCallMedia::None)
    {
        // Enable both audio capture and render by default
        newOperations = PhoneVoIPApp::BackEnd::MediaOperations::AudioCapture | PhoneVoIPApp::BackEnd::MediaOperations::AudioRender;
    }
    if ((callMedia & VoipCallMedia::Video) != VoipCallMedia::None)
    {
        // Enable both video capture and render by default
        newOperations = newOperations | PhoneVoIPApp::BackEnd::MediaOperations::VideoCapture | PhoneVoIPApp::BackEnd::MediaOperations::VideoRender;

    }
    this->SetMediaOperations(newOperations);
}

void CallController::OnAcceptCallRequested(VoipPhoneCall^ sender, CallAnswerEventArgs^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    ::OutputDebugString(L"[CallController::OnAcceptCallRequested] => Incoming call accepted\n");

    // The local user has accepted an incoming call.
    VoipPhoneCall^ incomingCall = (VoipPhoneCall^)sender;

    // If there is was a call already in progress, end it
    // As of now, we support only one call at a time in this application
    this->EndCall();

    // Reset camera choice to front facing for next call
    this->cameraLocation = PhoneVoIPApp::BackEnd::CameraLocation::Front;

    // The incoming call is the new active call.
    incomingCall->NotifyCallActive();

	this->acceptedCallId = this->incomingCallId;

    // Let the incoming call agent know that incoming call processing is now complete
    if (this->onIncomingCallDialogDismissed != nullptr)
        this->onIncomingCallDialogDismissed(this->incomingCallId, this->incomingCallAccessHash, false);

    // Store it as the active call.
    this->SetActiveCall(incomingCall, this->incomingId, this->incomingCallId, this->incomingCallAccessHash, nullptr, false, nullptr, args->AcceptedMedia);
}

void CallController::OnRejectCallRequested(VoipPhoneCall^ sender, CallRejectEventArgs^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    ::OutputDebugString(L"[CallController::OnRejectCallRequested] => Incoming call rejected\n");

    // The local user has rejected an incoming call.
    VoipPhoneCall^ incomingCall = (VoipPhoneCall^)sender;

    // End it.
    incomingCall->NotifyCallEnded();

    // TODO: Contact your cloud service and let it know that the incoming call was rejected.
	
    // Finally, let the incoming call agent know that incoming call processing is now complete
	this->onIncomingCallDialogDismissed(this->incomingCallId, this->incomingCallAccessHash, true);
}

void CallController::OnHoldCallRequested(VoipPhoneCall^ sender, CallStateChangeEventArgs^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // A request to put the active call on hold has been received.
    VoipPhoneCall^ callToPutOnHold = (VoipPhoneCall^)sender;

    // Sanity test.
    if (callToPutOnHold != this->activeCall)
    {
        throw ref new Platform::FailureException(L"Something is wrong. The call to put on hold is not the active call");
    }

    // Put the active call on hold.
    this->HoldCall();
}

void CallController::OnResumeCallRequested(VoipPhoneCall^ sender, CallStateChangeEventArgs^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // A request to resumed the active call has been received.
    VoipPhoneCall^ callToResume = (VoipPhoneCall^)sender;

    // Sanity test.
    if (callToResume != this->activeCall)
    {
        throw ref new Platform::FailureException(L"Something is wrong. The call to resume is not the active call");
    }

    // Resume the active call
    this->ResumeCall();
}

void CallController::OnEndCallRequested(VoipPhoneCall^ sender, CallStateChangeEventArgs^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // A request to end the active call has been received.
    VoipPhoneCall^ callToEnd = (VoipPhoneCall^)sender;

    // Sanity test.
    if (callToEnd != this->activeCall)
    {
        throw ref new Platform::FailureException(L"Something is wrong. The call to end is not the active call");
    }

    // End the active call
    this->EndCall();
}

void CallController::OnAudioEndpointChanged(AudioRoutingManager^ sender, Object^ args)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // If required, let the UI know.
    if ((this->activeCall != nullptr) && (this->statusListener != nullptr))
    {
        this->statusListener->OnCallAudioRouteChanged(this->AudioRoute);
    }
}

void CallController::OnCameraLocationChanged(PhoneVoIPApp::BackEnd::CameraLocation newCameraLocation)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if(this->cameraLocation == newCameraLocation || this->activeCall == nullptr)
    {
        // nothing to do
        return;
    }

    this->cameraLocation = newCameraLocation;

    // If required, let the UI know.
    if ((this->statusListener != nullptr))
    {
        this->statusListener->OnCameraLocationChanged(this->cameraLocation);
    }

}

void CallController::SetMediaOperations(PhoneVoIPApp::BackEnd::MediaOperations value)
{
    // No need to lock - private method

    // Has anything changed?
    if (this->mediaOperations == value)
        return; // No

    // Update the value
    this->mediaOperations = value;

    // Start/stop video/audio capture based on this change
    this->UpdateMediaOperations();
}

void CallController::UpdateMediaOperations()
{
    // No need to lock - private method

    bool captureAudio = false, captureVideo = false, renderAudio = false, renderVideo = false;

    if (this->callStatus == PhoneVoIPApp::BackEnd::CallStatus::InProgress)
    {
        // A call is in progress

        // Start audio capture/render, if enabled
        captureAudio = ((this->mediaOperations & PhoneVoIPApp::BackEnd::MediaOperations::AudioCapture) != PhoneVoIPApp::BackEnd::MediaOperations::None);
        renderAudio = ((this->mediaOperations & PhoneVoIPApp::BackEnd::MediaOperations::AudioRender) != PhoneVoIPApp::BackEnd::MediaOperations::None);

        // Start video capture/render if enabled *and* the UI is showing video.
        if (this->isShowingVideo)
        {
            if(isRenderingVideo)
            {
                renderVideo = ((this->mediaOperations & PhoneVoIPApp::BackEnd::MediaOperations::VideoRender) != PhoneVoIPApp::BackEnd::MediaOperations::None);
            }

            // Does this phone have a camera?
            auto availableCameras = Windows::Phone::Media::Capture::AudioVideoCaptureDevice::AvailableSensorLocations;
            bool isCameraPresent = ((availableCameras != nullptr) && (availableCameras->Size > 0));

            // Start capture only if there is a camera present
            if (isCameraPresent)
            {
                captureVideo = ((this->mediaOperations & PhoneVoIPApp::BackEnd::MediaOperations::VideoCapture) != PhoneVoIPApp::BackEnd::MediaOperations::None);
            }
        }
    }
    // else: call is not in progress - all capture/rendering should stop

    // What are the new media operations?
    PhoneVoIPApp::BackEnd::MediaOperations newOperations = PhoneVoIPApp::BackEnd::MediaOperations::None;

    // Start/stop audio capture and render
    if (captureAudio || renderAudio)
    {
        ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Starting audio\n");
        newOperations = newOperations | (PhoneVoIPApp::BackEnd::MediaOperations::AudioCapture | PhoneVoIPApp::BackEnd::MediaOperations::AudioRender);
        //Globals::Instance->AudioController->Start();
    }
    else
    {
        ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Stopping audio\n");
        //Globals::Instance->AudioController->Stop();
    }

    // Start/stop video render
    if (Globals::Instance->VideoRenderer != nullptr)
    {
        if (renderVideo)
        {
            ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Starting video render\n");
            newOperations = newOperations | PhoneVoIPApp::BackEnd::MediaOperations::VideoRender;
            Globals::Instance->VideoRenderer->Start();
        }
        else
        {
            ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Stopping video render\n");
            Globals::Instance->VideoRenderer->Stop();
        }

        if (captureVideo)
        {
            ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Starting video capture\n");
            newOperations = newOperations | PhoneVoIPApp::BackEnd::MediaOperations::VideoCapture;
            Globals::Instance->CaptureController->Start(cameraLocation);
            Globals::Instance->CaptureController->CameraLocationChanged += cameraLocationChangedHandler;
        }
        else
        {
            ::OutputDebugString(L"[CallController::UpdateMediaOperations] => Stopping video capture\n");
            Globals::Instance->CaptureController->Stop();
        }
    }

    // Let the listener know that the allowed media operation state has changed
    if (this->statusListener != nullptr)
    {
        this->statusListener->OnMediaOperationsChanged(newOperations);
    }
}


================================================
FILE: BackEnd/CallController.h
================================================
/*
Copyright (c) 2012 Microsoft Corporation.  All rights reserved.
Use of this sample source code is subject to the terms of the Microsoft license
agreement under which you licensed this sample source code and is provided AS-IS.
If you did not accept the terms of the license agreement, you are not authorized
to use this sample source code.  For the terms of the license, please see the
license agreement between you and Microsoft.

To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604

*/
#pragma once
#include "BackEndCapture.h"
#include <windows.phone.networking.voip.h>
#include "ICallControllerStatusListener.h"
#include "IConfig.h"
#include "ApiLock.h"

namespace PhoneVoIPApp
{
	namespace BackEnd
	{
		// Forward declaration
		ref class Globals;

		// A method that is called back when the incoming call dialog has been dismissed.
		// This callback is used to complete the incoming call agent.
		public delegate void IncomingCallDialogDismissedCallback(int64 callId, int64 callAccessHash, bool rejected);

		ref class LibTgVoipStateListener sealed {
		private:
			ICallControllerStatusListener^ statusListener;

		public:
			LibTgVoipStateListener();
			void SetStatusCallback(ICallControllerStatusListener^ statusListener);
			virtual void OnCallStateChanged(libtgvoip::VoIPControllerWrapper^ sender, libtgvoip::CallState newState);
			virtual void OnSignalBarsChanged(libtgvoip::VoIPControllerWrapper^ sender, int signal);
		};

		public value struct Config{
			double InitTimeout;
			double RecvTimeout;
			DataSavingMode DataSavingMode;
			bool EnableAEC;
			bool EnableNS;
			bool EnableAGC;
			Platform::String^ LogFilePath;
			Platform::String^ StatsDumpFilePath;
		};

		// A class that provides methods and properties related to VoIP calls.
		// It wraps Windows.Phone.Networking.Voip.VoipCallCoordinator, and provides app-specific call functionality.
		public ref class CallController sealed
		{
		public:

			// The public methods below are just for illustration purposes - add your own methods here
			// mtproto
			void HandleUpdatePhoneCall();
			void StartMTProtoUpdater();
			void StopMTProtoUpdater();

			// libtgvoip
			void CreateVoIPControllerWrapper();
			void DeleteVoIPControllerWrapper();
			void SetConfig(Config config);
			void SetEncryptionKey(const Platform::Array<uint8>^ key, bool isOutgoing);
			void SetPublicEndpoints(const Platform::Array<EndpointStruct>^ endpoints, bool allowP2P, int connectionMaxLayer);
			void SetProxy(ProxyStruct proxy);
			void Start();
			void Connect();

			void SetMicMute(bool mute);
			void SwitchSpeaker(bool external);
			void UpdateServerConfig(Platform::String^ json);
			int64 GetPreferredRelayID();
			Error GetLastError();
			Platform::String^ GetDebugLog();
			Platform::String^ GetDebugString();
			Platform::String^ GetVersion();
			int GetSignalBarsCount();

			// Provide an inteface that can be used to get call controller status change notifications
			void SetStatusCallback(ICallControllerStatusListener^ statusListener);

			// Initiate an outgoing call. Called by the UI process.
			// Returns true if the outgoing call processing was started, false otherwise.
			bool InitiateOutgoingCall(Platform::String^ recepientName, int64 recepientId, int64 callId, int64 callAccessHash);
			bool InitiateOutgoingCall(Platform::String^ recepientName, int64 recepientId, int64 callId, int64 callAccessHash, 
				Config config, const Platform::Array<uint8>^ key, bool outgoing, 
				const Platform::Array<Platform::String^>^ emojis, const Platform::Array<EndpointStruct>^ endpoints, 
				bool allowP2P, int connectionMaxLayer,
				ProxyStruct proxy);

			// Start processing an incoming call. Called by managed code in this process (the VoIP agent host process).
			// Returns true if the incoming call processing was started, false otherwise.
			bool OnIncomingCallReceived(Platform::String^ contactName, int64 contactId, Platform::String^ contactImage, int64 callId, int64 callAccessHash, IncomingCallDialogDismissedCallback^ incomingCallDialogDismissedCallback);

			// Hold a call. Called by the UI process.
			bool HoldCall();

			// Resume a call. Called by the UI process.
			bool ResumeCall();

			// End a call. Called by the UI process.
			bool EndCall();

			// Toggle the camera location. Called by the UI process.
			bool ToggleCamera();

			// Get the call state
			property PhoneVoIPApp::BackEnd::CallStatus CallStatus
			{
				PhoneVoIPApp::BackEnd::CallStatus get();
			};

			// Get or set the media operations that are allowed for a call.
			property PhoneVoIPApp::BackEnd::MediaOperations MediaOperations
			{
				PhoneVoIPApp::BackEnd::MediaOperations get();
			}

			// Indicates if video is currently being displayed or not
			property bool IsShowingVideo
			{
				bool get();
				void set(bool value);
			}

			// Indicates whether the video is being rendered or not.
			property bool IsRenderingVideo
			{
				bool get();
				void set(bool value);
			}

			// Get the current camera location
			property PhoneVoIPApp::BackEnd::CameraLocation CameraLocation
			{
				PhoneVoIPApp::BackEnd::CameraLocation get();
			}

			// Get the possible routes for audio
			property CallAudioRoute AvailableAudioRoutes
			{
				CallAudioRoute get();
			}

			// Get or set the current route for audio
			property CallAudioRoute AudioRoute
			{
				CallAudioRoute get();
				void set(CallAudioRoute newRoute);
			}

			// Get the name of the other party in the most recent call.
			// Can return nullptr if there hasn't been a call yet.
			property Platform::String^ OtherPartyName
			{
				Platform::String^ get();
			}

			// Get the name of the other party in the most recent call.
			// Can return nullptr if there hasn't been a call yet.
			property int64 OtherPartyId
			{
				int64 get();
			}

			// Get call start time
			property Windows::Foundation::DateTime CallStartTime
			{
				Windows::Foundation::DateTime get();
			}

			property int64 CallId
			{
				int64 get();
			}

			property int64 CallAccessHash
			{
				int64 get();
			}

			property int64 AcceptedCallId
			{
				int64 get();
				void set(int64 value);
			}

			property Platform::Array<uint8>^ Key
			{
				Platform::Array<uint8>^ get();
			}

			property bool Outgoing
			{
				bool get();
			}

			property Platform::Array<Platform::String^>^ Emojis
			{
				Platform::Array<Platform::String^>^ get();
			}

		private:
			libtgvoip::VoIPControllerWrapper^ wrapper;
			LibTgVoipStateListener^ stateListener;

			// Only the server can create an instance of this object
			friend ref class PhoneVoIPApp::BackEnd::Globals;

			// Constructor and destructor
			CallController();
			~CallController();

			// Set the call status
			void SetCallStatus(PhoneVoIPApp::BackEnd::CallStatus newStatus);

			// Indicates that a call is now active 
			void SetActiveCall(Windows::Phone::Networking::Voip::VoipPhoneCall^ call, int64 contactId, int64 callId, int64 callAccessHash, const Platform::Array<uint8_t>^ key, bool outgoing, const Platform::Array<Platform::String^>^ emojis, Windows::Phone::Networking::Voip::VoipCallMedia callMedia);

			// Called by the VoipCallCoordinator when the user accepts an incoming call.
			void OnAcceptCallRequested(Windows::Phone::Networking::Voip::VoipPhoneCall^ sender, Windows::Phone::Networking::Voip::CallAnswerEventArgs^ args);

			// Called by the VoipCallCoordinator when the user rejects an incoming call.
			void OnRejectCallRequested(Windows::Phone::Networking::Voip::VoipPhoneCall^ sender, Windows::Phone::Networking::Voip::CallRejectEventArgs^ args);

			// Called by the VoipCallCoordinator when a call is to be put on hold.
			void OnHoldCallRequested(Windows::Phone::Networking::Voip::VoipPhoneCall^ sender, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^ args);

			// Called by the VoipCallCoordinator when a call that was previously put on hold is to be resumed.
			void OnResumeCallRequested(Windows::Phone::Networking::Voip::VoipPhoneCall^ sender, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^ args);

			// Called by the VoipCallCoordinator when a call is to be ended.
			void OnEndCallRequested(Windows::Phone::Networking::Voip::VoipPhoneCall^ sender, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^ args);

			// Called by the AudioRoutingManager when call audio routing changes.
			void OnAudioEndpointChanged(Windows::Phone::Media::Devices::AudioRoutingManager^ sender, Platform::Object^ args);

			// Called by the BackEndCapture when the camera is toggled
			void OnCameraLocationChanged(PhoneVoIPApp::BackEnd::CameraLocation newCameraLocation);

			// Set a value that indicates if video/audio capture/render is enabled for a call or not.
			void SetMediaOperations(PhoneVoIPApp::BackEnd::MediaOperations value);

			// Start/stop video/audio capture/playback based on the current state.
			void UpdateMediaOperations();

			// The relative URI to the call-in-progress page
			Platform::String ^callInProgressPageUri;

			// The name of this service provider
			Platform::String^ voipServiceName;

			// The URI to the default contact image
			Windows::Foundation::Uri^ defaultContactImageUri;

			// The URI to the branding image
			Windows::Foundation::Uri^ brandingImageUri;

			// The URI to the ringtone file
			Windows::Foundation::Uri^ ringtoneUri;

			// Interface used to deliver status callbacks
			ICallControllerStatusListener^ statusListener;

			// A VoIP call that is in progress
			Windows::Phone::Networking::Voip::VoipPhoneCall^ activeCall;

			// The status of a call, if any
			PhoneVoIPApp::BackEnd::CallStatus callStatus;

			// The name of the other party, if any
			Platform::String^ otherPartyName;

			// The id of the other party, if any
			int64 otherPartyId;

			int64 callId;

			int64 callAccessHash;

			// The id of the caller for the latest incoming call
			int64 incomingId;

			int64 incomingCallId;

			int64 incomingCallAccessHash;

			int64 acceptedCallId;

			Platform::Array<uint8>^ key;

			bool outgoing;

			Platform::Array<Platform::String^>^ emojis;

			// Indicates if video/audio capture/render is enabled for a call or not.
			PhoneVoIPApp::BackEnd::MediaOperations mediaOperations;

			PhoneVoIPApp::BackEnd::CameraLocation cameraLocation;

			// Indicates if video is currently being displayed or not.
			bool isShowingVideo;

			bool isRenderingVideo;

			// The method to be called when the incoming call dialog box is dismissed
			IncomingCallDialogDismissedCallback^ onIncomingCallDialogDismissed;

			// The VoIP call coordinator
			Windows::Phone::Networking::Voip::VoipCallCoordinator^ callCoordinator;

			// The phone audio routing manager
			Windows::Phone::Media::Devices::AudioRoutingManager^ audioRoutingManager;

			// Phone call related event handlers
			Windows::Foundation::TypedEventHandler<Windows::Phone::Networking::Voip::VoipPhoneCall^, Windows::Phone::Networking::Voip::CallAnswerEventArgs^>^ acceptCallRequestedHandler;
			Windows::Foundation::TypedEventHandler<Windows::Phone::Networking::Voip::VoipPhoneCall^, Windows::Phone::Networking::Voip::CallRejectEventArgs^>^ rejectCallRequestedHandler;
			Windows::Foundation::TypedEventHandler<Windows::Phone::Networking::Voip::VoipPhoneCall^, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^>^ holdCallRequestedHandler;
			Windows::Foundation::TypedEventHandler<Windows::Phone::Networking::Voip::VoipPhoneCall^, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^>^ resumeCallRequestedHandler;
			Windows::Foundation::TypedEventHandler<Windows::Phone::Networking::Voip::VoipPhoneCall^, Windows::Phone::Networking::Voip::CallStateChangeEventArgs^>^ endCallRequestedHandler;

			// Audio related event handlers
			Windows::Foundation::TypedEventHandler<Windows::Phone::Media::Devices::AudioRoutingManager^, Platform::Object^>^ audioEndpointChangedHandler;

			// A cookie used to un-register the audio endpoint changed handler
			Windows::Foundation::EventRegistrationToken audioEndpointChangedHandlercookie;

			// Camera location related event handlers
			CameraLocationChangedEventHandler^ cameraLocationChangedHandler;
		};
	}
}


================================================
FILE: BackEnd/Globals.cpp
================================================
// 
// This is the source code of Telegram for Windows Phone v. 3.x.x.
// It is licensed under GNU GPL v. 2 or later.
// You should have received a copy of the license in this archive (see LICENSE).
// 
// Copyright Evgeny Nadymov, 2013-present.
// 
#include <hstring.h>
#include <memory>
#include <activation.h>
#include <wrl\module.h>
#include <crtdbg.h>
#include "Globals.h"
#include "ApiLock.h"
#include "CallController.h"
#include "BackEndAudio.h"
#include "BackEndCapture.h"

using namespace PhoneVoIPApp::BackEnd;
using namespace Windows::Foundation;
using namespace Windows::Phone::Media::Capture;

HRESULT __declspec(dllexport) MyGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IInspectable **factory)
{
    *factory = nullptr;

    Microsoft::WRL::ComPtr<IActivationFactory> activationFactory;
    auto &module = Microsoft::WRL::Module<Microsoft::WRL::InProcDisableCaching>::GetModule();

    HRESULT hr = module.GetActivationFactory(activatableClassId, &activationFactory);
    if (SUCCEEDED(hr))
    {
        *factory = activationFactory.Detach();

        if (*factory == nullptr)
        {
            return E_OUTOFMEMORY;
        }
    }

    return hr;
}

// Maximum number of characters required to contain the string version of an unsigned integer
#define MAX_CHARS_IN_UINT_AS_STRING ((sizeof(unsigned int) * 4) + 1)

const LPCWSTR Globals::noOtherBackgroundProcessEventName = L"PhoneVoIPApp.noOtherBackgroundProcess";
const LPCWSTR Globals::uiDisconnectedEventName = L"PhoneVoIPApp.uiDisconnected.";
const LPCWSTR Globals::backgroundProcessReadyEventName = L"PhoneVoIPApp.backgroundProcessReady.";
Globals^ Globals::singleton = nullptr;

void Globals::StartServer(const Platform::Array<Platform::String^>^ outOfProcServerClassNames)
{
    HRESULT hr = S_OK;

    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    if (outOfProcServerClassNames == nullptr)
    {
        throw ref new Platform::InvalidArgumentException(L"outOfProcServerClassNames cannot be null");
    }

    if (this->started)
    {
        return; // Nothing more to be done
    }

    // Set an event that indicates that the background process is ready.
    this->backgroundReadyEvent = ::CreateEventEx(
        NULL,
        Globals::GetBackgroundProcessReadyEventName(Globals::GetCurrentProcessId())->Data(),
        CREATE_EVENT_INITIAL_SET | CREATE_EVENT_MANUAL_RESET,
        EVENT_ALL_ACCESS);
    if (this->backgroundReadyEvent == NULL)
    {
        // Something went wrong
        DWORD dwErr = ::GetLastError();
        hr = HRESULT_FROM_WIN32(dwErr);
        throw ref new Platform::COMException(hr, L"An error occurred trying to create an event that indicates that the background process is ready");
    }

    // Set the event
    BOOL success = ::SetEvent(this->backgroundReadyEvent);
    if (success == FALSE)
    {
        DWORD dwErr = ::GetLastError();
        hr = HRESULT_FROM_WIN32(dwErr);
        throw ref new Platform::COMException(hr, L"An error occurred trying to set an event that indicates that the background process is ready");
    }

    this->started = true;
}

void Globals::DoPeriodicKeepAlive()
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    // TODO: Do stuff here - refresh tokens, get new certs from server, etc.
}

unsigned int Globals::GetCurrentProcessId()
{
    return ::GetCurrentProcessId();
}

Platform::String^ Globals::GetUiDisconnectedEventName(unsigned int backgroundProcessId)
{
    WCHAR backgroundProcessIdString[MAX_CHARS_IN_UINT_AS_STRING];
    if (swprintf_s<_countof(backgroundProcessIdString)>(backgroundProcessIdString, L"%u", backgroundProcessId) < 0)
        throw ref new Platform::FailureException(L"Could not create string version of background process id");

    auto eventName = ref new Platform::String(Globals::uiDisconnectedEventName) + ref new Platform::String(backgroundProcessIdString);
    return eventName;
}

Platform::String^ Globals::GetBackgroundProcessReadyEventName(unsigned int backgroundProcessId)
{
    WCHAR backgroundProcessIdString[MAX_CHARS_IN_UINT_AS_STRING];
    if (swprintf_s<_countof(backgroundProcessIdString)>(backgroundProcessIdString, L"%u", backgroundProcessId) < 0)
        throw ref new Platform::FailureException(L"Could not create string version of background process id");

    auto eventName = ref new Platform::String(Globals::backgroundProcessReadyEventName) + ref new Platform::String(backgroundProcessIdString);
    return eventName;
}

Globals^ Globals::Instance::get()
{
    if (Globals::singleton == nullptr)
    {
        // Make sure only one API call is in progress at a time
        std::lock_guard<std::recursive_mutex> lock(g_apiLock);

        if (Globals::singleton == nullptr)
        {
            Globals::singleton = ref new Globals();
        }
        // else: some other thread has created an instance of the call controller
    }

    return Globals::singleton;
}

CallController^ Globals::CallController::get()
{
    if (this->callController == nullptr)
    {
        // Make sure only one API call is in progress at a time
        std::lock_guard<std::recursive_mutex> lock(g_apiLock);

        if (this->callController == nullptr)
        {
            this->callController = ref new PhoneVoIPApp::BackEnd::CallController();
        }
        // else: some other thread has created an instance of the call controller
    }

    return this->callController;
}

IVideoRenderer^ Globals::VideoRenderer::get()
{
    // No need to lock - this get is idempotent
    return this->videoRenderer;
}

void Globals::VideoRenderer::set(IVideoRenderer^ value)
{
    // Make sure only one API call is in progress at a time
    std::lock_guard<std::recursive_mutex> lock(g_apiLock);

    this->videoRenderer = value;
}

IMTProtoUpdater^ Globals::MTProtoUpdater::get()
{
	// No need to lock - this get is idempotent
	return this->mtProtoUpdater;
}

void Globals::MTProtoUpdater::set(IMTProtoUpdater^ value)
{
	// Make sure only one API call is in progress at a time
	std::lock_guard<std::recursive_mutex> lock(g_apiLock);

	this->mtProtoUpdater = value;
}

//BackEndAudio^ Globals::AudioController::get()
//{
//    // No need to lock - this get is idempotent
//    return this->audioController;
//}

BackEndCapture^ Globals::CaptureController::get()
{
    // No need to lock - this get is idempotent
    return this->captureController;
}

BackEndTransport^ Globals::TransportController::get()
{
    // No need to lock - this get is idempotent
    return this->transportController;
}

Globals::Globals() :
    started(false),
    serverRegistrationCookie(NULL),
    callController(nullptr),
    videoRenderer(nullptr),
    noOtherBackgroundProcessEvent(NULL),
    backgroundReadyEvent(NULL),
    //audioController(nullptr),
    transportController(nullptr),
    captureController(nullptr)
{
    {
        WCHAR szBuffer[256];
        swprintf_s<ARRAYSIZE(szBuffer)>(szBuffer, L"[Globals::Globals] => VoIP background process with id %d starting up\n", this->GetCurrentProcessId());
        ::OutputDebugString(szBuffer);
    }

    // Create an event that indicates if any other VoIP background exits or not
    this->noOtherBackgroundProcessEvent = ::CreateEventEx(NULL, Globals::noOtherBackgroundProcessEventName, CREATE_EVENT_INITIAL_SET | CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS);
    if (this->noOtherBackgroundProcessEvent == NULL)
    {
        // Something went wrong
        DWORD dwErr = ::GetLastError();
        HRESULT hr = HRESULT_FROM_WIN32(dwErr);
        throw ref new Platform::COMException(hr, L"An error occurred trying to create an event that indicates if the background process exists or not");
    }

    // Wait for up to 30 seconds for the event to become set - if another instance of this process exists, this event would be in the reset state
    DWORD reason = ::WaitForSingleObjectEx(this->noOtherBackgroundProcessEvent, 30 * 1000, FALSE);
    _ASSERT(reason != WAIT_FAILED); // We don't care about any of the other reasons why WaitForSingleObjectEx returned
    if (reason == WAIT_TIMEOUT)
    {
        throw ref new Platform::FailureException(L"Another instance of the VoIP background process exists and that process did not exit within 30 seconds. Cannot continue.");
    }

    // Reset the event to indicate that there is a VoIP background process
    BOOL success = ::ResetEvent(this->noOtherBackgroundProcessEvent);
    if (success == FALSE)
    {
        // Something went wrong
        DWORD dwErr = ::GetLastError();
Download .txt
gitextract_6z4bjkut/

├── Agents/
│   ├── AgentHost.cs
│   ├── Agents.csproj
│   ├── CallInProgressAgentImpl.cs
│   ├── ForegroundLifetimeAgentImpl.cs
│   ├── MTProtoUpdater.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── PushPayload.cs
│   ├── PushPayload.xml
│   ├── PushUtils.cs
│   ├── RegistrationHelper.cs
│   ├── ScheduledAgentImpl.cs
│   ├── VideoMediaStreamSource.cs
│   └── VideoRenderer.cs
├── BackEnd/
│   ├── ApiLock.cpp
│   ├── ApiLock.h
│   ├── BackEnd.vcxproj
│   ├── BackEndAudio.cpp
│   ├── BackEndAudio.h
│   ├── BackEndCapture.cpp
│   ├── BackEndCapture.h
│   ├── BackEndNativeBuffer.h
│   ├── BackEndTransport.cpp
│   ├── BackEndTransport.h
│   ├── BackgroundTask.cpp
│   ├── BackgroundTask.h
│   ├── CallController.cpp
│   ├── CallController.h
│   ├── Globals.cpp
│   ├── Globals.h
│   ├── ICallControllerStatusListener.h
│   ├── IConfig.h
│   ├── IMTProtoUpdater.h
│   ├── IVideoRenderer.h
│   └── Server.h
├── BackEndProxyStub/
│   ├── BackEndProxyStub.def
│   ├── BackEndProxyStub.vcxproj
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess.h
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess_i.c
│   ├── PhoneVoIPApp.BackEnd.OutOfProcess_p.c
│   ├── PhoneVoIPApp.BackEnd.h
│   ├── PhoneVoIPApp.BackEnd_i.c
│   ├── PhoneVoIPApp.BackEnd_p.c
│   └── dlldata.c
├── EmojiPanel/
│   └── EmojiPanel/
│       ├── App.xaml
│       ├── App.xaml.cs
│       ├── Controls/
│       │   ├── Emoji/
│       │   │   ├── EmojiControl.xaml
│       │   │   ├── EmojiControl.xaml.cs
│       │   │   ├── EmojiData.cs
│       │   │   └── EmojiSpriteItem.cs
│       │   └── Utilites/
│       │       ├── DelayedExecutor.cs
│       │       ├── Helpers.cs
│       │       ├── MyListItemBase.cs
│       │       ├── MyVirtualizingPanel.cs
│       │       ├── VListItemBase.cs
│       │       └── VirtSegment.cs
│       ├── EmojiPanel.csproj
│       ├── MainPage.xaml
│       ├── MainPage.xaml.cs
│       └── Properties/
│           ├── AppManifest.xml
│           ├── AssemblyInfo.cs
│           └── WMAppManifest.xml
├── ExifLib/
│   ├── ExifIO.cs
│   ├── ExifIds.cs
│   ├── ExifLib.csproj
│   ├── ExifReader.cs
│   ├── ExifTag.cs
│   ├── JpegInfo.cs
│   └── Properties/
│       └── AssemblyInfo.cs
├── ExifLib.WP8/
│   ├── ExifLib.WP8.csproj
│   └── Properties/
│       └── AssemblyInfo.cs
├── FFmpegInterop/
│   ├── Source/
│   │   ├── FFmpegInteropMSS.cpp
│   │   ├── FFmpegInteropMSS.h
│   │   ├── FFmpegReader.cpp
│   │   ├── FFmpegReader.h
│   │   ├── H264AVCSampleProvider.cpp
│   │   ├── H264AVCSampleProvider.h
│   │   ├── H264SampleProvider.cpp
│   │   ├── H264SampleProvider.h
│   │   ├── MediaSampleProvider.cpp
│   │   ├── MediaSampleProvider.h
│   │   ├── UncompressedAudioSampleProvider.cpp
│   │   ├── UncompressedAudioSampleProvider.h
│   │   ├── UncompressedVideoSampleProvider.cpp
│   │   └── UncompressedVideoSampleProvider.h
│   └── Win8.1/
│       ├── FFmpegInterop.Shared/
│       │   ├── FFmpegGifDecoder.cpp
│       │   ├── FFmpegGifDecoder.h
│       │   ├── FFmpegInterop.Shared.vcxitems
│       │   ├── FFmpegInterop.Shared.vcxitems.filters
│       │   ├── pch.cpp
│       │   └── pch.h
│       └── FFmpegInterop.WindowsPhone/
│           ├── FFmpegInterop.WindowsPhone.vcxproj
│           └── FFmpegInterop.WindowsPhone.vcxproj.filters
├── LICENSE
├── OpenCVComponent/
│   ├── Assets/
│   │   ├── haarcascade_eye.xml
│   │   ├── haarcascade_frontalface_alt.xml
│   │   └── haarcascade_mouth.xml
│   ├── OpenCVComponent.cpp
│   ├── OpenCVComponent.h
│   ├── OpenCVComponent.vcxproj
│   ├── OpenCVComponent.vcxproj.filters
│   ├── opencv.props
│   ├── pch.cpp
│   └── pch.h
├── README.md
├── Telegram.Api/
│   ├── Aggregator/
│   │   ├── EventAggregator.cs
│   │   └── ExtensionMethods.cs
│   ├── Compression/
│   │   ├── GZipDeflateStream.cs
│   │   └── GZipWebClient.cs
│   ├── Constants.cs
│   ├── Extensions/
│   │   ├── ActionExtensions.cs
│   │   ├── HttpWebRequestExtensions.cs
│   │   ├── StreamExtensions.cs
│   │   └── TLObjectExtensions.cs
│   ├── Hash/
│   │   ├── CRC32/
│   │   │   └── CRC.cs
│   │   └── MD5/
│   │       ├── MD5.cs
│   │       ├── MD5CryptoServiceProvider.cs
│   │       └── MD5Managed.cs
│   ├── Helpers/
│   │   ├── AuthorizationHelper.cs
│   │   ├── Execute.cs
│   │   ├── FileUtils.cs
│   │   ├── IAuthorizationHelper.cs
│   │   ├── Notifications.cs
│   │   ├── PhoneHelper.cs
│   │   ├── RequestHelper.cs
│   │   ├── SettingsHelper.cs
│   │   └── Utils.cs
│   ├── Logs/
│   │   └── Log.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Services/
│   │   ├── Cache/
│   │   │   ├── Context.cs
│   │   │   ├── EventArgs/
│   │   │   │   ├── DialogAddedEventArgs.cs
│   │   │   │   └── TopMessageUpdatedEventArgs.cs
│   │   │   ├── ICacheService.cs
│   │   │   ├── InMemoryCacheService.cs
│   │   │   └── InMemoryDatabase.cs
│   │   ├── Connection/
│   │   │   ├── ConnectionService.cs
│   │   │   └── PublicConfigService.cs
│   │   ├── DCOptionItem.cs
│   │   ├── DelayedItem.cs
│   │   ├── DeviceInfo/
│   │   │   ├── EmptyDeviceInfoService.cs
│   │   │   └── IDeviceInfo.cs
│   │   ├── FileManager/
│   │   │   ├── AudioFileManager.cs
│   │   │   ├── DocumentFileManager.cs
│   │   │   ├── DownloadableItem.cs
│   │   │   ├── DownloadablePart.cs
│   │   │   ├── DownloadingCanceledEventArgs.cs
│   │   │   ├── EncryptedFileManager.cs
│   │   │   ├── FileManager.cs
│   │   │   ├── FileManagerBase.cs
│   │   │   ├── IAudioFileManager.cs
│   │   │   ├── IDocumentFileManager.cs
│   │   │   ├── IEncryptedFileManager.cs
│   │   │   ├── IFileManager.cs
│   │   │   ├── IUploadAudioFileManager.cs
│   │   │   ├── IUploadFileManager.cs
│   │   │   ├── IUploadVideoFileManager.cs
│   │   │   ├── IVideoFileManager.cs
│   │   │   ├── ProgressChangedEventArgs.cs
│   │   │   ├── UploadAudioFileManager.cs
│   │   │   ├── UploadFileManager.cs
│   │   │   ├── UploadVideoFileManager.cs
│   │   │   ├── VideoFileManager.cs
│   │   │   └── Worker.cs
│   │   ├── HistoryItem.cs
│   │   ├── IMTProtoService.cs
│   │   ├── MTProtoService.Account.cs
│   │   ├── MTProtoService.Auth.cs
│   │   ├── MTProtoService.ByTransport.cs
│   │   ├── MTProtoService.Channel.cs
│   │   ├── MTProtoService.Config.cs
│   │   ├── MTProtoService.Contacts.cs
│   │   ├── MTProtoService.DHKeyExchange.cs
│   │   ├── MTProtoService.Help.cs
│   │   ├── MTProtoService.Helpers.cs
│   │   ├── MTProtoService.HttpLongPoll.cs
│   │   ├── MTProtoService.Langpack.cs
│   │   ├── MTProtoService.Messages.cs
│   │   ├── MTProtoService.Payments.cs
│   │   ├── MTProtoService.Phone.cs
│   │   ├── MTProtoService.Photos.cs
│   │   ├── MTProtoService.SecretChats.cs
│   │   ├── MTProtoService.SendingQueue.cs
│   │   ├── MTProtoService.Stuff.cs
│   │   ├── MTProtoService.Updates.cs
│   │   ├── MTProtoService.Upload.cs
│   │   ├── MTProtoService.Users.cs
│   │   ├── MTProtoService.cs
│   │   ├── Messages/
│   │   │   ├── ISenderService.cs
│   │   │   └── SenderService.cs
│   │   ├── ServiceBase.cs
│   │   ├── Updates/
│   │   │   ├── IUpdatesService.cs
│   │   │   ├── ReceiveUpdatesEventArgs.cs
│   │   │   ├── UpdatesBySeqComparer.cs
│   │   │   └── UpdatesService.cs
│   │   └── VoIP/
│   │       ├── IVoIPService.cs
│   │       └── VoIPService.cs
│   ├── TL/
│   │   ├── Account/
│   │   │   ├── TLChangePhone.cs
│   │   │   ├── TLCheckPassword.cs
│   │   │   ├── TLConfirmPhone.cs
│   │   │   ├── TLGetAuthorizations.cs
│   │   │   ├── TLGetPassword.cs
│   │   │   ├── TLGetPasswordSettings.cs
│   │   │   ├── TLGetTmpPassword.cs
│   │   │   ├── TLGetWallPapers.cs
│   │   │   ├── TLRecoverPassword.cs
│   │   │   ├── TLReportPeer.cs
│   │   │   ├── TLRequestPasswordRecovery.cs
│   │   │   ├── TLResetAuthorization.cs
│   │   │   ├── TLResetPassword.cs
│   │   │   ├── TLSendChangePhoneCode.cs
│   │   │   ├── TLSendConfirmPhoneCode.cs
│   │   │   ├── TLSetPassword.cs
│   │   │   ├── TLUpdateDeviceLocked.cs
│   │   │   └── TLUpdatePasswordSettings.cs
│   │   ├── Enums.cs
│   │   ├── Functions/
│   │   │   ├── Account/
│   │   │   │   ├── TLCheckUsername.cs
│   │   │   │   ├── TLDeleteAccount.cs
│   │   │   │   ├── TLGetAccountTTL.cs
│   │   │   │   ├── TLGetNotifySettings.cs
│   │   │   │   ├── TLGetPrivacy.cs
│   │   │   │   ├── TLRegisterDevice.cs
│   │   │   │   ├── TLResetNotifySettings.cs
│   │   │   │   ├── TLSetPrivacy.cs
│   │   │   │   ├── TLUnregisterDevice.cs
│   │   │   │   ├── TLUpdateNotifySettings.cs
│   │   │   │   ├── TLUpdateProfile.cs
│   │   │   │   ├── TLUpdateStatus.cs
│   │   │   │   └── TLUpdateUserName.cs
│   │   │   ├── Auth/
│   │   │   │   ├── TLCancelCode.cs
│   │   │   │   ├── TLCheckPhone.cs
│   │   │   │   ├── TLExportAuthorization.cs
│   │   │   │   ├── TLImportAuthorization.cs
│   │   │   │   ├── TLLogOut.cs
│   │   │   │   ├── TLResendCode.cs
│   │   │   │   ├── TLResetAuthorizations.cs
│   │   │   │   ├── TLSendCall.cs
│   │   │   │   ├── TLSendCode.cs
│   │   │   │   ├── TLSendInvites.cs
│   │   │   │   ├── TLSendSms.cs
│   │   │   │   ├── TLSignIn.cs
│   │   │   │   └── TLSignUp.cs
│   │   │   ├── Channels/
│   │   │   │   ├── TLCheckUsername.cs
│   │   │   │   ├── TLCreateChannel.cs
│   │   │   │   ├── TLDeleteChannel.cs
│   │   │   │   ├── TLDeleteChannelMessages.cs
│   │   │   │   ├── TLDeleteHistory.cs
│   │   │   │   ├── TLDeleteUserHistory.cs
│   │   │   │   ├── TLEditAbout.cs
│   │   │   │   ├── TLEditAdmin.cs
│   │   │   │   ├── TLEditMessage.cs
│   │   │   │   ├── TLEditPhoto.cs
│   │   │   │   ├── TLEditTitle.cs
│   │   │   │   ├── TLExportInvite.cs
│   │   │   │   ├── TLExportMessageLink.cs
│   │   │   │   ├── TLGetAdminedPublicChannels.cs
│   │   │   │   ├── TLGetChannels.cs
│   │   │   │   ├── TLGetDialogs.cs
│   │   │   │   ├── TLGetFullChannel.cs
│   │   │   │   ├── TLGetImportantHistory.cs
│   │   │   │   ├── TLGetMessageEditData.cs
│   │   │   │   ├── TLGetMessages.cs
│   │   │   │   ├── TLGetParticipant.cs
│   │   │   │   ├── TLGetParticipants.cs
│   │   │   │   ├── TLInviteToChannel.cs
│   │   │   │   ├── TLJoinChannel.cs
│   │   │   │   ├── TLKickFromChannel.cs
│   │   │   │   ├── TLLeaveChannel.cs
│   │   │   │   ├── TLReadHistory.cs
│   │   │   │   ├── TLReadMessageContents.cs
│   │   │   │   ├── TLReportSpam.cs
│   │   │   │   ├── TLSetStickers.cs
│   │   │   │   ├── TLToggleComments.cs
│   │   │   │   ├── TLToggleInvites.cs
│   │   │   │   ├── TLTogglePreHistoryHidden.cs
│   │   │   │   ├── TLToggleSignatures.cs
│   │   │   │   ├── TLUpdateChannelUsername.cs
│   │   │   │   └── TLUpdatePinnedMessage.cs
│   │   │   ├── Contacts/
│   │   │   │   ├── TLBlock.cs
│   │   │   │   ├── TLDeleteContact.cs
│   │   │   │   ├── TLDeleteContacts.cs
│   │   │   │   ├── TLGetBlocked.cs
│   │   │   │   ├── TLGetContacts.cs
│   │   │   │   ├── TLGetStatuses.cs
│   │   │   │   ├── TLGetTopPeers.cs
│   │   │   │   ├── TLImportContacts.cs
│   │   │   │   ├── TLResetSaved.cs
│   │   │   │   ├── TLResetTopPeerRating.cs
│   │   │   │   ├── TLResolveUsername.cs
│   │   │   │   ├── TLSearch.cs
│   │   │   │   └── TLUnblock.cs
│   │   │   ├── DHKeyExchange/
│   │   │   │   ├── TLReqDHParams.cs
│   │   │   │   ├── TLReqPQ.cs
│   │   │   │   └── TLSetClientDHParams.cs
│   │   │   ├── Help/
│   │   │   │   ├── TLGetAppChangelog.cs
│   │   │   │   ├── TLGetCdnConfig.cs
│   │   │   │   ├── TLGetConfig.cs
│   │   │   │   ├── TLGetInviteText.cs
│   │   │   │   ├── TLGetNearestDC.cs
│   │   │   │   ├── TLGetRecentMeUrls.cs
│   │   │   │   ├── TLGetSupport.cs
│   │   │   │   ├── TLGetTermsOfService.cs
│   │   │   │   ├── TLInvokeWithLayerN.cs
│   │   │   │   └── TLInvokeWithoutUpdates.cs
│   │   │   ├── Langpack/
│   │   │   │   ├── TLGetDifference.cs
│   │   │   │   ├── TLGetLangPack.cs
│   │   │   │   ├── TLGetLanguages.cs
│   │   │   │   └── TLGetStrings.cs
│   │   │   ├── Messages/
│   │   │   │   ├── TLAcceptEncryption.cs
│   │   │   │   ├── TLAddChatUser.cs
│   │   │   │   ├── TLBotGetCallbackAnswer.cs
│   │   │   │   ├── TLCheckChatInvite.cs
│   │   │   │   ├── TLClearRecentStickers.cs
│   │   │   │   ├── TLCreateChat.cs
│   │   │   │   ├── TLDeactivateChat.cs
│   │   │   │   ├── TLDeleteChatUser.cs
│   │   │   │   ├── TLDeleteHistory.cs
│   │   │   │   ├── TLDeleteMessages.cs
│   │   │   │   ├── TLDiscardEncryption.cs
│   │   │   │   ├── TLEditChatAdmin.cs
│   │   │   │   ├── TLEditChatPhoto.cs
│   │   │   │   ├── TLEditChatTitle.cs
│   │   │   │   ├── TLEditGeoLive.cs
│   │   │   │   ├── TLExportChatInvite.cs
│   │   │   │   ├── TLFaveSticker.cs
│   │   │   │   ├── TLForwardMessage.cs
│   │   │   │   ├── TLForwardMessages.cs
│   │   │   │   ├── TLGetAllDrafts.cs
│   │   │   │   ├── TLGetAllStickers.cs
│   │   │   │   ├── TLGetArchivedStickers.cs
│   │   │   │   ├── TLGetAttachedStickers.cs
│   │   │   │   ├── TLGetChats.cs
│   │   │   │   ├── TLGetCommonChats.cs
│   │   │   │   ├── TLGetDHConfig.cs
│   │   │   │   ├── TLGetDialogs.cs
│   │   │   │   ├── TLGetDocumentByHash.cs
│   │   │   │   ├── TLGetFavedStickers.cs
│   │   │   │   ├── TLGetFeaturedStickers.cs
│   │   │   │   ├── TLGetFullChat.cs
│   │   │   │   ├── TLGetHistory.cs
│   │   │   │   ├── TLGetInlineBotResults.cs
│   │   │   │   ├── TLGetMaskStickers.cs
│   │   │   │   ├── TLGetMessages.cs
│   │   │   │   ├── TLGetPeerDialogs.cs
│   │   │   │   ├── TLGetPeerSettings.cs
│   │   │   │   ├── TLGetPinnedDialogs.cs
│   │   │   │   ├── TLGetRecentLocations.cs
│   │   │   │   ├── TLGetRecentStickers.cs
│   │   │   │   ├── TLGetSavedGifs.cs
│   │   │   │   ├── TLGetStickerSet.cs
│   │   │   │   ├── TLGetStickers.cs
│   │   │   │   ├── TLGetUnreadMentions.cs
│   │   │   │   ├── TLGetUnusedStickers.cs
│   │   │   │   ├── TLGetWebPage.cs
│   │   │   │   ├── TLGetWebPagePreview.cs
│   │   │   │   ├── TLHideReportSpam.cs
│   │   │   │   ├── TLImportChatInvite.cs
│   │   │   │   ├── TLInstallStickerSet.cs
│   │   │   │   ├── TLMigrateChat.cs
│   │   │   │   ├── TLReadEncryptedHistory.cs
│   │   │   │   ├── TLReadFeaturedStickers.cs
│   │   │   │   ├── TLReadHistory.cs
│   │   │   │   ├── TLReadMentions.cs
│   │   │   │   ├── TLReadMessageContents.cs
│   │   │   │   ├── TLReceivedMessages.cs
│   │   │   │   ├── TLReceivedQueue.cs
│   │   │   │   ├── TLReorderPinnedDialogs.cs
│   │   │   │   ├── TLReorderStickerSets.cs
│   │   │   │   ├── TLReportSpam.cs
│   │   │   │   ├── TLRequestEncryption.cs
│   │   │   │   ├── TLRestoreMessages.cs
│   │   │   │   ├── TLSaveDraft.cs
│   │   │   │   ├── TLSaveGif.cs
│   │   │   │   ├── TLSearch.cs
│   │   │   │   ├── TLSearchGifs.cs
│   │   │   │   ├── TLSendBroadcast.cs
│   │   │   │   ├── TLSendEncrypted.cs
│   │   │   │   ├── TLSendEncryptedFile.cs
│   │   │   │   ├── TLSendEncryptedService.cs
│   │   │   │   ├── TLSendInlineBotResult.cs
│   │   │   │   ├── TLSendMedia.cs
│   │   │   │   ├── TLSendMessage.cs
│   │   │   │   ├── TLSendMultiMedia.cs
│   │   │   │   ├── TLSetBotCallbackAnswer.cs
│   │   │   │   ├── TLSetEncryptedTyping.cs
│   │   │   │   ├── TLSetInlineBotResults.cs
│   │   │   │   ├── TLSetTyping.cs
│   │   │   │   ├── TLStartBot.cs
│   │   │   │   ├── TLToggleChatAdmins.cs
│   │   │   │   ├── TLToggleDialogPin.cs
│   │   │   │   ├── TLUninstallStickerSet.cs
│   │   │   │   └── TLUploadMedia.cs
│   │   │   ├── Payments/
│   │   │   │   ├── TLClearSavedInfo.cs
│   │   │   │   ├── TLGetPaymentForm.cs
│   │   │   │   ├── TLGetPaymentReceipt.cs
│   │   │   │   ├── TLGetSavedInfo.cs
│   │   │   │   ├── TLSendPaymentForm.cs
│   │   │   │   └── TLValidateRequestedInfo.cs
│   │   │   ├── Phone/
│   │   │   │   ├── TLAcceptCall.cs
│   │   │   │   ├── TLConfirmCall.cs
│   │   │   │   ├── TLDiscardCall.cs
│   │   │   │   ├── TLGetCallConfig.cs
│   │   │   │   ├── TLReceivedCall.cs
│   │   │   │   ├── TLRequestCall.cs
│   │   │   │   ├── TLSaveCallDebug.cs
│   │   │   │   └── TLSetCallRating.cs
│   │   │   ├── Photos/
│   │   │   │   ├── TLGetUserPhotos.cs
│   │   │   │   ├── TLUpdateProfilePhoto.cs
│   │   │   │   └── TLUploadProfilePhoto.cs
│   │   │   ├── Stuff/
│   │   │   │   ├── TLGetFutureSalts.cs
│   │   │   │   ├── TLHttpWait.cs
│   │   │   │   ├── TLMessageAcknowledgments.cs
│   │   │   │   └── TLRPCDropAnswer.cs
│   │   │   ├── Updates/
│   │   │   │   ├── TLGetChannelDifference.cs
│   │   │   │   ├── TLGetDifference.cs
│   │   │   │   └── TLGetState.cs
│   │   │   ├── Upload/
│   │   │   │   ├── TLGetCdnFile.cs
│   │   │   │   ├── TLGetFile.cs
│   │   │   │   ├── TLReuploadCdnFile.cs
│   │   │   │   └── TLSaveFilePart.cs
│   │   │   └── Users/
│   │   │       ├── TLGetFullUser.cs
│   │   │       └── TLGetUsers.cs
│   │   ├── Interfaces/
│   │   │   ├── IBytes.cs
│   │   │   ├── IFullName.cs
│   │   │   ├── IInputPeer.cs
│   │   │   ├── ISelectable.cs
│   │   │   └── IVIsibility.cs
│   │   ├── SignatureAttribute.cs
│   │   ├── TLAccountAuthorization.cs
│   │   ├── TLAccountAuthorizations.cs
│   │   ├── TLAccountDaysTTL.cs
│   │   ├── TLActionInfo.cs
│   │   ├── TLAdminLogResults.cs
│   │   ├── TLAffectedHistory.cs
│   │   ├── TLAffectedMessages.cs
│   │   ├── TLAllStrickers.cs
│   │   ├── TLAppChangelogBase.cs
│   │   ├── TLArchivedStickers.cs
│   │   ├── TLAudio.cs
│   │   ├── TLAuthorization.cs
│   │   ├── TLBadMessageNotification.cs
│   │   ├── TLBadServerSalt.cs
│   │   ├── TLBool.cs
│   │   ├── TLBotCallbackAnswer.cs
│   │   ├── TLBotCommand.cs
│   │   ├── TLBotInfo.cs
│   │   ├── TLBotInlineMessage.cs
│   │   ├── TLBotInlineResult.cs
│   │   ├── TLBotResults.cs
│   │   ├── TLCallsSecurity.cs
│   │   ├── TLCameraSettings.cs
│   │   ├── TLCdnConfig.cs
│   │   ├── TLCdnFile.cs
│   │   ├── TLCdnPublicKey.cs
│   │   ├── TLChannelAdminLogEvent.cs
│   │   ├── TLChannelAdminLogEventAction.cs
│   │   ├── TLChannelAdminLogEventsFilter.cs
│   │   ├── TLChannelAdminRights.cs
│   │   ├── TLChannelBannedRights.cs
│   │   ├── TLChannelDifference.cs
│   │   ├── TLChannelMessagesFiler.cs
│   │   ├── TLChannelParticipant.cs
│   │   ├── TLChannelParticipantRole.cs
│   │   ├── TLChannelParticipantsFilter.cs
│   │   ├── TLChat.cs
│   │   ├── TLChatFull.cs
│   │   ├── TLChatInvite.cs
│   │   ├── TLChatParticipant.cs
│   │   ├── TLChatParticipants.cs
│   │   ├── TLChatSettings.cs
│   │   ├── TLChats.cs
│   │   ├── TLChatsSlice.cs
│   │   ├── TLCheckedPhone.cs
│   │   ├── TLClientDHInnerData.cs
│   │   ├── TLCodeType.cs
│   │   ├── TLConfig.cs
│   │   ├── TLConfigSimple.cs
│   │   ├── TLContact.cs
│   │   ├── TLContactBlocked.cs
│   │   ├── TLContactFound.cs
│   │   ├── TLContactLink.cs
│   │   ├── TLContactStatus.cs
│   │   ├── TLContacts.cs
│   │   ├── TLContactsBlocked.cs
│   │   ├── TLContactsFound.cs
│   │   ├── TLContainerTransportMessage.cs
│   │   ├── TLDCOption.cs
│   │   ├── TLDHConfig.cs
│   │   ├── TLDHGen.cs
│   │   ├── TLDataJSON.cs
│   │   ├── TLDecryptedMessage.cs
│   │   ├── TLDecryptedMessageAction.cs
│   │   ├── TLDecryptedMessageLayer.cs
│   │   ├── TLDecryptedMessageMedia.cs
│   │   ├── TLDialog.cs
│   │   ├── TLDialogs.cs
│   │   ├── TLDifference.cs
│   │   ├── TLDisabledFeature.cs
│   │   ├── TLDocument.cs
│   │   ├── TLDocumentAttribute.cs
│   │   ├── TLDouble.cs
│   │   ├── TLDraftMessage.cs
│   │   ├── TLEncryptedChat.cs
│   │   ├── TLEncryptedFile.cs
│   │   ├── TLEncryptedMessage.cs
│   │   ├── TLExportedAuthorization.cs
│   │   ├── TLExportedMessageLink.cs
│   │   ├── TLFavedStickers.cs
│   │   ├── TLFeaturedStickers.cs
│   │   ├── TLFile.cs
│   │   ├── TLFileLocation.cs
│   │   ├── TLFileType.cs
│   │   ├── TLForeignLink.cs
│   │   ├── TLFoundGif.cs
│   │   ├── TLFoundGifs.cs
│   │   ├── TLFutureSalt.cs
│   │   ├── TLGame.cs
│   │   ├── TLGeoPoint.cs
│   │   ├── TLGzipPacked.cs
│   │   ├── TLHashtagItem.cs
│   │   ├── TLHighScore.cs
│   │   ├── TLHighScores.cs
│   │   ├── TLImportedContact.cs
│   │   ├── TLImportedContacts.cs
│   │   ├── TLInitConnection.cs
│   │   ├── TLInlineBotSwitchPM.cs
│   │   ├── TLInputAudio.cs
│   │   ├── TLInputBotInlineMessage.cs
│   │   ├── TLInputBotInlineMessageId.cs
│   │   ├── TLInputBotInlineResult.cs
│   │   ├── TLInputChatBase.cs
│   │   ├── TLInputChatPhoto.cs
│   │   ├── TLInputContact.cs
│   │   ├── TLInputDocument.cs
│   │   ├── TLInputEncryptedChat.cs
│   │   ├── TLInputEncryptedFile.cs
│   │   ├── TLInputEncryptedFileBigUploaded.cs
│   │   ├── TLInputEncryptedFileLocation.cs
│   │   ├── TLInputFile.cs
│   │   ├── TLInputFileBig.cs
│   │   ├── TLInputFileLocation.cs
│   │   ├── TLInputGame.cs
│   │   ├── TLInputGeoPoint.cs
│   │   ├── TLInputMedia.cs
│   │   ├── TLInputMessageEntityMentionName.cs
│   │   ├── TLInputMessagesFilter.cs
│   │   ├── TLInputNotifyPeer.cs
│   │   ├── TLInputPaymentCredentials.cs
│   │   ├── TLInputPeer.cs
│   │   ├── TLInputPeerBase.cs
│   │   ├── TLInputPeerNotifyEvents.cs
│   │   ├── TLInputPeerNotifySettings.cs
│   │   ├── TLInputPhoneCall.cs
│   │   ├── TLInputPhoto.cs
│   │   ├── TLInputPhotoCrop.cs
│   │   ├── TLInputPrivacyKey.cs
│   │   ├── TLInputPrivacyRule.cs
│   │   ├── TLInputReportReason.cs
│   │   ├── TLInputSingleMedia.cs
│   │   ├── TLInputStickerSet.cs
│   │   ├── TLInputStickeredMedia.cs
│   │   ├── TLInputUser.cs
│   │   ├── TLInputVideo.cs
│   │   ├── TLInputWebDocument.cs
│   │   ├── TLInt.cs
│   │   ├── TLInt128.cs
│   │   ├── TLInt256.cs
│   │   ├── TLInviteText.cs
│   │   ├── TLInvoice.cs
│   │   ├── TLInvokeAfterMsg.cs
│   │   ├── TLIpPort.cs
│   │   ├── TLKeyboardButton.cs
│   │   ├── TLKeyboardButtonRow.cs
│   │   ├── TLLabeledPrice.cs
│   │   ├── TLLangPackDifference.cs
│   │   ├── TLLangPackLanguage.cs
│   │   ├── TLLangPackString.cs
│   │   ├── TLLink.cs
│   │   ├── TLLong.cs
│   │   ├── TLMaskCoords.cs
│   │   ├── TLMessage.Encrypted.cs
│   │   ├── TLMessage.cs
│   │   ├── TLMessageAction.cs
│   │   ├── TLMessageContainer.cs
│   │   ├── TLMessageEditData.cs
│   │   ├── TLMessageEntity.cs
│   │   ├── TLMessageFwdHeader.cs
│   │   ├── TLMessageGroup.cs
│   │   ├── TLMessageInfo.cs
│   │   ├── TLMessageMedia.cs
│   │   ├── TLMessageRange.cs
│   │   ├── TLMessages.cs
│   │   ├── TLMessagesAcknowledgment.cs
│   │   ├── TLMessagesChannelParticipants.cs
│   │   ├── TLMessagesChatFull.cs
│   │   ├── TLMessagesStickerSet.cs
│   │   ├── TLMyLink.cs
│   │   ├── TLNearestDC.cs
│   │   ├── TLNewSessionCreated.cs
│   │   ├── TLNonEncryptedMessage.cs
│   │   ├── TLNotifyPeer.cs
│   │   ├── TLNull.cs
│   │   ├── TLObject.cs
│   │   ├── TLObjectGenerator.cs
│   │   ├── TLPQInnerData.cs
│   │   ├── TLPage.cs
│   │   ├── TLPageBlock.cs
│   │   ├── TLPasscodeParams.cs
│   │   ├── TLPassword.cs
│   │   ├── TLPasswordInputSettings.cs
│   │   ├── TLPasswordRecovery.cs
│   │   ├── TLPasswordSettings.cs
│   │   ├── TLPaymentCharge.cs
│   │   ├── TLPaymentForm.cs
│   │   ├── TLPaymentReceipt.cs
│   │   ├── TLPaymentRequestedInfo.cs
│   │   ├── TLPaymentResult.cs
│   │   ├── TLPaymentSavedCredentialsCard.cs
│   │   ├── TLPeer.cs
│   │   ├── TLPeerDialogs.cs
│   │   ├── TLPeerNotifyEvents.cs
│   │   ├── TLPeerNotifySettings.cs
│   │   ├── TLPeerSettings.cs
│   │   ├── TLPhoneCall.cs
│   │   ├── TLPhoneCallDiscardReason.cs
│   │   ├── TLPhoneCallProtocol.cs
│   │   ├── TLPhoneConnection.cs
│   │   ├── TLPhonePhoneCall.cs
│   │   ├── TLPhoto.cs
│   │   ├── TLPhotoPickerSettings.cs
│   │   ├── TLPhotoSize.cs
│   │   ├── TLPhotos.cs
│   │   ├── TLPhotosPhoto.cs
│   │   ├── TLPong.cs
│   │   ├── TLPopularContact.cs
│   │   ├── TLPostAddress.cs
│   │   ├── TLPrivacyKey.cs
│   │   ├── TLPrivacyRule.cs
│   │   ├── TLPrivacyRules.cs
│   │   ├── TLProxyConfig.cs
│   │   ├── TLRPCDropAnswer.cs
│   │   ├── TLRPCError.cs
│   │   ├── TLRPCResult.cs
│   │   ├── TLReceivedNotifyMessage.cs
│   │   ├── TLRecentMeUrl.cs
│   │   ├── TLRecentMeUrls.cs
│   │   ├── TLRecentStickers.cs
│   │   ├── TLRecentlyUsedSticker.cs
│   │   ├── TLReplyKeyboardMarkup.cs
│   │   ├── TLRequest.cs
│   │   ├── TLResPQ.cs
│   │   ├── TLResolvedPeer.cs
│   │   ├── TLResponse.cs
│   │   ├── TLResultInfo.cs
│   │   ├── TLRichText.cs
│   │   ├── TLSavedGifs.cs
│   │   ├── TLSavedInfo.cs
│   │   ├── TLSendMessageAction.cs
│   │   ├── TLSentChangePhoneCode.cs
│   │   ├── TLSentCode.cs
│   │   ├── TLSentCodeType.cs
│   │   ├── TLSentEncryptedFile.cs
│   │   ├── TLSentEncryptedMessage.cs
│   │   ├── TLSentMessage.cs
│   │   ├── TLServerDHInnerData.cs
│   │   ├── TLServerDHParams.cs
│   │   ├── TLServerFile.cs
│   │   ├── TLShippingOption.cs
│   │   ├── TLSignatures.cs
│   │   ├── TLState.cs
│   │   ├── TLStatedMessage.cs
│   │   ├── TLStatedMessages.cs
│   │   ├── TLStickerPack.cs
│   │   ├── TLStickerSet.cs
│   │   ├── TLStickerSetCovered.cs
│   │   ├── TLStickerSetInstallResult.cs
│   │   ├── TLStickers.cs
│   │   ├── TLString.cs
│   │   ├── TLSupport.cs
│   │   ├── TLTermsOfService.cs
│   │   ├── TLTmpPassword.cs
│   │   ├── TLTopPeer.cs
│   │   ├── TLTopPeerCategory.cs
│   │   ├── TLTopPeerCategoryPeers.cs
│   │   ├── TLTopPeers.cs
│   │   ├── TLUpdate.cs
│   │   ├── TLUpdates.cs
│   │   ├── TLUserBase.cs
│   │   ├── TLUserFull.cs
│   │   ├── TLUserStatus.cs
│   │   ├── TLUtils.Log.cs
│   │   ├── TLUtils.cs
│   │   ├── TLValidatedRequestedInfo.cs
│   │   ├── TLVector.cs
│   │   ├── TLVideo.cs
│   │   ├── TLWallpaperSolid.cs
│   │   ├── TLWebDocument.cs
│   │   ├── TLWebFile.cs
│   │   └── TLWebPage.cs
│   ├── Telegram.Api.csproj
│   ├── Transport/
│   │   ├── DataEventArgs.cs
│   │   ├── HttpTransport.cs
│   │   ├── ITransport.cs
│   │   ├── ITransportService.cs
│   │   ├── SocksProxy.cs
│   │   ├── TCPTransport.cs
│   │   ├── TCPTransportBase.cs
│   │   ├── TCPTransportResult.cs
│   │   └── TransportService.cs
│   ├── WindowsPhone/
│   │   ├── BigInteger.cs
│   │   └── Tuple.cs
│   └── packages.config
├── Telegram.Api.PCL/
│   ├── Hash/
│   │   └── CRC32/
│   │       └── CRC.WinRT.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resources/
│   │   ├── AppResources.cs
│   │   ├── de/
│   │   │   └── Resources.resw
│   │   ├── en/
│   │   │   └── Resources.resw
│   │   ├── es/
│   │   │   └── Resources.resw
│   │   ├── it/
│   │   │   └── Resources.resw
│   │   ├── nl/
│   │   │   └── Resources.resw
│   │   ├── pt/
│   │   │   └── Resources.resw
│   │   └── ru/
│   │       └── Resources.resw
│   ├── Telegram.Api.PCL.csproj
│   └── packages.config
├── Telegram.Api.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resources/
│   │   ├── AppResources.Designer.cs
│   │   ├── AppResources.de.Designer.cs
│   │   ├── AppResources.de.resx
│   │   ├── AppResources.es.Designer.cs
│   │   ├── AppResources.es.resx
│   │   ├── AppResources.it.Designer.cs
│   │   ├── AppResources.it.resx
│   │   ├── AppResources.nl.Designer.cs
│   │   ├── AppResources.nl.resx
│   │   ├── AppResources.pt.Designer.cs
│   │   ├── AppResources.pt.resx
│   │   ├── AppResources.resx
│   │   ├── AppResources.ru.Designer.cs
│   │   └── AppResources.ru.resx
│   ├── Services/
│   │   ├── FileManager/
│   │   │   ├── IWebFileManager.cs
│   │   │   └── WebFileManager.cs
│   │   └── Location/
│   │       ├── ILiveLocationService.cs
│   │       └── LiveLocationService.cs
│   ├── TL/
│   │   ├── Functions/
│   │   │   ├── Account/
│   │   │   │   ├── TLAcceptAuthorization.cs
│   │   │   │   ├── TLDeleteSecureValue.cs
│   │   │   │   ├── TLGetAllSecureValues.cs
│   │   │   │   ├── TLGetAuthorizationForm.cs
│   │   │   │   ├── TLGetSecureValue.cs
│   │   │   │   ├── TLGetWebAuthorizations.cs
│   │   │   │   ├── TLInitTakeoutSession.cs
│   │   │   │   ├── TLResetWebAuthorization.cs
│   │   │   │   ├── TLResetWebAuthorizations.cs
│   │   │   │   ├── TLSaveSecureValue.cs
│   │   │   │   ├── TLSendVerifyEmailCode.cs
│   │   │   │   ├── TLSendVerifyPhoneCode.cs
│   │   │   │   ├── TLVerifyEmail.cs
│   │   │   │   ├── TLVerifyEmailCode.cs
│   │   │   │   └── TLVerifyPhone.cs
│   │   │   ├── Auth/
│   │   │   │   └── TLBindTempAuthKey.cs
│   │   │   ├── Channels/
│   │   │   │   ├── TLChangeFeedBroadcast.cs
│   │   │   │   ├── TLGetFeed.cs
│   │   │   │   ├── TLReadFeed.cs
│   │   │   │   └── TLSetFeedBroadcasts.cs
│   │   │   ├── Contacts/
│   │   │   │   └── TLGetSaved.cs
│   │   │   ├── Help/
│   │   │   │   ├── TLGetDeepLinkInfo.cs
│   │   │   │   ├── TLGetPassportConfig.cs
│   │   │   │   └── TLGetProxyData.cs
│   │   │   ├── Messages/
│   │   │   │   ├── TLClearAllDrafts.cs
│   │   │   │   ├── TLGetDialogUnreadMarks.cs
│   │   │   │   ├── TLMarkDialogUnread.cs
│   │   │   │   ├── TLReport.cs
│   │   │   │   ├── TLSearchStickerSets.cs
│   │   │   │   └── TLToggleTopPeers.cs
│   │   │   ├── Upload/
│   │   │   │   └── TLGetWebFile.cs
│   │   │   └── Users/
│   │   │       └── TLSetSecureValueErrors.cs
│   │   ├── TLAppUpdate.cs
│   │   ├── TLAuthorizationForm.cs
│   │   ├── TLContactsSettings.cs
│   │   ├── TLDeepLinkInfo.cs
│   │   ├── TLDialogPeer.cs
│   │   ├── TLFeedBroadcasts.cs
│   │   ├── TLFeedPosition.cs
│   │   ├── TLFeedSources.cs
│   │   ├── TLFoundStickerSets.cs
│   │   ├── TLInputCheckPasswordSRP.cs
│   │   ├── TLInputClientProxy.cs
│   │   ├── TLInputDialogPeer.cs
│   │   ├── TLInputMessage.cs
│   │   ├── TLInputSecureFile.cs
│   │   ├── TLInputSecureValue.cs
│   │   ├── TLInvokeWithMessageRange.cs
│   │   ├── TLInvokeWithTakeout.cs
│   │   ├── TLPassportConfig.cs
│   │   ├── TLPasswordKdfAlgo.cs
│   │   ├── TLProxyData.cs
│   │   ├── TLSavedPhoneContact.cs
│   │   ├── TLSecureCredentialsEncrypted.cs
│   │   ├── TLSecureData.cs
│   │   ├── TLSecureFile.cs
│   │   ├── TLSecurePasswordKdfAlgo.cs
│   │   ├── TLSecureRequiredType.cs
│   │   ├── TLSecureSecretSettings.cs
│   │   ├── TLSecureValue.cs
│   │   ├── TLSecureValueError.cs
│   │   ├── TLSecureValueHash.cs
│   │   ├── TLSecureValuePlainData.cs
│   │   ├── TLSecureValueType.cs
│   │   ├── TLSentEmailCode.cs
│   │   ├── TLTakeout.cs
│   │   ├── TLTermsOfServiceUpdate.cs
│   │   ├── TLWebAuthorization.cs
│   │   └── TLWebAuthorizations.cs
│   ├── Telegram.Api.WP8.csproj
│   ├── Transport/
│   │   ├── NativeTcpTransport.cs
│   │   └── TCPTransportWinRT.cs
│   └── packages.config
├── Telegram.Client.TileUpdated/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ScheduledAgent.cs
│   ├── Telegram.Client.TileUpdated.csproj
│   └── packages.config
├── Telegram.Controls/
│   ├── AnimationMediator.cs
│   ├── BindingListener.cs
│   ├── Extensions/
│   │   ├── ScrollViewerExtensions.cs
│   │   └── VisualTreeExtensions.cs
│   ├── FlipCounter.xaml
│   ├── FlipCounter.xaml.cs
│   ├── FlipPanel.xaml
│   ├── FlipPanel.xaml.cs
│   ├── Helpers/
│   │   ├── DependencyPropertyChangedListener.cs
│   │   └── DependencyPropertyValueChangedEventArgs.cs
│   ├── HighlightingTextBlock.cs
│   ├── IHighlightable.cs
│   ├── LazyItemsControl.cs
│   ├── LazyListBox.cs
│   ├── LongListSelector/
│   │   ├── Common/
│   │   │   ├── MotionParameters.cs
│   │   │   ├── SafeRaise.cs
│   │   │   ├── TempaltedVisualTreeExtensions.cs
│   │   │   └── VisualStates.cs
│   │   ├── LongListSelector.cs
│   │   ├── LongListSelectorEventArgs.cs
│   │   ├── LongListSelectorGroup.cs
│   │   ├── LongListSelectorItem.cs
│   │   ├── LongListSelectorItemType.cs
│   │   ├── LongListSelectorItemsControl.cs
│   │   ├── TemplatedListBox.cs
│   │   └── TemplatedListBoxItem.cs
│   ├── MultiTemplateItemsControl.cs
│   ├── MultiTemplateLazyListBox.cs
│   ├── Notifications/
│   │   ├── DialogService.cs
│   │   ├── PopUp.cs
│   │   └── ToastPrompt.cs
│   ├── Profiling/
│   │   ├── ApplicationSpace.cs
│   │   └── MemoryCounter.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── README_FIRST.txt
│   ├── RangeSlider.cs
│   ├── ReorderListBox/
│   │   ├── ReorderListBox.cs
│   │   └── ReorderListBoxItem.cs
│   ├── ScrollableTextBlock.cs
│   ├── SmoothProgressBar.xaml
│   ├── SmoothProgressBar.xaml.cs
│   ├── Telegram.Controls.csproj
│   ├── Themes/
│   │   └── generic.xaml
│   ├── Triggers/
│   │   └── CompressionTrigger.cs
│   ├── UnreadCounter.xaml
│   ├── UnreadCounter.xaml.cs
│   ├── Utils/
│   │   └── Language.cs
│   ├── ValidationTextBox.cs
│   ├── WatermarkTextBox.cs
│   └── packages.config
├── Telegram.Controls.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.Controls.WP8.csproj
│   ├── Utils/
│   │   └── Currency.cs
│   └── packages.config
├── Telegram.EmojiPanel/
│   ├── BrowserNavigationService.cs
│   ├── Controls/
│   │   ├── Emoji/
│   │   │   ├── EmojiControl.xaml
│   │   │   ├── EmojiControl.xaml.cs
│   │   │   ├── EmojiData.cs
│   │   │   ├── EmojiSpriteItem.cs
│   │   │   └── StickerSpriteItem.cs
│   │   └── Utilites/
│   │       ├── DelayedExecutor.cs
│   │       ├── Helpers.cs
│   │       ├── MyListItemBase.cs
│   │       ├── MyVirtualizingPanel.cs
│   │       ├── VListItemBase.cs
│   │       └── VirtSegment.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.EmojiPanel.csproj
│   ├── TelegramRichTextBox.cs
│   ├── TestScrollableTextBlock.cs
│   ├── Themes/
│   │   └── generic.xaml
│   └── packages.config
├── Telegram.EmojiPanel.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Telegram.EmojiPanel.WP8.csproj
│   └── packages.config
├── TelegramClient/
│   ├── Analytics/
│   │   ├── AnalyticsProperties.cs
│   │   ├── AnalyticsService.cs
│   │   ├── AnalyticsTracker.cs
│   │   └── ReviewRequester.cs
│   ├── Animation/
│   │   ├── LinqToVisualTree.cs
│   │   ├── MetroInMotion.cs
│   │   └── Navigation/
│   │       ├── AnimatedBasePage.cs
│   │       ├── AnimatorHelperBase.cs
│   │       ├── ContinuumAnimator.cs
│   │       ├── SlideAnimator.cs
│   │       ├── Storyboards.cs
│   │       ├── SwivelAnimator.cs
│   │       ├── TurnstileAnimator.cs
│   │       └── TurnstileFeatherAnimator.cs
│   ├── App.xaml
│   ├── App.xaml.cs
│   ├── Behaviors/
│   │   ├── MarkTapAsHandledBehavior.cs
│   │   ├── PanAndZoomBehavior.cs
│   │   ├── ProgressBarSmoother.cs
│   │   ├── SelectionBehavior.cs
│   │   ├── ThemeToStateBehavior.cs
│   │   ├── ToggleSwitchLocalizedContentBehavior.cs
│   │   └── UpdateTextBindingBehavior.cs
│   ├── Bootstrapper.cs
│   ├── CapabilityPlaceholder.cs
│   ├── Commands.cs
│   ├── Constants.cs
│   ├── Controls/
│   │   ├── BrowserNavigationService.cs
│   │   ├── TelegramNavigationInTransition.cs
│   │   ├── TelegramNavigationOutTransition.cs
│   │   ├── TelegramNavigationTransition.cs
│   │   ├── TelegramRichTextBox.cs
│   │   ├── TelegramTransitionFrame.cs
│   │   ├── TelegramTransitionService.cs
│   │   ├── TelegramTurnstileTransition.cs
│   │   ├── TestScrollableTextBlock.cs
│   │   └── TransitionFrame.cs
│   ├── Converters/
│   │   ├── BackgroundImageConverter.cs
│   │   ├── BooleanToValueConverter.cs
│   │   ├── BooleanToVisibilityConverter.cs
│   │   ├── ChatForbiddenToVisibilityConverter.cs
│   │   ├── ChatToMaxHeight.cs
│   │   ├── ChatToVisibilityConverter.cs
│   │   ├── CountToVisibilityConverter.cs
│   │   ├── DebugVisibilityConverter.cs
│   │   ├── DefaultPhotoConverter.cs
│   │   ├── DialogCaptionConverter.cs
│   │   ├── DialogDetailsBackgroundConverter.cs
│   │   ├── DialogMessageFromConverter.cs
│   │   ├── DistanceAwayConverter.cs
│   │   ├── EmptyDialogMessageConverter.cs
│   │   ├── EmptyPhotoToVisibilityConverter.cs
│   │   ├── EmptyStringToVisibilityConverter.cs
│   │   ├── ExistsToVisibilityConverter.cs
│   │   ├── ExtendedImageConverter.cs
│   │   ├── FileExtToColorConverter.cs
│   │   ├── FileNameConverter.cs
│   │   ├── FileSizeConverter.cs
│   │   ├── ForwardedMessageConverter.cs
│   │   ├── GeoLocationToVisibilityConverter.cs
│   │   ├── GeoPointToStaticGoogleMapsConverter.cs
│   │   ├── GroupToBackgroundBrushValueConverter.cs
│   │   ├── GroupToForegroundBrushValueConverter.cs
│   │   ├── IdToPlaceholderBackgroundConverter.cs
│   │   ├── IntToVisibilityConverter.cs
│   │   ├── InvertBooleanConverter.cs
│   │   ├── IsSelectedToBackgroundConverter.cs
│   │   ├── LowercaseConverter.cs
│   │   ├── MaskConverter.cs
│   │   ├── MediaContactToPhotoConverter.cs
│   │   ├── MediaEmptyToVisibilityConverter.cs
│   │   ├── MediaSizeConverter.cs
│   │   ├── MergeBrushesConverter.cs
│   │   ├── MessageStateToForegroundConverter.cs
│   │   ├── MessageStatusConverter.cs
│   │   ├── MessageToBriefInfoConverter.cs
│   │   ├── MessageToFontFamilyConverter.cs
│   │   ├── MuteUntilToStringConverter.cs
│   │   ├── NotServiceMessageToVisibilityConverter.cs
│   │   ├── NotifySettingsToVisibilityConverter.cs
│   │   ├── OverlayAccentBrushConverter.cs
│   │   ├── PhoneNumberConverter.cs
│   │   ├── PhotoBytesToImageConverter.cs
│   │   ├── PhotoToDimensionConverter.cs
│   │   ├── PhotoToThumbConverter.cs
│   │   ├── PlaceholderDefaultImageConverter.cs
│   │   ├── PrivateBetaToVisibilityConverter.cs
│   │   ├── ProgressToVisibilityConverter.cs
│   │   ├── ReplyMarkupButtonVisibilityConverter.cs
│   │   ├── SecretChatsAvailabilityConverter.cs
│   │   ├── SecretChatsForegroundConverter.cs
│   │   ├── ServiceMessageToTextConverter.cs
│   │   ├── StatusToImageConverter.cs
│   │   ├── StickerSetToCountStringConverter.cs
│   │   ├── StringEqualsToVisibilityConverter.cs
│   │   ├── StringFormatConverter.cs
│   │   ├── TLIntToDateTimeConverter.cs
│   │   ├── TestBindingConverter.cs
│   │   ├── TextMessageToVisibilityConverter.cs
│   │   ├── TextSizeToVisibilityConverter.cs
│   │   ├── UnreadCountToVisibilityConverter.cs
│   │   ├── UnreadMessageConverter.cs
│   │   ├── UnregisteredUserIdToVisibilityConverter.cs
│   │   ├── UppercaseConverter.cs
│   │   ├── UserStatusToBrushConverter.cs
│   │   ├── UserStatusToStringConverter.cs
│   │   ├── UserStatusToVisibilityConverter.cs
│   │   ├── UserToActionStringConverter.cs
│   │   └── WP8VisibilityConverter.cs
│   ├── EmojiKeyboardTemplateSelector.cs
│   ├── EmojiPanel/
│   │   └── Controls/
│   │       ├── Emoji/
│   │       │   ├── EmojiControl.xaml
│   │       │   ├── EmojiControl.xaml.cs
│   │       │   ├── EmojiData.cs
│   │       │   ├── EmojiSpriteItem.cs
│   │       │   └── StickerSpriteItem.cs
│   │       └── Utilities/
│   │           ├── DelayedExecutor.cs
│   │           ├── Helpers.cs
│   │           ├── MyListItemBase.cs
│   │           ├── MyVirtualizingPanel.cs
│   │           ├── VListItemBase.cs
│   │           └── VirtSegment.cs
│   ├── EventArgs/
│   │   └── UpdateChatTitleEventArgs.cs
│   ├── Extensions/
│   │   ├── ApplicationExtensions.cs
│   │   └── CollectionExtensions.cs
│   ├── Helpers/
│   │   ├── Clip.cs
│   │   ├── CollectionHelper.cs
│   │   ├── Execute.cs
│   │   ├── ImageUtils.cs
│   │   ├── ItemsControlHelper.cs
│   │   ├── PhoneHelper.cs
│   │   ├── Property.cs
│   │   └── TemplateSelectors/
│   │       ├── DocumentTemplateSelector.cs
│   │       ├── EmptyDialogToDescriptionConverter.cs
│   │       ├── ItemsPanelTemplateSelector.cs
│   │       ├── LocationTemplateSelector.cs
│   │       ├── MediaTemplateSelector.cs
│   │       ├── MessageTemplateSelector.cs
│   │       └── SearchContactsTemplateSelector.cs
│   ├── Logs/
│   │   └── Log.cs
│   ├── Models/
│   │   ├── AlphaKeyGroup.cs
│   │   ├── ContactsByLastName.cs
│   │   ├── Country.cs
│   │   ├── InAppNotifications.cs
│   │   ├── Settings.cs
│   │   ├── UsersByFirstName.cs
│   │   ├── UsersByLastName.cs
│   │   └── UsersInGroup.cs
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── Resources/
│   │   ├── AppResources.Designer.cs
│   │   ├── AppResources.de.Designer.cs
│   │   ├── AppResources.de.resx
│   │   ├── AppResources.es.Designer.cs
│   │   ├── AppResources.es.resx
│   │   ├── AppResources.it.Designer.cs
│   │   ├── AppResources.it.resx
│   │   ├── AppResources.nl.Designer.cs
│   │   ├── AppResources.nl.resx
│   │   ├── AppResources.pt.Designer.cs
│   │   ├── AppResources.pt.resx
│   │   ├── AppResources.resx
│   │   ├── AppResources.ru.Designer.cs
│   │   ├── AppResources.ru.resx
│   │   ├── LocalizationConverter.cs
│   │   └── LocalizedStrings.cs
│   ├── Services/
│   │   ├── CommonErrorHandler.cs
│   │   ├── HttpDocumentFileManager.cs
│   │   ├── ICommonErrorHandler.cs
│   │   ├── IPushService.cs
│   │   ├── IStateService.cs
│   │   ├── IUploadService.cs
│   │   ├── PhoneInfoService.cs
│   │   ├── PushService.cs
│   │   ├── PushServiceBase.cs
│   │   ├── StateService.cs
│   │   └── UploadService.cs
│   ├── TelegramClient.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── Button.xaml
│   │   │   ├── CheckBox.xaml
│   │   │   ├── ListBox.xaml
│   │   │   ├── LongListSelector.xaml
│   │   │   ├── ScrollViewer.xaml
│   │   │   ├── Slider.xaml
│   │   │   ├── Templates/
│   │   │   │   ├── DataTemplates.xaml
│   │   │   │   ├── ItemsPanel.xaml
│   │   │   │   ├── Media.xaml
│   │   │   │   └── Media.xaml.cs
│   │   │   ├── TextBlock.xaml
│   │   │   ├── TextBox.xaml
│   │   │   ├── Theme.xaml
│   │   │   ├── ToggleButton.xaml
│   │   │   ├── ToggleSwitch.xaml
│   │   │   └── Transitions.xaml
│   │   └── Generic.xaml
│   ├── Utils/
│   │   ├── Color.cs
│   │   ├── Language.cs
│   │   └── TelegramUriMapper.cs
│   ├── ViewModels/
│   │   ├── Additional/
│   │   │   ├── AboutViewModel.cs
│   │   │   ├── AccountSelfDestructsViewModel.cs
│   │   │   ├── AddChatParticipantConfirmationViewModel.cs
│   │   │   ├── AllowUsersViewModel.cs
│   │   │   ├── ArchivedStickersViewModel.cs
│   │   │   ├── AskQuestionConfirmationViewModel.cs
│   │   │   ├── BlockedContactsViewModel.cs
│   │   │   ├── CacheViewModel.cs
│   │   │   ├── ChangePasscodeViewModel.cs
│   │   │   ├── ChangePasswordEmailViewModel.cs
│   │   │   ├── ChangePasswordHintViewModel.cs
│   │   │   ├── ChangePasswordViewModel.cs
│   │   │   ├── ChangePhoneNumberViewModel.cs
│   │   │   ├── ChannelBlockedContactsViewModel.cs
│   │   │   ├── ChatInviteViewModel.cs
│   │   │   ├── ChatSettingsViewModel.cs
│   │   │   ├── ChooseAttachmentViewModel.cs
│   │   │   ├── ChooseBackgroundViewModel.cs
│   │   │   ├── ChooseCountryViewModel.cs
│   │   │   ├── ChooseNotificationSpanViewModel.cs
│   │   │   ├── ChooseTTLViewModel.cs
│   │   │   ├── ClearCacheSettingsViewModel.cs
│   │   │   ├── EditChatUsernameViewModel.cs
│   │   │   ├── EditCurrentUserViewModel.cs
│   │   │   ├── EditPhoneNumberViewModel.cs
│   │   │   ├── EditUsernameViewModel.cs
│   │   │   ├── EncryptionKeyViewModel.cs
│   │   │   ├── EnterPasscodeViewModel.cs
│   │   │   ├── EnterPasswordViewModel.cs
│   │   │   ├── FeaturedStickersViewModel.cs
│   │   │   ├── GroupsViewModel.cs
│   │   │   ├── LastSeenViewModel.cs
│   │   │   ├── LockscreenViewModel.cs
│   │   │   ├── MasksViewModel.cs
│   │   │   ├── MassDeleteReportSpamViewModel.cs
│   │   │   ├── NotificationsViewModel.cs
│   │   │   ├── PasscodeViewModel.cs
│   │   │   ├── PasswordRecoveryViewModel.cs
│   │   │   ├── PasswordViewModel.cs
│   │   │   ├── PrivacySecureViewModel.cs
│   │   │   ├── PrivacyStatementViewModel.cs
│   │   │   ├── SecretChatsViewModel.cs
│   │   │   ├── SelectMultipleUsersViewModel.cs
│   │   │   ├── SessionsViewModel.cs
│   │   │   ├── SettingsViewModel.cs
│   │   │   ├── ShareViewModel.cs
│   │   │   ├── SnapshotsViewModel.cs
│   │   │   ├── SpecialThanksViewModel.cs
│   │   │   ├── StartupViewModel.cs
│   │   │   ├── StickersViewModel.cs
│   │   │   └── WebViewModel.cs
│   │   ├── Auth/
│   │   │   ├── CancelConfirmResetViewModel.cs
│   │   │   ├── ConfirmPasswordViewModel.cs
│   │   │   ├── ConfirmViewModel.cs
│   │   │   ├── ResetAccountViewModel.cs
│   │   │   ├── SignInViewModel.cs
│   │   │   └── SignUpViewModel.cs
│   │   ├── Chats/
│   │   │   ├── AddAdminsViewModel.cs
│   │   │   ├── AddChannelManagerViewModel.cs
│   │   │   ├── AddChatParticipantViewModel.cs
│   │   │   ├── AddSecretChatParticipantViewModel.cs
│   │   │   ├── ChannelAdministratorsViewModel.cs
│   │   │   ├── ChannelIntroViewModel.cs
│   │   │   ├── ChannelMembersViewModel.cs
│   │   │   ├── Chat2ViewModel.cs
│   │   │   ├── ChatDetailsViewModel.cs
│   │   │   ├── ChatViewModel.cs
│   │   │   ├── ConvertToSupergroupViewModel.cs
│   │   │   ├── EditChatViewModel.cs
│   │   │   ├── EditGroupTypeViewModel.cs
│   │   │   ├── GroupsInCommonViewModel.cs
│   │   │   └── InviteLinkViewModel.cs
│   │   ├── Contacts/
│   │   │   ├── ContactDetailsViewModel.cs
│   │   │   ├── ContactInfoViewModel.cs
│   │   │   ├── ContactViewModel.cs
│   │   │   ├── ContactsViewModel.cs
│   │   │   ├── EditContactViewModel.cs
│   │   │   ├── SecretContactDetailsViewModel.cs
│   │   │   ├── SecretContactViewModel.cs
│   │   │   └── ShareContactViewModel.cs
│   │   ├── Debug/
│   │   │   ├── DebugViewModel.cs
│   │   │   ├── LogViewModel.cs
│   │   │   ├── LongPollViewModel.cs
│   │   │   └── PerformanceViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── ChooseDialogViewModel.cs
│   │   │   ├── ChooseParticipantsViewModel.cs
│   │   │   ├── CommandHintsViewModel.cs
│   │   │   ├── CreateBroadcastViewModel.cs
│   │   │   ├── CreateChannelStep1ViewModel.cs
│   │   │   ├── CreateChannelStep2ViewModel.cs
│   │   │   ├── CreateChannelStep3ViewModel.cs
│   │   │   ├── CreateChannelViewModel.cs
│   │   │   ├── CreateDialogViewModel.cs
│   │   │   ├── DialogDetailsMode.cs
│   │   │   ├── DialogDetailsViewModel.Actions.cs
│   │   │   ├── DialogDetailsViewModel.Channel.cs
│   │   │   ├── DialogDetailsViewModel.Contact.cs
│   │   │   ├── DialogDetailsViewModel.Document.cs
│   │   │   ├── DialogDetailsViewModel.Edit.cs
│   │   │   ├── DialogDetailsViewModel.GeoPoint.cs
│   │   │   ├── DialogDetailsViewModel.Handle.cs
│   │   │   ├── DialogDetailsViewModel.InlineBots.cs
│   │   │   ├── DialogDetailsViewModel.Mass.cs
│   │   │   ├── DialogDetailsViewModel.Media.cs
│   │   │   ├── DialogDetailsViewModel.Photo.cs
│   │   │   ├── DialogDetailsViewModel.Reply.cs
│   │   │   ├── DialogDetailsViewModel.Search.cs
│   │   │   ├── DialogDetailsViewModel.Video.cs
│   │   │   ├── DialogDetailsViewModel.cs
│   │   │   ├── DialogSearchMessagesViewModel.cs
│   │   │   ├── DialogsViewModel.Common.cs
│   │   │   ├── DialogsViewModel.cs
│   │   │   ├── FastDialogDetailsViewModel.cs
│   │   │   ├── HashtagHintsViewModel.cs
│   │   │   ├── InlineBotResultsViewModel.cs
│   │   │   ├── MessageViewerViewModel.cs
│   │   │   ├── PinnedMessageViewModel.cs
│   │   │   ├── SecretChatDebugViewModel.cs
│   │   │   ├── SecretDialogDetailsViewModel.Actions.cs
│   │   │   ├── SecretDialogDetailsViewModel.Document.cs
│   │   │   ├── SecretDialogDetailsViewModel.GeoPoint.cs
│   │   │   ├── SecretDialogDetailsViewModel.Handle.cs
│   │   │   ├── SecretDialogDetailsViewModel.InlineBots.cs
│   │   │   ├── SecretDialogDetailsViewModel.Media.cs
│   │   │   ├── SecretDialogDetailsViewModel.Photo.cs
│   │   │   ├── SecretDialogDetailsViewModel.Reply.cs
│   │   │   ├── SecretDialogDetailsViewModel.Text.cs
│   │   │   ├── SecretDialogDetailsViewModel.Video.cs
│   │   │   ├── SecretDialogDetailsViewModel.cs
│   │   │   ├── StickerHintsViewModel.cs
│   │   │   ├── UserActionViewModel.cs
│   │   │   └── UsernameHintsViewModel.cs
│   │   ├── ItemDetailsViewModelBase.cs
│   │   ├── ItemsViewModelBase.cs
│   │   ├── Media/
│   │   │   ├── AnimatedImageViewerViewModel.cs
│   │   │   ├── DecryptedImageViewerViewModel.cs
│   │   │   ├── FilesViewModel.cs
│   │   │   ├── FullMediaViewModel.cs
│   │   │   ├── ImageEditorViewModel.cs
│   │   │   ├── ImageViewerViewModel.cs
│   │   │   ├── LinksViewModel.cs
│   │   │   ├── MapViewModel.cs
│   │   │   ├── MediaViewModel.cs
│   │   │   ├── MusicViewModel.cs
│   │   │   ├── PivotImageViewerViewModel.cs
│   │   │   ├── ProfilePhotoViewerViewModel.cs
│   │   │   ├── SecretMediaViewModel.cs
│   │   │   ├── VideoCaptureViewModel.cs
│   │   │   └── VideoPlayerViewModel.cs
│   │   ├── Search/
│   │   │   ├── ISearch.cs
│   │   │   ├── SearchContactsViewModel.cs
│   │   │   ├── SearchDialogsViewModel.cs
│   │   │   ├── SearchFilesViewModel.cs
│   │   │   ├── SearchItemsViewModelBase.cs
│   │   │   ├── SearchLinksViewModel.cs
│   │   │   ├── SearchMessagesViewModel.cs
│   │   │   ├── SearchMusicViewModel.cs
│   │   │   ├── SearchShellViewModel.cs
│   │   │   ├── SearchVenuesViewModel.cs
│   │   │   └── SearchViewModel.cs
│   │   ├── ShellViewModel.cs
│   │   └── ViewModelBase.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── AboutView.xaml
│   │   │   ├── AboutView.xaml.cs
│   │   │   ├── AccountSelfDestructsView.xaml
│   │   │   ├── AccountSelfDestructsView.xaml.cs
│   │   │   ├── AddChatParticipantConfirmationView.xaml
│   │   │   ├── AddChatParticipantConfirmationView.xaml.cs
│   │   │   ├── AllowUsersView.xaml
│   │   │   ├── AllowUsersView.xaml.cs
│   │   │   ├── ArchivedStickersView.xaml
│   │   │   ├── ArchivedStickersView.xaml.cs
│   │   │   ├── AskQuestionConfirmationView.xaml
│   │   │   ├── AskQuestionConfirmationView.xaml.cs
│   │   │   ├── BlockedContactsView.xaml
│   │   │   ├── BlockedContactsView.xaml.cs
│   │   │   ├── BubbleBackgroundControl.xaml
│   │   │   ├── BubbleBackgroundControl.xaml.cs
│   │   │   ├── CacheView.xaml
│   │   │   ├── CacheView.xaml.cs
│   │   │   ├── ChangePasscodeView.xaml
│   │   │   ├── ChangePasscodeView.xaml.cs
│   │   │   ├── ChangePasswordEmailView.xaml
│   │   │   ├── ChangePasswordEmailView.xaml.cs
│   │   │   ├── ChangePasswordHintView.xaml
│   │   │   ├── ChangePasswordHintView.xaml.cs
│   │   │   ├── ChangePasswordView.xaml
│   │   │   ├── ChangePasswordView.xaml.cs
│   │   │   ├── ChangePhoneNumberView.xaml
│   │   │   ├── ChangePhoneNumberView.xaml.cs
│   │   │   ├── ChannelBlockedContactsView.xaml
│   │   │   ├── ChannelBlockedContactsView.xaml.cs
│   │   │   ├── ChatSettingsView.xaml
│   │   │   ├── ChatSettingsView.xaml.cs
│   │   │   ├── ChooseAttachmentView.xaml
│   │   │   ├── ChooseAttachmentView.xaml.cs
│   │   │   ├── ChooseBackgroundView.xaml
│   │   │   ├── ChooseBackgroundView.xaml.cs
│   │   │   ├── ChooseCountryView.xaml
│   │   │   ├── ChooseCountryView.xaml.cs
│   │   │   ├── ChooseNotificationSpanView.xaml
│   │   │   ├── ChooseNotificationSpanView.xaml.cs
│   │   │   ├── ChooseTTLView.xaml
│   │   │   ├── ChooseTTLView.xaml.cs
│   │   │   ├── ClearCacheSettingsView.xaml
│   │   │   ├── ClearCacheSettingsView.xaml.cs
│   │   │   ├── EditChatUsernameView.xaml
│   │   │   ├── EditChatUsernameView.xaml.cs
│   │   │   ├── EditCurrentUserView.xaml
│   │   │   ├── EditCurrentUserView.xaml.cs
│   │   │   ├── EditPhoneNumberView.xaml
│   │   │   ├── EditPhoneNumberView.xaml.cs
│   │   │   ├── EditUsernameView.xaml
│   │   │   ├── EditUsernameView.xaml.cs
│   │   │   ├── EncryptionKeyView.xaml
│   │   │   ├── EncryptionKeyView.xaml.cs
│   │   │   ├── EnterPasscodeView.xaml
│   │   │   ├── EnterPasscodeView.xaml.cs
│   │   │   ├── EnterPasswordView.xaml
│   │   │   ├── EnterPasswordView.xaml.cs
│   │   │   ├── FallingSnowControl.xaml
│   │   │   ├── FallingSnowControl.xaml.cs
│   │   │   ├── FeaturedStickersView.xaml
│   │   │   ├── FeaturedStickersView.xaml.cs
│   │   │   ├── GroupsView.xaml
│   │   │   ├── GroupsView.xaml.cs
│   │   │   ├── InputMessageHint.xaml
│   │   │   ├── InputMessageHint.xaml.cs
│   │   │   ├── LastSeenView.xaml
│   │   │   ├── LastSeenView.xaml.cs
│   │   │   ├── LockscreenView.xaml
│   │   │   ├── LockscreenView.xaml.cs
│   │   │   ├── MasksView.xaml
│   │   │   ├── MasksView.xaml.cs
│   │   │   ├── MassDeleteReportSpamView.xaml
│   │   │   ├── MassDeleteReportSpamView.xaml.cs
│   │   │   ├── NotificationsView.xaml
│   │   │   ├── NotificationsView.xaml.cs
│   │   │   ├── NumericKeyboard.xaml
│   │   │   ├── NumericKeyboard.xaml.cs
│   │   │   ├── PasscodeView.xaml
│   │   │   ├── PasscodeView.xaml.cs
│   │   │   ├── PasswordRecoveryView.xaml
│   │   │   ├── PasswordRecoveryView.xaml.cs
│   │   │   ├── PasswordView.xaml
│   │   │   ├── PasswordView.xaml.cs
│   │   │   ├── PrivacySecurityView.xaml
│   │   │   ├── PrivacySecurityView.xaml.cs
│   │   │   ├── PrivacyStatementView.xaml
│   │   │   ├── PrivacyStatementView.xaml.cs
│   │   │   ├── SecretChatsView.xaml
│   │   │   ├── SecretChatsView.xaml.cs
│   │   │   ├── SelectMultipleUsersView.xaml
│   │   │   ├── SelectMultipleUsersView.xaml.cs
│   │   │   ├── SessionsView.xaml
│   │   │   ├── SessionsView.xaml.cs
│   │   │   ├── SettingsView.xaml
│   │   │   ├── SettingsView.xaml.cs
│   │   │   ├── ShareView.xaml
│   │   │   ├── ShareView.xaml.cs
│   │   │   ├── SnapshotsView.xaml
│   │   │   ├── SnapshotsView.xaml.cs
│   │   │   ├── SpecialThanksView.xaml
│   │   │   ├── SpecialThanksView.xaml.cs
│   │   │   ├── StartupView.xaml
│   │   │   ├── StartupView.xaml.cs
│   │   │   ├── StickersView.xaml
│   │   │   ├── StickersView.xaml.cs
│   │   │   ├── TelegramPasswordBox.xaml
│   │   │   ├── TelegramPasswordBox.xaml.cs
│   │   │   ├── WebView.xaml
│   │   │   └── WebView.xaml.cs
│   │   ├── Auth/
│   │   │   ├── CancelConfirmResetView.xaml
│   │   │   ├── CancelConfirmResetView.xaml.cs
│   │   │   ├── ConfirmPasswordView.xaml
│   │   │   ├── ConfirmPasswordView.xaml.cs
│   │   │   ├── ConfirmView.xaml
│   │   │   ├── ConfirmView.xaml.cs
│   │   │   ├── ResetAccountView.xaml
│   │   │   ├── ResetAccountView.xaml.cs
│   │   │   ├── SignInView.xaml
│   │   │   ├── SignInView.xaml.cs
│   │   │   ├── SignUpView.xaml
│   │   │   └── SignUpView.xaml.cs
│   │   ├── Chats/
│   │   │   ├── AddAdminsView.xaml
│   │   │   ├── AddAdminsView.xaml.cs
│   │   │   ├── AddChannelManagerView.xaml
│   │   │   ├── AddChannelManagerView.xaml.cs
│   │   │   ├── AddChatParticipantView.xaml
│   │   │   ├── AddChatParticipantView.xaml.cs
│   │   │   ├── AddSecretChatParticipantView.xaml
│   │   │   ├── AddSecretChatParticipantView.xaml.cs
│   │   │   ├── ChannelAdministratorsView.xaml
│   │   │   ├── ChannelAdministratorsView.xaml.cs
│   │   │   ├── ChannelIntroView.xaml
│   │   │   ├── ChannelIntroView.xaml.cs
│   │   │   ├── ChannelMembersView.xaml
│   │   │   ├── ChannelMembersView.xaml.cs
│   │   │   ├── Chat2View.xaml
│   │   │   ├── Chat2View.xaml.cs
│   │   │   ├── ChatDetailsView.xaml
│   │   │   ├── ChatDetailsView.xaml.cs
│   │   │   ├── ChatView.xaml
│   │   │   ├── ChatView.xaml.cs
│   │   │   ├── ConvertToSupergroupView.xaml
│   │   │   ├── ConvertToSupergroupView.xaml.cs
│   │   │   ├── EditChatView.xaml
│   │   │   ├── EditChatView.xaml.cs
│   │   │   ├── EditGroupTypeView.xaml
│   │   │   ├── EditGroupTypeView.xaml.cs
│   │   │   ├── GroupsInCommonView.xaml
│   │   │   ├── GroupsInCommonView.xaml.cs
│   │   │   ├── InviteLinkView.xaml
│   │   │   └── InviteLinkView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ContactDetailsView.xaml
│   │   │   ├── ContactDetailsView.xaml.cs
│   │   │   ├── ContactInfoView.xaml
│   │   │   ├── ContactInfoView.xaml.cs
│   │   │   ├── ContactView.xaml
│   │   │   ├── ContactView.xaml.cs
│   │   │   ├── ContactsView.xaml
│   │   │   ├── ContactsView.xaml.cs
│   │   │   ├── EditContactView.xaml
│   │   │   ├── EditContactView.xaml.cs
│   │   │   ├── SecretContactDetailsView.xaml
│   │   │   ├── SecretContactDetailsView.xaml.cs
│   │   │   ├── SecretContactView.xaml
│   │   │   ├── SecretContactView.xaml.cs
│   │   │   ├── ShareContactView.xaml
│   │   │   └── ShareContactView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── ChatInviteControl.xaml
│   │   │   ├── ChatInviteControl.xaml.cs
│   │   │   ├── ConversationTileControl.xaml
│   │   │   ├── ConversationTileControl.xaml.cs
│   │   │   ├── FeaturedStickerSetControl.xaml
│   │   │   ├── FeaturedStickerSetControl.xaml.cs
│   │   │   ├── MainTitleControl.xaml
│   │   │   ├── MainTitleControl.xaml.cs
│   │   │   ├── MessagePlayerControl.xaml
│   │   │   ├── MessagePlayerControl.xaml.cs
│   │   │   ├── MessageStatusControl.xaml
│   │   │   ├── MessageStatusControl.xaml.cs
│   │   │   ├── PieSlice.cs
│   │   │   ├── SecretPhotoPlaceholder.xaml
│   │   │   ├── SecretPhotoPlaceholder.xaml.cs
│   │   │   ├── StickerSetControl.xaml
│   │   │   ├── StickerSetControl.xaml.cs
│   │   │   ├── UnreadCounter.xaml
│   │   │   ├── UnreadCounter.xaml.cs
│   │   │   ├── UserTileControl.xaml
│   │   │   └── UserTileControl.xaml.cs
│   │   ├── Debug/
│   │   │   ├── DebugView.xaml
│   │   │   ├── DebugView.xaml.cs
│   │   │   ├── LongPollView.xaml
│   │   │   ├── LongPollView.xaml.cs
│   │   │   ├── PerformanceView.xaml
│   │   │   └── PerformanceView.xaml.cs
│   │   ├── DialogDetailsView.xaml
│   │   ├── DialogDetailsView.xaml.cs
│   │   ├── Dialogs/
│   │   │   ├── ChooseDialogView.xaml
│   │   │   ├── ChooseDialogView.xaml.cs
│   │   │   ├── ChooseParticipantsView.xaml
│   │   │   ├── ChooseParticipantsView.xaml.cs
│   │   │   ├── CommandHintsView.xaml
│   │   │   ├── CommandHintsView.xaml.cs
│   │   │   ├── CommandsControl.xaml
│   │   │   ├── CommandsControl.xaml.cs
│   │   │   ├── CreateBroadcastView.xaml
│   │   │   ├── CreateBroadcastView.xaml.cs
│   │   │   ├── CreateChannelStep1View.xaml
│   │   │   ├── CreateChannelStep1View.xaml.cs
│   │   │   ├── CreateChannelStep2View.xaml
│   │   │   ├── CreateChannelStep2View.xaml.cs
│   │   │   ├── CreateChannelStep3View.xaml
│   │   │   ├── CreateChannelStep3View.xaml.cs
│   │   │   ├── CreateChannelView.xaml
│   │   │   ├── CreateChannelView.xaml.cs
│   │   │   ├── CreateDialogView.xaml
│   │   │   ├── CreateDialogView.xaml.cs
│   │   │   ├── DialogDetailsView.xaml
│   │   │   ├── DialogDetailsView.xaml.cs
│   │   │   ├── DialogSearchMessagesView.xaml
│   │   │   ├── DialogSearchMessagesView.xaml.cs
│   │   │   ├── DialogsView.xaml
│   │   │   ├── DialogsView.xaml.cs
│   │   │   ├── EmojiKeyboard.xaml
│   │   │   ├── EmojiKeyboard.xaml.cs
│   │   │   ├── EmojiKeyboardControl.xaml
│   │   │   ├── EmojiKeyboardControl.xaml.cs
│   │   │   ├── FastDialogDetailsView.xaml
│   │   │   ├── FastDialogDetailsView.xaml.cs
│   │   │   ├── HashtagHintsView.xaml
│   │   │   ├── HashtagHintsView.xaml.cs
│   │   │   ├── InlineBotResultsView.xaml
│   │   │   ├── InlineBotResultsView.xaml.cs
│   │   │   ├── MessageViewerView.xaml
│   │   │   ├── MessageViewerView.xaml.cs
│   │   │   ├── PinnedMessageView.xaml
│   │   │   ├── PinnedMessageView.xaml.cs
│   │   │   ├── SecretChatDebugView.xaml
│   │   │   ├── SecretChatDebugView.xaml.cs
│   │   │   ├── SecretDialogDetailsView.xaml
│   │   │   ├── SecretDialogDetailsView.xaml.cs
│   │   │   ├── StickerHintsView.xaml
│   │   │   ├── StickerHintsView.xaml.cs
│   │   │   ├── StickerPreviewMenu.xaml
│   │   │   ├── StickerPreviewMenu.xaml.cs
│   │   │   ├── UserActionView.xaml
│   │   │   ├── UserActionView.xaml.cs
│   │   │   ├── UsernameHintsView.xaml
│   │   │   └── UsernameHintsView.xaml.cs
│   │   ├── Media/
│   │   │   ├── AnimatedImageViewerView.xaml
│   │   │   ├── AnimatedImageViewerView.xaml.cs
│   │   │   ├── DecryptedImageViewerView.xaml
│   │   │   ├── DecryptedImageViewerView.xaml.cs
│   │   │   ├── FilesView.xaml
│   │   │   ├── FilesView.xaml.cs
│   │   │   ├── FullMediaView.xaml
│   │   │   ├── FullMediaView.xaml.cs
│   │   │   ├── ImageEditorView.xaml
│   │   │   ├── ImageEditorView.xaml.cs
│   │   │   ├── ImageViewerView.xaml
│   │   │   ├── ImageViewerView.xaml.cs
│   │   │   ├── LinksView.xaml
│   │   │   ├── LinksView.xaml.cs
│   │   │   ├── MapTileSources/
│   │   │   │   ├── GoogleMapsTileSource.cs
│   │   │   │   ├── OpenAeralMapTileSource.cs
│   │   │   │   └── OpenStreetMapTileSource.cs
│   │   │   ├── MapView.xaml
│   │   │   ├── MapView.xaml.cs
│   │   │   ├── MediaView.xaml
│   │   │   ├── MediaView.xaml.cs
│   │   │   ├── MusicView.xaml
│   │   │   ├── MusicView.xaml.cs
│   │   │   ├── ProfilePhotoViewerView.xaml
│   │   │   ├── ProfilePhotoViewerView.xaml.cs
│   │   │   ├── SecretMediaView.xaml
│   │   │   ├── SecretMediaView.xaml.cs
│   │   │   ├── VideoCaptureView.xaml
│   │   │   ├── VideoCaptureView.xaml.cs
│   │   │   ├── VideoPlayerView.xaml
│   │   │   └── VideoPlayerView.xaml.cs
│   │   ├── Search/
│   │   │   ├── SearchContactsView.xaml
│   │   │   ├── SearchContactsView.xaml.cs
│   │   │   ├── SearchDialogsView.xaml
│   │   │   ├── SearchDialogsView.xaml.cs
│   │   │   ├── SearchFilesView.xaml
│   │   │   ├── SearchFilesView.xaml.cs
│   │   │   ├── SearchLinksView.xaml
│   │   │   ├── SearchLinksView.xaml.cs
│   │   │   ├── SearchMessagesView.xaml
│   │   │   ├── SearchMessagesView.xaml.cs
│   │   │   ├── SearchMusicView.xaml
│   │   │   ├── SearchMusicView.xaml.cs
│   │   │   ├── SearchShellView.xaml
│   │   │   ├── SearchShellView.xaml.cs
│   │   │   ├── SearchVenuesView.xaml
│   │   │   ├── SearchVenuesView.xaml.cs
│   │   │   ├── SearchView.xaml
│   │   │   └── SearchView.xaml.cs
│   │   ├── ShellView.xaml
│   │   ├── ShellView.xaml.cs
│   │   └── TelegramViewBase.cs
│   └── packages.config
├── TelegramClient.Native/
│   ├── ConnectionSocket.cpp
│   ├── ConnectionSocket.h
│   ├── EmojiSuggestion.cpp
│   ├── EmojiSuggestion.h
│   ├── TelegramClient.Native.vcxproj
│   ├── TelegramClient.Native.vcxproj.filters
│   ├── emoji_suggestions.cpp
│   ├── emoji_suggestions.h
│   ├── emoji_suggestions_data.cpp
│   ├── emoji_suggestions_data.h
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.Opus/
│   ├── COpusCodec.cpp
│   ├── COpusCodec.h
│   ├── TelegramClient.Opus.cpp
│   ├── TelegramClient.Opus.h
│   ├── TelegramClient.Opus.vcxproj
│   ├── TelegramClient.Opus.vcxproj.filters
│   ├── audio.c
│   ├── opus/
│   │   ├── celt/
│   │   │   ├── _kiss_fft_guts.h
│   │   │   ├── arch.h
│   │   │   ├── arm/
│   │   │   │   ├── arm_celt_map.c
│   │   │   │   ├── armcpu.c
│   │   │   │   ├── armcpu.h
│   │   │   │   ├── fixed_armv4.h
│   │   │   │   ├── fixed_armv5e.h
│   │   │   │   ├── kiss_fft_armv4.h
│   │   │   │   ├── kiss_fft_armv5e.h
│   │   │   │   └── pitch_arm.h
│   │   │   ├── bands.c
│   │   │   ├── bands.h
│   │   │   ├── celt.c
│   │   │   ├── celt.h
│   │   │   ├── celt_decoder.c
│   │   │   ├── celt_encoder.c
│   │   │   ├── celt_lpc.c
│   │   │   ├── celt_lpc.h
│   │   │   ├── cpu_support.h
│   │   │   ├── cwrs.c
│   │   │   ├── cwrs.h
│   │   │   ├── ecintrin.h
│   │   │   ├── entcode.c
│   │   │   ├── entcode.h
│   │   │   ├── entdec.c
│   │   │   ├── entdec.h
│   │   │   ├── entenc.c
│   │   │   ├── entenc.h
│   │   │   ├── fixed_debug.h
│   │   │   ├── fixed_generic.h
│   │   │   ├── float_cast.h
│   │   │   ├── kiss_fft.c
│   │   │   ├── kiss_fft.h
│   │   │   ├── laplace.c
│   │   │   ├── laplace.h
│   │   │   ├── mathops.c
│   │   │   ├── mathops.h
│   │   │   ├── mdct.c
│   │   │   ├── mdct.h
│   │   │   ├── mfrngcod.h
│   │   │   ├── modes.c
│   │   │   ├── modes.h
│   │   │   ├── os_support.h
│   │   │   ├── pitch.c
│   │   │   ├── pitch.h
│   │   │   ├── quant_bands.c
│   │   │   ├── quant_bands.h
│   │   │   ├── rate.c
│   │   │   ├── rate.h
│   │   │   ├── stack_alloc.h
│   │   │   ├── static_modes_fixed.h
│   │   │   ├── static_modes_float.h
│   │   │   ├── vq.c
│   │   │   ├── vq.h
│   │   │   └── x86/
│   │   │       └── pitch_sse.h
│   │   ├── include/
│   │   │   ├── opus.h
│   │   │   ├── opus_custom.h
│   │   │   ├── opus_defines.h
│   │   │   ├── opus_multistream.h
│   │   │   └── opus_types.h
│   │   ├── ogg/
│   │   │   ├── bitwise.c
│   │   │   ├── framing.c
│   │   │   ├── ogg.h
│   │   │   └── os_types.h
│   │   ├── opusfile/
│   │   │   ├── info.c
│   │   │   ├── internal.c
│   │   │   ├── internal.h
│   │   │   ├── opusfile.c
│   │   │   ├── opusfile.h
│   │   │   └── stream.c
│   │   ├── silk/
│   │   │   ├── A2NLSF.c
│   │   │   ├── API.h
│   │   │   ├── CNG.c
│   │   │   ├── HP_variable_cutoff.c
│   │   │   ├── Inlines.h
│   │   │   ├── LPC_analysis_filter.c
│   │   │   ├── LPC_inv_pred_gain.c
│   │   │   ├── LP_variable_cutoff.c
│   │   │   ├── MacroCount.h
│   │   │   ├── MacroDebug.h
│   │   │   ├── NLSF2A.c
│   │   │   ├── NLSF_VQ.c
│   │   │   ├── NLSF_VQ_weights_laroia.c
│   │   │   ├── NLSF_decode.c
│   │   │   ├── NLSF_del_dec_quant.c
│   │   │   ├── NLSF_encode.c
│   │   │   ├── NLSF_stabilize.c
│   │   │   ├── NLSF_unpack.c
│   │   │   ├── NSQ.c
│   │   │   ├── NSQ_del_dec.c
│   │   │   ├── PLC.c
│   │   │   ├── PLC.h
│   │   │   ├── SigProc_FIX.h
│   │   │   ├── VAD.c
│   │   │   ├── VQ_WMat_EC.c
│   │   │   ├── ana_filt_bank_1.c
│   │   │   ├── arm/
│   │   │   │   ├── SigProc_FIX_armv4.h
│   │   │   │   ├── SigProc_FIX_armv5e.h
│   │   │   │   ├── macros_armv4.h
│   │   │   │   └── macros_armv5e.h
│   │   │   ├── biquad_alt.c
│   │   │   ├── bwexpander.c
│   │   │   ├── bwexpander_32.c
│   │   │   ├── check_control_input.c
│   │   │   ├── code_signs.c
│   │   │   ├── control.h
│   │   │   ├── control_SNR.c
│   │   │   ├── control_audio_bandwidth.c
│   │   │   ├── control_codec.c
│   │   │   ├── debug.c
│   │   │   ├── debug.h
│   │   │   ├── dec_API.c
│   │   │   ├── decode_core.c
│   │   │   ├── decode_frame.c
│   │   │   ├── decode_indices.c
│   │   │   ├── decode_parameters.c
│   │   │   ├── decode_pitch.c
│   │   │   ├── decode_pulses.c
│   │   │   ├── decoder_set_fs.c
│   │   │   ├── define.h
│   │   │   ├── enc_API.c
│   │   │   ├── encode_indices.c
│   │   │   ├── encode_pulses.c
│   │   │   ├── errors.h
│   │   │   ├── fixed/
│   │   │   │   ├── LTP_analysis_filter_FIX.c
│   │   │   │   ├── LTP_scale_ctrl_FIX.c
│   │   │   │   ├── apply_sine_window_FIX.c
│   │   │   │   ├── autocorr_FIX.c
│   │   │   │   ├── burg_modified_FIX.c
│   │   │   │   ├── corrMatrix_FIX.c
│   │   │   │   ├── encode_frame_FIX.c
│   │   │   │   ├── find_LPC_FIX.c
│   │   │   │   ├── find_LTP_FIX.c
│   │   │   │   ├── find_pitch_lags_FIX.c
│   │   │   │   ├── find_pred_coefs_FIX.c
│   │   │   │   ├── k2a_FIX.c
│   │   │   │   ├── k2a_Q16_FIX.c
│   │   │   │   ├── main_FIX.h
│   │   │   │   ├── noise_shape_analysis_FIX.c
│   │   │   │   ├── pitch_analysis_core_FIX.c
│   │   │   │   ├── prefilter_FIX.c
│   │   │   │   ├── process_gains_FIX.c
│   │   │   │   ├── regularize_correlations_FIX.c
│   │   │   │   ├── residual_energy16_FIX.c
│   │   │   │   ├── residual_energy_FIX.c
│   │   │   │   ├── schur64_FIX.c
│   │   │   │   ├── schur_FIX.c
│   │   │   │   ├── solve_LS_FIX.c
│   │   │   │   ├── structs_FIX.h
│   │   │   │   ├── vector_ops_FIX.c
│   │   │   │   └── warped_autocorrelation_FIX.c
│   │   │   ├── gain_quant.c
│   │   │   ├── init_decoder.c
│   │   │   ├── init_encoder.c
│   │   │   ├── inner_prod_aligned.c
│   │   │   ├── interpolate.c
│   │   │   ├── lin2log.c
│   │   │   ├── log2lin.c
│   │   │   ├── macros.h
│   │   │   ├── main.h
│   │   │   ├── pitch_est_defines.h
│   │   │   ├── pitch_est_tables.c
│   │   │   ├── process_NLSFs.c
│   │   │   ├── quant_LTP_gains.c
│   │   │   ├── resampler.c
│   │   │   ├── resampler_down2.c
│   │   │   ├── resampler_down2_3.c
│   │   │   ├── resampler_private.h
│   │   │   ├── resampler_private_AR2.c
│   │   │   ├── resampler_private_IIR_FIR.c
│   │   │   ├── resampler_private_down_FIR.c
│   │   │   ├── resampler_private_up2_HQ.c
│   │   │   ├── resampler_rom.c
│   │   │   ├── resampler_rom.h
│   │   │   ├── resampler_structs.h
│   │   │   ├── shell_coder.c
│   │   │   ├── sigm_Q15.c
│   │   │   ├── sort.c
│   │   │   ├── stereo_LR_to_MS.c
│   │   │   ├── stereo_MS_to_LR.c
│   │   │   ├── stereo_decode_pred.c
│   │   │   ├── stereo_encode_pred.c
│   │   │   ├── stereo_find_predictor.c
│   │   │   ├── stereo_quant_pred.c
│   │   │   ├── structs.h
│   │   │   ├── sum_sqr_shift.c
│   │   │   ├── table_LSF_cos.c
│   │   │   ├── tables.h
│   │   │   ├── tables_LTP.c
│   │   │   ├── tables_NLSF_CB_NB_MB.c
│   │   │   ├── tables_NLSF_CB_WB.c
│   │   │   ├── tables_gain.c
│   │   │   ├── tables_other.c
│   │   │   ├── tables_pitch_lag.c
│   │   │   ├── tables_pulses_per_block.c
│   │   │   ├── tuning_parameters.h
│   │   │   └── typedef.h
│   │   └── src/
│   │       ├── analysis.c
│   │       ├── analysis.h
│   │       ├── mlp.c
│   │       ├── mlp.h
│   │       ├── mlp_data.c
│   │       ├── opus.c
│   │       ├── opus_decoder.c
│   │       ├── opus_encoder.c
│   │       ├── opus_multistream.c
│   │       ├── opus_multistream_decoder.c
│   │       ├── opus_multistream_encoder.c
│   │       ├── opus_private.h
│   │       ├── repacketizer.c
│   │       ├── repacketizer_demo.c
│   │       └── tansig_table.h
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.Player/
│   ├── AudioPlayer.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.Player.csproj
├── TelegramClient.Player.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.Player.WP8.csproj
├── TelegramClient.ScheduledTaskAgent/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ScheduledAgent.cs
│   └── TelegramClient.ScheduledTaskAgent.csproj
├── TelegramClient.ScheduledTaskAgent.WP8/
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── TelegramClient.ScheduledTaskAgent.WP8.csproj
├── TelegramClient.Tasks/
│   ├── BackgroundDifferenceLoader.cs
│   ├── InteractiveNotificationsBackgroundTask.cs
│   ├── MessageSchedulerBackgroundTask.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── PushNotificationsBackgroundTask.cs
│   ├── PushUtils.cs
│   ├── Resources/
│   │   ├── de/
│   │   │   └── Resources.resw
│   │   ├── en/
│   │   │   └── Resources.resw
│   │   ├── es/
│   │   │   └── Resources.resw
│   │   ├── it/
│   │   │   └── Resources.resw
│   │   ├── nl/
│   │   │   └── Resources.resw
│   │   ├── pt/
│   │   │   └── Resources.resw
│   │   └── ru/
│   │       └── Resources.resw
│   └── TelegramClient.Tasks.csproj
├── TelegramClient.WP8/
│   ├── Behaviors/
│   │   └── InfiniteScrollingBehavior.cs
│   ├── Controls/
│   │   └── StartView/
│   │       ├── DragEventArgs.cs
│   │       ├── FlickEventArgs.cs
│   │       ├── GestureEventArgs.cs
│   │       ├── GestureHelper.cs
│   │       ├── InputBaseArgs.cs
│   │       ├── InputCompletedArgs.cs
│   │       ├── InputDeltaArgs.cs
│   │       ├── ManipulationGestureHelper.cs
│   │       ├── SafeRaise.cs
│   │       ├── StartView.cs
│   │       ├── StartViewItem.cs
│   │       ├── StartViewPanel.cs
│   │       └── TransformAnimator.cs
│   ├── LongListSelectorEx.cs
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── TelegramClient.WP8.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── LongListSelector.xaml
│   │   │   └── ToggleSwitch.xaml
│   │   └── Generic.xaml
│   ├── ViewModels/
│   │   ├── Contacts/
│   │   │   └── ContactsViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsViewModel.Audio.cs
│   │   │   ├── DialogsViewModel.cs
│   │   │   └── SecretDialogDetailsViewModel.Audio.cs
│   │   └── Media/
│   │       └── MultiImageEditorViewModel.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── StartupView.xaml
│   │   │   └── StartupView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ContactsView.xaml
│   │   │   └── ContactsView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── AudioRecorderControl.xaml
│   │   │   └── AudioRecorderControl.xaml.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsView.xaml
│   │   │   ├── DialogDetailsView.xaml.cs
│   │   │   ├── DialogsView.xaml
│   │   │   ├── DialogsView.xaml.cs
│   │   │   ├── SecretDialogDetailsView.xaml
│   │   │   └── SecretDialogDetailsView.xaml.cs
│   │   └── Media/
│   │       ├── FilesView.xaml
│   │       ├── FilesView.xaml.cs
│   │       ├── LinksView.xaml
│   │       ├── LinksView.xaml.cs
│   │       ├── MediaView.xaml
│   │       ├── MediaView.xaml.cs
│   │       ├── MultiImageEditorView.xaml
│   │       └── MultiImageEditorView.xaml.cs
│   ├── app.config
│   └── packages.config
├── TelegramClient.WP81/
│   ├── BackgroundProcess.cs
│   ├── Behaviors/
│   │   ├── FocusNextElementOnEnterBehavior.cs
│   │   └── InfiniteScrollingBehavior.cs
│   ├── BugsenseWrapper.cs
│   ├── Controls/
│   │   ├── GestureListener/
│   │   │   ├── GestureHelperEventArgs.cs
│   │   │   ├── GestureListener.cs
│   │   │   ├── GestureListenerStatic.cs
│   │   │   ├── GestureService.cs
│   │   │   ├── MathHelpers.cs
│   │   │   └── SafeRaise.cs
│   │   └── StartView/
│   │       ├── DragEventArgs.cs
│   │       ├── FlickEventArgs.cs
│   │       ├── GestureEventArgs.cs
│   │       ├── GestureHelper.cs
│   │       ├── InputBaseArgs.cs
│   │       ├── InputCompletedArgs.cs
│   │       ├── InputDeltaArgs.cs
│   │       ├── ManipulationGestureHelper.cs
│   │       ├── SafeRaise.cs
│   │       ├── StartView.cs
│   │       ├── StartViewItem.cs
│   │       ├── StartViewPanel.cs
│   │       └── TransformAnimator.cs
│   ├── Converters/
│   │   ├── ChannelParticipantsCountConverter.cs
│   │   ├── SecureFilePreviewConverter.cs
│   │   ├── ShippingOptionToStringConverter.cs
│   │   └── TTLMediaToVisibilityConverter.cs
│   ├── FFMpegBuild.txt
│   ├── Helpers/
│   │   ├── TemplateSelectors/
│   │   │   └── ImageViewerTemplateSelector.cs
│   │   └── WeakEventListener.cs
│   ├── Package.appxmanifest
│   ├── Properties/
│   │   ├── AppManifest.xml
│   │   ├── AssemblyInfo.cs
│   │   ├── WMAppManifest.Private.xml
│   │   ├── WMAppManifest.Public.xml
│   │   └── WMAppManifest.xml
│   ├── PushNotificationsBackgroundTask.cs
│   ├── Services/
│   │   ├── Cache.cs
│   │   ├── IProxyChecker.cs
│   │   ├── IVoIPService.cs
│   │   ├── IWindowsPhoneStoreUpdateService.cs
│   │   ├── ProxyChecker.cs
│   │   ├── VoIPService.cs
│   │   ├── WNSPushService.cs
│   │   └── WindowsPhoneStoreUpdateService.cs
│   ├── TelegramClient.WP81.csproj
│   ├── Themes/
│   │   ├── Default/
│   │   │   ├── ToggleSwitch.xaml
│   │   │   ├── W10M.xaml
│   │   │   └── W10MCommon.xaml
│   │   └── SharedResourceDictionary.cs
│   ├── Utils/
│   │   ├── Passport.cs
│   │   ├── Password.cs
│   │   └── SRP.cs
│   ├── ViewModels/
│   │   ├── Additional/
│   │   │   ├── BioViewModel.cs
│   │   │   ├── CallsPrivacyViewModel.cs
│   │   │   ├── CallsSecurityViewModel.cs
│   │   │   ├── CameraViewModel.cs
│   │   │   ├── ChooseGeoLivePeriodViewModel.cs
│   │   │   ├── ChooseVideoQualityViewModel.cs
│   │   │   ├── ContactsSecurityViewModel.cs
│   │   │   ├── LoggedInViewModel.cs
│   │   │   ├── PassportSettingsViewModel.cs
│   │   │   ├── PhotoPickerViewModel.cs
│   │   │   ├── ProxyListViewModel.cs
│   │   │   └── ProxyViewModel.cs
│   │   ├── Calls/
│   │   │   ├── CallViewModel.cs
│   │   │   └── CallsViewModel.cs
│   │   ├── Chats/
│   │   │   └── GroupStickersViewModel.cs
│   │   ├── Contacts/
│   │   │   └── ShareContactDetailsViewModel.cs
│   │   ├── Dialogs/
│   │   │   ├── DialogDetailsViewModel.Mentions.cs
│   │   │   ├── EmojiHintsViewModel.cs
│   │   │   ├── LiveLocationBadgeViewModel.cs
│   │   │   └── PlayerViewModel.cs
│   │   ├── Feed/
│   │   │   └── FeedViewModel.cs
│   │   ├── Media/
│   │   │   └── EditVideoViewModel.cs
│   │   ├── Passport/
│   │   │   ├── EmailCodeViewModel.cs
│   │   │   ├── EmailViewModel.cs
│   │   │   ├── EnterPasswordViewModel.cs
│   │   │   ├── PassportViewModel.cs
│   │   │   ├── PasswordIntroViewModel.cs
│   │   │   ├── PersonalDetailsViewModel.cs
│   │   │   ├── PhoneNumberCodeViewModel.cs
│   │   │   ├── PhoneNumberViewModel.cs
│   │   │   └── ResidentialAddressViewModel.cs
│   │   ├── Payments/
│   │   │   ├── CardInfoViewModel.cs
│   │   │   ├── CheckoutViewModel.cs
│   │   │   ├── PasswordEmailViewModel.cs
│   │   │   ├── PaymentInfo.cs
│   │   │   ├── PaymentViewModelBase.cs
│   │   │   ├── ReceiptViewModel.cs
│   │   │   ├── SavedCardInfoViewModel.cs
│   │   │   ├── ShippingInfoViewModel.cs
│   │   │   ├── ShippingMethodViewModel.cs
│   │   │   ├── Stripe/
│   │   │   │   ├── Card.cs
│   │   │   │   ├── CardUtils.cs
│   │   │   │   ├── DateUtils.cs
│   │   │   │   ├── JSON/
│   │   │   │   │   └── Response.cs
│   │   │   │   ├── StripeClient.cs
│   │   │   │   ├── StripeNetworkUtils.cs
│   │   │   │   ├── StripeTextUtils.cs
│   │   │   │   └── StripeToken.cs
│   │   │   ├── WebCardInfoViewModel.cs
│   │   │   └── WebVerificationViewModel.cs
│   │   └── Search/
│   │       └── SearchSharedContactsViewModel.cs
│   ├── Views/
│   │   ├── Additional/
│   │   │   ├── BioView.xaml
│   │   │   ├── BioView.xaml.cs
│   │   │   ├── CallsPrivacyView.xaml
│   │   │   ├── CallsPrivacyView.xaml.cs
│   │   │   ├── CallsSecurityView.xaml
│   │   │   ├── CallsSecurityView.xaml.cs
│   │   │   ├── CameraView.xaml
│   │   │   ├── CameraView.xaml.cs
│   │   │   ├── ChooseGeoLivePeriodView.xaml
│   │   │   ├── ChooseGeoLivePeriodView.xaml.cs
│   │   │   ├── ChooseVideoQualityView.xaml
│   │   │   ├── ChooseVideoQualityView.xaml.cs
│   │   │   ├── ContactsSecurityView.xaml
│   │   │   ├── ContactsSecurityView.xaml.cs
│   │   │   ├── GifPlayerControl.xaml
│   │   │   ├── GifPlayerControl.xaml.cs
│   │   │   ├── LoggedInView.xaml
│   │   │   ├── LoggedInView.xaml.cs
│   │   │   ├── PassportSettingsView.xaml
│   │   │   ├── PassportSettingsView.xaml.cs
│   │   │   ├── PhotoPickerView.xaml
│   │   │   ├── PhotoPickerView.xaml.cs
│   │   │   ├── ProxyListView.xaml
│   │   │   ├── ProxyListView.xaml.cs
│   │   │   ├── ProxyView.xaml
│   │   │   ├── ProxyView.xaml.cs
│   │   │   ├── StartupView.xaml
│   │   │   └── StartupView.xaml.cs
│   │   ├── Calls/
│   │   │   ├── CallDebugControl.xaml
│   │   │   ├── CallDebugControl.xaml.cs
│   │   │   ├── CallRatingControl.xaml
│   │   │   ├── CallRatingControl.xaml.cs
│   │   │   ├── CallView.xaml
│   │   │   ├── CallView.xaml.cs
│   │   │   ├── CallsView.xaml
│   │   │   ├── CallsView.xaml.cs
│   │   │   ├── ReturnToCallControl.xaml
│   │   │   ├── ReturnToCallControl.xaml.cs
│   │   │   ├── SignalBarsControl.xaml
│   │   │   └── SignalBarsControl.xaml.cs
│   │   ├── Chats/
│   │   │   ├── GroupStickersView.xaml
│   │   │   └── GroupStickersView.xaml.cs
│   │   ├── Contacts/
│   │   │   ├── ShareContactDetailsView.xaml
│   │   │   └── ShareContactDetailsView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── CameraControl.xaml
│   │   │   ├── CameraControl.xaml.cs
│   │   │   ├── CardTextBox.cs
│   │   │   ├── CropControl.xaml
│   │   │   ├── CropControl.xaml.cs
│   │   │   ├── DateTextBox.cs
│   │   │   ├── DecryptedMessageControl.xaml
│   │   │   ├── DecryptedMessageControl.xaml.cs
│   │   │   ├── DialogControl.xaml
│   │   │   ├── DialogControl.xaml.cs
│   │   │   ├── GroupedMessageControl.xaml
│   │   │   ├── GroupedMessageControl.xaml.cs
│   │   │   ├── GroupedMessages.cs
│   │   │   ├── InputBox.xaml
│   │   │   ├── InputBox.xaml.cs
│   │   │   ├── LabeledPasswordBox.xaml
│   │   │   ├── LabeledPasswordBox.xaml.cs
│   │   │   ├── LabeledTextBox.xaml
│   │   │   ├── LabeledTextBox.xaml.cs
│   │   │   ├── LiveLocationIcon.xaml
│   │   │   ├── LiveLocationIcon.xaml.cs
│   │   │   ├── LiveLocationProgress.xaml
│   │   │   ├── LiveLocationProgress.xaml.cs
│   │   │   ├── LiveLocationsControl.xaml
│   │   │   ├── LiveLocationsControl.xaml.cs
│   │   │   ├── MediaPhotoControl.xaml
│   │   │   ├── MediaPhotoControl.xaml.cs
│   │   │   ├── MediaVideoControl.xaml
│   │   │   ├── MediaVideoControl.xaml.cs
│   │   │   ├── MessageControl.xaml
│   │   │   ├── MessageControl.xaml.cs
│   │   │   ├── OpacityMaskBorder.xaml
│   │   │   ├── OpacityMaskBorder.xaml.cs
│   │   │   ├── OpenPhotoPicker.xaml
│   │   │   ├── OpenPhotoPicker.xaml.cs
│   │   │   ├── PhotoControl.xaml
│   │   │   ├── PhotoControl.xaml.cs
│   │   │   ├── Progress.xaml
│   │   │   ├── Progress.xaml.cs
│   │   │   ├── ProxyStatusControl.xaml
│   │   │   ├── ProxyStatusControl.xaml.cs
│   │   │   ├── RecordingControl.xaml
│   │   │   ├── RecordingControl.xaml.cs
│   │   │   ├── RibbonControl.xaml
│   │   │   ├── RibbonControl.xaml.cs
│   │   │   ├── RibbonImageControl.xaml
│   │   │   ├── RibbonImageControl.xaml.cs
│   │   │   ├── SelectionControl.xaml
│   │   │   ├── SelectionControl.xaml.cs
│   │   │   ├── ShareMessagePicker.xaml
│   │   │   ├── ShareMessagePicker.xaml.cs
│   │   │   ├── StatusControl.xaml
│   │   │   ├── StatusControl.xaml.cs
│   │   │   ├── TelegramAppBarButton.xaml
│   │   │   ├── TelegramAppBarButton.xaml.cs
│   │   │   ├── TelegramApplicationBar.xaml
│   │   │   ├── TelegramApplicationBar.xaml.cs
│   │   │   ├── TelegramDatePickerPage.xaml
│   │   │   ├── TelegramDatePickerPage.xaml.cs
│   │   │   ├── TelegramPopup.cs
│   │   │   ├── TextingControl.xaml
│   │   │   ├── TextingControl.xaml.cs
│   │   │   ├── TypingControl.xaml
│   │   │   ├── TypingControl.xaml.cs
│   │   │   ├── UpdateAppControl.xaml
│   │   │   ├── UpdateAppControl.xaml.cs
│   │   │   ├── UploadingControl.xaml
│   │   │   ├── UploadingControl.xaml.cs
│   │   │   ├── VideoTimelineControl.xaml
│   │   │   ├── VideoTimelineControl.xaml.cs
│   │   │   └── WaveformSlider.cs
│   │   ├── Dialogs/
│   │   │   ├── DocumentTileControl.xaml
│   │   │   ├── DocumentTileControl.xaml.cs
│   │   │   ├── EmojiHintsView.xaml
│   │   │   ├── EmojiHintsView.xaml.cs
│   │   │   ├── LiveLocationBadgeView.xaml
│   │   │   ├── LiveLocationBadgeView.xaml.cs
│   │   │   ├── PhotoTileControl.xaml
│   │   │   ├── PhotoTileControl.xaml.cs
│   │   │   ├── PlayerView.xaml
│   │   │   ├── PlayerView.xaml.cs
│   │   │   ├── SearchUserControl.xaml
│   │   │   ├── SearchUserControl.xaml.cs
│   │   │   ├── UnreadCounter.xaml
│   │   │   └── UnreadCounter.xaml.cs
│   │   ├── Feed/
│   │   │   ├── FeedView.xaml
│   │   │   └── FeedView.xaml.cs
│   │   ├── MainPage.xaml
│   │   ├── MainPage.xaml.cs
│   │   ├── Media/
│   │   │   ├── ColorPicker.xaml
│   │   │   ├── ColorPicker.xaml.cs
│   │   │   ├── EditVideoView.xaml
│   │   │   ├── EditVideoView.xaml.cs
│   │   │   ├── ExtendedImageEditor.xaml
│   │   │   ├── ExtendedImageEditor.xaml.cs
│   │   │   ├── MapUserTileControl.xaml
│   │   │   ├── MapUserTileControl.xaml.cs
│   │   │   ├── PhotoFace.cs
│   │   │   ├── StaticMapControl.xaml
│   │   │   ├── StaticMapControl.xaml.cs
│   │   │   ├── Sticker.xaml
│   │   │   ├── Sticker.xaml.cs
│   │   │   ├── StickerPosition.cs
│   │   │   ├── StickersControl.xaml
│   │   │   ├── StickersControl.xaml.cs
│   │   │   ├── TextLabel.xaml
│   │   │   └── TextLabel.xaml.cs
│   │   ├── Passport/
│   │   │   ├── EmailCodeView.xaml
│   │   │   ├── EmailCodeView.xaml.cs
│   │   │   ├── EmailView.xaml
│   │   │   ├── EmailView.xaml.cs
│   │   │   ├── EnterPasswordView.xaml
│   │   │   ├── EnterPasswordView.xaml.cs
│   │   │   ├── PassportView.xaml
│   │   │   ├── PassportView.xaml.cs
│   │   │   ├── PasswordIntroView.xaml
│   │   │   ├── PasswordIntroView.xaml.cs
│   │   │   ├── PersonalDetailsView.xaml
│   │   │   ├── PersonalDetailsView.xaml.cs
│   │   │   ├── PhoneNumberCodeView.xaml
│   │   │   ├── PhoneNumberCodeView.xaml.cs
│   │   │   ├── PhoneNumberView.xaml
│   │   │   ├── PhoneNumberView.xaml.cs
│   │   │   ├── ResidentialAddressView.xaml
│   │   │   └── ResidentialAddressView.xaml.cs
│   │   ├── Payments/
│   │   │   ├── CardInfoView.xaml
│   │   │   ├── CardInfoView.xaml.cs
│   │   │   ├── CheckoutView.xaml
│   │   │   ├── CheckoutView.xaml.cs
│   │   │   ├── PasswordEmailView.xaml
│   │   │   ├── PasswordEmailView.xaml.cs
│   │   │   ├── SavedCardInfoView.xaml
│   │   │   ├── SavedCardInfoView.xaml.cs
│   │   │   ├── ShippingInfoView.xaml
│   │   │   ├── ShippingInfoView.xaml.cs
│   │   │   ├── ShippingMethodView.xaml
│   │   │   ├── ShippingMethodView.xaml.cs
│   │   │   ├── WebCardInfoView.xaml
│   │   │   ├── WebCardInfoView.xaml.cs
│   │   │   ├── WebVerificationView.xaml
│   │   │   └── WebVerificationView.xaml.cs
│   │   └── Search/
│   │       ├── SearchSharedContactsView.xaml
│   │       └── SearchSharedContactsView.xaml.cs
│   ├── app.config
│   └── packages.config
├── TelegramClient.WP81.sln
├── TelegramClient.WebP/
│   ├── ImageUtils.cpp
│   ├── ImageUtils.h
│   ├── TelegramClient.WebP.cpp
│   ├── TelegramClient.WebP.h
│   ├── TelegramClient.WebP.vcxproj
│   ├── TelegramClient.WebP.vcxproj.filters
│   ├── pch.cpp
│   └── pch.h
├── TelegramClient.sln
├── VoipBackendServerHost/
│   ├── Package.appxmanifest
│   ├── VoipBackendServerHost.vcxproj
│   ├── VoipBackendServerHost.vcxproj.filters
│   ├── app.cpp
│   ├── app.h
│   ├── pch.cpp
│   └── pch.h
├── ffmpeg/
│   └── Build/
│       └── WindowsPhone8.1/
│           ├── ARM/
│           │   ├── bin/
│           │   │   ├── avcodec.lib
│           │   │   ├── avdevice.lib
│           │   │   ├── avfilter.lib
│           │   │   ├── avformat.lib
│           │   │   ├── avutil.lib
│           │   │   ├── swresample.lib
│           │   │   └── swscale.lib
│           │   ├── include/
│           │   │   ├── libavcodec/
│           │   │   │   ├── avcodec.h
│           │   │   │   ├── avdct.h
│           │   │   │   ├── avfft.h
│           │   │   │   ├── d3d11va.h
│           │   │   │   ├── dirac.h
│           │   │   │   ├── dv_profile.h
│           │   │   │   ├── dxva2.h
│           │   │   │   ├── qsv.h
│           │   │   │   ├── vaapi.h
│           │   │   │   ├── vda.h
│           │   │   │   ├── vdpau.h
│           │   │   │   ├── version.h
│           │   │   │   ├── videotoolbox.h
│           │   │   │   ├── vorbis_parser.h
│           │   │   │   └── xvmc.h
│           │   │   ├── libavdevice/
│           │   │   │   ├── avdevice.h
│           │   │   │   └── version.h
│           │   │   ├── libavfilter/
│           │   │   │   ├── avfilter.h
│           │   │   │   ├── avfiltergraph.h
│           │   │   │   ├── buffersink.h
│           │   │   │   ├── buffersrc.h
│           │   │   │   └── version.h
│           │   │   ├── libavformat/
│           │   │   │   ├── avformat.h
│           │   │   │   ├── avio.h
│           │   │   │   └── version.h
│           │   │   ├── libavutil/
│           │   │   │   ├── adler32.h
│           │   │   │   ├── aes.h
│           │   │   │   ├── aes_ctr.h
│           │   │   │   ├── attributes.h
│           │   │   │   ├── audio_fifo.h
│           │   │   │   ├── avassert.h
│           │   │   │   ├── avconfig.h
│           │   │   │   ├── avstring.h
│           │   │   │   ├── avutil.h
│           │   │   │   ├── base64.h
│           │   │   │   ├── blowfish.h
│           │   │   │   ├── bprint.h
│           │   │   │   ├── bswap.h
│           │   │   │   ├── buffer.h
│           │   │   │   ├── camellia.h
│           │   │   │   ├── cast5.h
│           │   │   │   ├── channel_layout.h
│           │   │   │   ├── common.h
│           │   │   │   ├── cpu.h
│           │   │   │   ├── crc.h
│           │   │   │   ├── des.h
│           │   │   │   ├── dict.h
│           │   │   │   ├── display.h
│           │   │   │   ├── downmix_info.h
│           │   │   │   ├── error.h
│           │   │   │   ├── eval.h
│           │   │   │   ├── ffversion.h
│           │   │   │   ├── fifo.h
│           │   │   │   ├── file.h
│           │   │   │   ├── frame.h
│           │   │   │   ├── hash.h
│           │   │   │   ├── hmac.h
│           │   │   │   ├── imgutils.h
│           │   │   │   ├── intfloat.h
│           │   │   │   ├── intreadwrite.h
│           │   │   │   ├── lfg.h
│           │   │   │   ├── log.h
│           │   │   │   ├── lzo.h
│           │   │   │   ├── macros.h
│           │   │   │   ├── mathematics.h
│           │   │   │   ├── md5.h
│           │   │   │   ├── mem.h
│           │   │   │   ├── motion_vector.h
│           │   │   │   ├── murmur3.h
│           │   │   │   ├── opt.h
│           │   │   │   ├── parseutils.h
│           │   │   │   ├── pixdesc.h
│           │   │   │   ├── pixelutils.h
│           │   │   │   ├── pixfmt.h
│           │   │   │   ├── random_seed.h
│           │   │   │   ├── rational.h
│           │   │   │   ├── rc4.h
│           │   │   │   ├── replaygain.h
│           │   │   │   ├── ripemd.h
│           │   │   │   ├── samplefmt.h
│           │   │   │   ├── sha.h
│           │   │   │   ├── sha512.h
│           │   │   │   ├── stereo3d.h
│           │   │   │   ├── tea.h
│           │   │   │   ├── threadmessage.h
│           │   │   │   ├── time.h
│           │   │   │   ├── timecode.h
│           │   │   │   ├── timestamp.h
│           │   │   │   ├── tree.h
│           │   │   │   ├── twofish.h
│           │   │   │   ├── version.h
│           │   │   │   └── xtea.h
│           │   │   ├── libswresample/
│           │   │   │   ├── swresample.h
│           │   │   │   └── version.h
│           │   │   └── libswscale/
│           │   │       ├── swscale.h
│           │   │       └── version.h
│           │   └── lib/
│           │       ├── avcodec-57.def
│           │       ├── avdevice-57.def
│           │       ├── avfilter-6.def
│           │       ├── avformat-57.def
│           │       ├── avutil-55.def
│           │       ├── pkgconfig/
│           │       │   ├── libavcodec.pc
│           │       │   ├── libavdevice.pc
│           │       │   ├── libavfilter.pc
│           │       │   ├── libavformat.pc
│           │       │   ├── libavutil.pc
│           │       │   ├── libswresample.pc
│           │       │   └── libswscale.pc
│           │       ├── swresample-2.def
│           │       └── swscale-4.def
│           ├── bin/
│           │   ├── avcodec.lib
│           │   ├── avformat.lib
│           │   ├── avutil.lib
│           │   ├── swresample.lib
│           │   └── swscale.lib
│           └── bin2/
│               ├── avcodec.lib
│               ├── avdevice.lib
│               ├── avfilter.lib
│               ├── avformat.lib
│               ├── avutil.lib
│               ├── swresample.lib
│               └── swscale.lib
├── libtgnet/
│   ├── BufferOutputStream.cpp
│   ├── BufferOutputStream.h
│   ├── ConnectionSocket.cpp
│   ├── ConnectionSocket.h
│   ├── ConnectionSocketWrapper.cpp
│   ├── ConnectionSocketWrapper.h
│   ├── MicrosoftCryptoImpl.cpp
│   ├── MicrosoftCryptoImpl.h
│   ├── libtgnet.vcxproj
│   ├── libtgnet.vcxproj.filters
│   ├── pch.cpp
│   └── pch.h
├── libtgvoip-public/
│   ├── BlockingQueue.cpp
│   ├── BlockingQueue.h
│   ├── BufferInputStream.cpp
│   ├── BufferInputStream.h
│   ├── BufferOutputStream.cpp
│   ├── BufferOutputStream.h
│   ├── BufferPool.cpp
│   ├── BufferPool.h
│   ├── Buffers.cpp
│   ├── Buffers.h
│   ├── CongestionControl.cpp
│   ├── CongestionControl.h
│   ├── EchoCanceller.cpp
│   ├── EchoCanceller.h
│   ├── JitterBuffer.cpp
│   ├── JitterBuffer.h
│   ├── MediaStreamItf.cpp
│   ├── MediaStreamItf.h
│   ├── MessageThread.cpp
│   ├── MessageThread.h
│   ├── NetworkSocket.cpp
│   ├── NetworkSocket.h
│   ├── OpusDecoder.cpp
│   ├── OpusDecoder.h
│   ├── OpusEncoder.cpp
│   ├── OpusEncoder.h
│   ├── PacketReassembler.cpp
│   ├── PacketReassembler.h
│   ├── PrivateDefines.h
│   ├── VoIPController.cpp
│   ├── VoIPController.h
│   ├── VoIPGroupController.cpp
│   ├── VoIPServerConfig.cpp
│   ├── VoIPServerConfig.h
│   ├── audio/
│   │   ├── AudioIO.cpp
│   │   ├── AudioIO.h
│   │   ├── AudioInput.cpp
│   │   ├── AudioInput.h
│   │   ├── AudioOutput.cpp
│   │   ├── AudioOutput.h
│   │   ├── Resampler.cpp
│   │   └── Resampler.h
│   ├── libtgvoip.WP81.vcxproj
│   ├── libtgvoip.WP81.vcxproj.filters
│   ├── logging.cpp
│   ├── logging.h
│   ├── os/
│   │   └── windows/
│   │       ├── AudioInputWASAPI.cpp
│   │       ├── AudioInputWASAPI.h
│   │       ├── AudioOutputWASAPI.cpp
│   │       ├── AudioOutputWASAPI.h
│   │       ├── CXWrapper.cpp
│   │       ├── CXWrapper.h
│   │       ├── NetworkSocketWinsock.cpp
│   │       ├── NetworkSocketWinsock.h
│   │       ├── WindowsSandboxUtils.cpp
│   │       └── WindowsSandboxUtils.h
│   ├── threading.h
│   ├── utils.h
│   └── webrtc_dsp/
│       └── webrtc/
│           ├── base/
│           │   ├── array_view.h
│           │   ├── atomicops.h
│           │   ├── basictypes.h
│           │   ├── checks.cc
│           │   ├── checks.h
│           │   ├── constructormagic.h
│           │   ├── safe_compare.h
│           │   ├── safe_conversions.h
│           │   ├── safe_conversions_impl.h
│           │   ├── sanitizer.h
│           │   ├── stringutils.cc
│           │   ├── stringutils.h
│           │   └── type_traits.h
│           ├── common_audio/
│           │   ├── audio_util.cc
│           │   ├── channel_buffer.cc
│           │   ├── channel_buffer.h
│           │   ├── fft4g.c
│           │   ├── fft4g.h
│           │   ├── include/
│           │   │   └── audio_util.h
│           │   ├── ring_buffer.c
│           │   ├── ring_buffer.h
│           │   ├── signal_processing/
│           │   │   ├── auto_corr_to_refl_coef.c
│           │   │   ├── auto_correlation.c
│           │   │   ├── complex_bit_reverse.c
│           │   │   ├── complex_fft.c
│           │   │   ├── complex_fft_tables.h
│           │   │   ├── copy_set_operations.c
│           │   │   ├── cross_correlation.c
│           │   │   ├── cross_correlation_neon.c
│           │   │   ├── division_operations.c
│           │   │   ├── dot_product_with_scale.c
│           │   │   ├── downsample_fast.c
│           │   │   ├── downsample_fast_neon.c
│           │   │   ├── energy.c
│           │   │   ├── filter_ar.c
│           │   │   ├── filter_ar_fast_q12.c
│           │   │   ├── filter_ma_fast_q12.c
│           │   │   ├── get_hanning_window.c
│           │   │   ├── get_scaling_square.c
│           │   │   ├── ilbc_specific_functions.c
│           │   │   ├── include/
│           │   │   │   ├── real_fft.h
│           │   │   │   ├── signal_processing_library.h
│           │   │   │   ├── spl_inl.h
│           │   │   │   ├── spl_inl_armv7.h
│           │   │   │   └── spl_inl_mips.h
│           │   │   ├── levinson_durbin.c
│           │   │   ├── lpc_to_refl_coef.c
│           │   │   ├── min_max_operations.c
│           │   │   ├── min_max_operations_neon.c
│           │   │   ├── randomization_functions.c
│           │   │   ├── real_fft.c
│           │   │   ├── refl_coef_to_lpc.c
│           │   │   ├── resample.c
│           │   │   ├── resample_48khz.c
│           │   │   ├── resample_by_2.c
│           │   │   ├── resample_by_2_internal.c
│           │   │   ├── resample_by_2_internal.h
│           │   │   ├── resample_fractional.c
│           │   │   ├── spl_init.c
│           │   │   ├── spl_inl.c
│           │   │   ├── spl_sqrt.c
│           │   │   ├── spl_sqrt_floor.c
│           │   │   ├── splitting_filter_impl.c
│           │   │   ├── sqrt_of_one_minus_x_squared.c
│           │   │   └── vector_scaling_operations.c
│           │   ├── sparse_fir_filter.cc
│           │   ├── sparse_fir_filter.h
│           │   ├── wav_file.cc
│           │   ├── wav_file.h
│           │   ├── wav_header.cc
│           │   └── wav_header.h
│           ├── modules/
│           │   └── audio_processing/
│           │       ├── aec/
│           │       │   ├── aec_common.h
│           │       │   ├── aec_core.cc
│           │       │   ├── aec_core.h
│           │       │   ├── aec_core_neon.cc
│           │       │   ├── aec_core_optimized_methods.h
│           │       │   ├── aec_core_sse2.cc
│           │       │   ├── aec_resampler.cc
│           │       │   ├── aec_resampler.h
│           │       │   ├── echo_cancellation.cc
│           │       │   └── echo_cancellation.h
│           │       ├── aecm/
│           │       │   ├── aecm_core.cc
│           │       │   ├── aecm_core.h
│           │       │   ├── aecm_core_c.cc
│           │       │   ├── aecm_core_neon.cc
│           │       │   ├── aecm_defines.h
│           │       │   ├── echo_control_mobile.cc
│           │       │   └── echo_control_mobile.h
│           │       ├── agc/
│           │       │   └── legacy/
│           │       │       ├── analog_agc.c
│           │       │       ├── analog_agc.h
│           │       │       ├── digital_agc.c
│           │       │       ├── digital_agc.h
│           │       │       └── gain_control.h
│           │       ├── logging/
│           │       │   ├── apm_data_dumper.cc
│           │       │   └── apm_data_dumper.h
│           │       ├── ns/
│           │       │   ├── defines.h
│           │       │   ├── noise_suppression.c
│           │       │   ├── noise_suppression.h
│           │       │   ├── noise_suppression_x.c
│           │       │   ├── noise_suppression_x.h
│           │       │   ├── ns_core.c
│           │       │   ├── ns_core.h
│           │       │   ├── nsx_core.c
│           │       │   ├── nsx_core.h
│           │       │   ├── nsx_core_c.c
│           │       │   ├── nsx_core_neon.c
│           │       │   ├── nsx_defines.h
│           │       │   └── windows_private.h
│           │       ├── splitting_filter.cc
│           │       ├── splitting_filter.h
│           │       ├── three_band_filter_bank.cc
│           │       ├── three_band_filter_bank.h
│           │       └── utility/
│           │           ├── block_mean_calculator.cc
│           │           ├── block_mean_calculator.h
│           │           ├── delay_estimator.cc
│           │           ├── delay_estimator.h
│           │           ├── delay_estimator_internal.h
│           │           ├── delay_estimator_wrapper.cc
│           │           ├── delay_estimator_wrapper.h
│           │           ├── ooura_fft.cc
│           │           ├── ooura_fft.h
│           │           ├── ooura_fft_neon.cc
│           │           ├── ooura_fft_sse2.cc
│           │           ├── ooura_fft_tables_common.h
│           │           └── ooura_fft_tables_neon_sse2.h
│           ├── system_wrappers/
│           │   ├── include/
│           │   │   ├── asm_defines.h
│           │   │   ├── compile_assert_c.h
│           │   │   ├── cpu_features_wrapper.h
│           │   │   └── metrics.h
│           │   └── source/
│           │       └── cpu_features.cc
│           └── typedefs.h
├── libtgvoipProxyStub/
│   ├── dlldata.c
│   ├── libtgvoip.h
│   ├── libtgvoipProxyStub.def
│   ├── libtgvoipProxyStub.vcxproj
│   ├── libtgvoip_i.c
│   └── libtgvoip_p.c
└── opencv/
    └── install/
        └── WP/
            └── 8.0/
                └── ARM/
                    ├── ARM/
                    │   └── vc11/
                    │       └── lib/
                    │           ├── OpenCVConfig.cmake
                    │           ├── OpenCVModules-debug.cmake
                    │           ├── OpenCVModules-release.cmake
                    │           ├── OpenCVModules.cmake
                    │           ├── opencv_calib3d300.lib
                    │           ├── opencv_calib3d300d.lib
                    │           ├── opencv_core300.lib
                    │           ├── opencv_core300d.lib
                    │           ├── opencv_features2d300.lib
                    │           ├── opencv_features2d300d.lib
                    │           ├── opencv_flann300.lib
                    │           ├── opencv_flann300d.lib
                    │           ├── opencv_hal300.lib
                    │           ├── opencv_hal300d.lib
                    │           ├── opencv_imgcodecs300.lib
                    │           ├── opencv_imgcodecs300d.lib
                    │           ├── opencv_imgproc300.lib
                    │           ├── opencv_imgproc300d.lib
                    │           ├── opencv_ml300.lib
                    │           ├── opencv_ml300d.lib
                    │           ├── opencv_objdetect300.lib
                    │           ├── opencv_objdetect300d.lib
                    │           ├── opencv_photo300.lib
                    │           ├── opencv_photo300d.lib
                    │           ├── opencv_shape300.lib
                    │           ├── opencv_shape300d.lib
                    │           ├── opencv_stitching300.lib
                    │           ├── opencv_stitching300d.lib
                    │           ├── opencv_video300.lib
                    │           ├── opencv_video300d.lib
                    │           ├── opencv_videoio300.lib
                    │           ├── opencv_videoio300d.lib
                    │           ├── opencv_videostab300.lib
                    │           └── opencv_videostab300d.lib
                    ├── LICENSE
                    ├── OpenCVConfig-version.cmake
                    ├── OpenCVConfig.cmake
                    ├── etc/
                    │   ├── haarcascades/
                    │   │   ├── haarcascade_eye.xml
                    │   │   ├── haarcascade_eye_tree_eyeglasses.xml
                    │   │   ├── haarcascade_frontalcatface.xml
                    │   │   ├── haarcascade_frontalcatface_extended.xml
                    │   │   ├── haarcascade_frontalface_alt.xml
                    │   │   ├── haarcascade_frontalface_alt2.xml
                    │   │   ├── haarcascade_frontalface_alt_tree.xml
                    │   │   ├── haarcascade_frontalface_default.xml
                    │   │   ├── haarcascade_fullbody.xml
                    │   │   ├── haarcascade_lefteye_2splits.xml
                    │   │   ├── haarcascade_licence_plate_rus_16stages.xml
                    │   │   ├── haarcascade_lowerbody.xml
                    │   │   ├── haarcascade_profileface.xml
                    │   │   ├── haarcascade_righteye_2splits.xml
                    │   │   ├── haarcascade_russian_plate_number.xml
                    │   │   ├── haarcascade_smile.xml
                    │   │   └── haarcascade_upperbody.xml
                    │   └── lbpcascades/
                    │       ├── lbpcascade_frontalcatface.xml
                    │       ├── lbpcascade_frontalface.xml
                    │       ├── lbpcascade_profileface.xml
                    │       └── lbpcascade_silverware.xml
                    └── include/
                        ├── opencv/
                        │   ├── cv.h
                        │   ├── cv.hpp
                        │   ├── cvaux.h
                        │   ├── cvaux.hpp
                        │   ├── cvwimage.h
                        │   ├── cxcore.h
                        │   ├── cxcore.hpp
                        │   ├── cxeigen.hpp
                        │   ├── cxmisc.h
                        │   ├── highgui.h
                        │   └── ml.h
                        └── opencv2/
                            ├── calib3d/
                            │   ├── calib3d.hpp
                            │   └── calib3d_c.h
                            ├── calib3d.hpp
                            ├── core/
                            │   ├── affine.hpp
                            │   ├── base.hpp
                            │   ├── bufferpool.hpp
                            │   ├── core.hpp
                            │   ├── core_c.h
                            │   ├── cuda/
                            │   │   ├── block.hpp
                            │   │   ├── border_interpolate.hpp
                            │   │   ├── color.hpp
                            │   │   ├── common.hpp
                            │   │   ├── datamov_utils.hpp
                            │   │   ├── detail/
                            │   │   │   ├── color_detail.hpp
                            │   │   │   ├── reduce.hpp
                            │   │   │   ├── reduce_key_val.hpp
                            │   │   │   ├── transform_detail.hpp
                            │   │   │   ├── type_traits_detail.hpp
                            │   │   │   └── vec_distance_detail.hpp
                            │   │   ├── dynamic_smem.hpp
                            │   │   ├── emulation.hpp
                            │   │   ├── filters.hpp
                            │   │   ├── funcattrib.hpp
                            │   │   ├── functional.hpp
                            │   │   ├── limits.hpp
                            │   │   ├── reduce.hpp
                            │   │   ├── saturate_cast.hpp
                            │   │   ├── scan.hpp
                            │   │   ├── simd_functions.hpp
                            │   │   ├── transform.hpp
                            │   │   ├── type_traits.hpp
                            │   │   ├── utility.hpp
                            │   │   ├── vec_distance.hpp
                            │   │   ├── vec_math.hpp
                            │   │   ├── vec_traits.hpp
                            │   │   ├── warp.hpp
                            │   │   ├── warp_reduce.hpp
                            │   │   └── warp_shuffle.hpp
                            │   ├── cuda.hpp
                            │   ├── cuda.inl.hpp
                            │   ├── cuda_stream_accessor.hpp
                            │   ├── cuda_types.hpp
                            │   ├── cvdef.h
                            │   ├── cvstd.hpp
                            │   ├── cvstd.inl.hpp
                            │   ├── directx.hpp
                            │   ├── eigen.hpp
                            │   ├── ippasync.hpp
                            │   ├── mat.hpp
                            │   ├── mat.inl.hpp
                            │   ├── matx.hpp
                            │   ├── ocl.hpp
                            │   ├── ocl_genbase.hpp
                            │   ├── opengl.hpp
                            │   ├── operations.hpp
                            │   ├── optim.hpp
                            │   ├── persistence.hpp
                            │   ├── private.cuda.hpp
                            │   ├── private.hpp
                            │   ├── ptr.inl.hpp
                            │   ├── sse_utils.hpp
                            │   ├── traits.hpp
                            │   ├── types.hpp
                            │   ├── types_c.h
                            │   ├── utility.hpp
                            │   ├── version.hpp
                            │   └── wimage.hpp
                            ├── core.hpp
                            ├── cvconfig.h
                            ├── features2d/
                            │   └── features2d.hpp
                            ├── features2d.hpp
                            ├── flann/
                            │   ├── all_indices.h
                            │   ├── allocator.h
                            │   ├── any.h
                            │   ├── autotuned_index.h
                            │   ├── composite_index.h
                            │   ├── config.h
                            │   ├── defines.h
                            │   ├── dist.h
                            │   ├── dummy.h
                            │   ├── dynamic_bitset.h
                            │   ├── flann.hpp
                            │   ├── flann_base.hpp
                            │   ├── general.h
                            │   ├── ground_truth.h
                            │   ├── hdf5.h
                            │   ├── heap.h
                            │   ├── hierarchical_clustering_index.h
                            │   ├── index_testing.h
                            │   ├── kdtree_index.h
                            │   ├── kdtree_single_index.h
                            │   ├── kmeans_index.h
                            │   ├── linear_index.h
                            │   ├── logger.h
                            │   ├── lsh_index.h
                            │   ├── lsh_table.h
                            │   ├── matrix.h
                            │   ├── miniflann.hpp
                            │   ├── nn_index.h
                            │   ├── object_factory.h
                            │   ├── params.h
                            │   ├── random.h
                            │   ├── result_set.h
                            │   ├── sampling.h
                            │   ├── saving.h
                            │   ├── simplex_downhill.h
                            │   └── timer.h
                            ├── flann.hpp
                            ├── hal/
                            │   ├── defs.h
                            │   ├── intrin.hpp
                            │   ├── intrin_cpp.hpp
                            │   ├── intrin_neon.hpp
                            │   └── intrin_sse.hpp
                            ├── hal.hpp
                            ├── imgcodecs/
                            │   ├── imgcodecs.hpp
                            │   ├── imgcodecs_c.h
                            │   └── ios.h
                            ├── imgcodecs.hpp
                            ├── imgproc/
                            │   ├── imgproc.hpp
                            │   ├── imgproc_c.h
                            │   └── types_c.h
                            ├── imgproc.hpp
                            ├── ml/
                            │   └── ml.hpp
                            ├── ml.hpp
                            ├── objdetect/
                            │   ├── detection_based_tracker.hpp
                            │   ├── objdetect.hpp
                            │   └── objdetect_c.h
                            ├── objdetect.hpp
                            ├── opencv.hpp
                            ├── opencv_modules.hpp
                            ├── photo/
                            │   ├── cuda.hpp
                            │   ├── photo.hpp
                            │   └── photo_c.h
                            ├── photo.hpp
                            ├── shape/
                            │   ├── emdL1.hpp
                            │   ├── hist_cost.hpp
                            │   ├── shape.hpp
                            │   ├── shape_distance.hpp
                            │   └── shape_transformer.hpp
                            ├── shape.hpp
                            ├── stitching/
                            │   ├── detail/
                            │   │   ├── autocalib.hpp
                            │   │   ├── blenders.hpp
                            │   │   ├── camera.hpp
                            │   │   ├── exposure_compensate.hpp
                            │   │   ├── matchers.hpp
                            │   │   ├── motion_estimators.hpp
                            │   │   ├── seam_finders.hpp
                            │   │   ├── timelapsers.hpp
                            │   │   ├── util.hpp
                            │   │   ├── util_inl.hpp
                            │   │   ├── warpers.hpp
                            │   │   └── warpers_inl.hpp
                            │   └── warpers.hpp
                            ├── stitching.hpp
                            ├── video/
                            │   ├── background_segm.hpp
                            │   ├── tracking.hpp
                            │   ├── tracking_c.h
                            │   └── video.hpp
                            ├── video.hpp
                            ├── videoio/
                            │   ├── cap_ios.h
                            │   ├── videoio.hpp
                            │   └── videoio_c.h
                            ├── videoio.hpp
                            ├── videostab/
                            │   ├── deblurring.hpp
                            │   ├── fast_marching.hpp
                            │   ├── fast_marching_inl.hpp
                            │   ├── frame_source.hpp
                            │   ├── global_motion.hpp
                            │   ├── inpainting.hpp
                            │   ├── log.hpp
                            │   ├── motion_core.hpp
                            │   ├── motion_stabilizing.hpp
                            │   ├── optical_flow.hpp
                            │   ├── outlier_rejection.hpp
                            │   ├── ring_buffer.hpp
                            │   ├── stabilizer.hpp
                            │   └── wobble_suppression.hpp
                            └── videostab.hpp
Download .txt
Showing preview only (2,551K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (22381 symbols across 2069 files)

FILE: Agents/AgentHost.cs
  class AgentHost (line 18) | public static class AgentHost
    method OnAgentStarted (line 25) | internal static void OnAgentStarted()
    method AgentHost (line 39) | static AgentHost()
    method OnUnhandledException (line 62) | private static void OnUnhandledException(object sender, ApplicationUnh...

FILE: Agents/CallInProgressAgentImpl.cs
  class CallInProgressAgentImpl (line 30) | public class CallInProgressAgentImpl : VoipCallInProgressAgent
    method Log (line 36) | private void Log(string message, Action callback = null)
    method GetInitConnection (line 48) | private TLInitConnection GetInitConnection()
    method InitializeServiceAsync (line 78) | private void InitializeServiceAsync(System.Action callback)
    method CallInProgressAgentImpl (line 116) | public CallInProgressAgentImpl()
    method OnTimer (line 124) | private void OnTimer(object state)
    method OnFirstCallStarting (line 147) | protected override void OnFirstCallStarting()
    method OnCancel (line 160) | protected override void OnCancel()

FILE: Agents/ForegroundLifetimeAgentImpl.cs
  class ForegroundLifetimeAgentImpl (line 19) | public sealed class ForegroundLifetimeAgentImpl : VoipForegroundLifetime...
    method ForegroundLifetimeAgentImpl (line 21) | public ForegroundLifetimeAgentImpl()
    method OnLaunched (line 30) | protected override void OnLaunched()
    method OnCancel (line 38) | protected override void OnCancel()

FILE: Agents/MTProtoUpdater.cs
  class MTProtoUpdater (line 18) | internal class MTProtoUpdater : IMTProtoUpdater, IHandle<TLUpdateBase>
    method Log (line 24) | private static void Log(string message, Action callback = null)
    method GetInitConnection (line 36) | private TLInitConnection GetInitConnection()
    method Start (line 47) | public void Start(int pts, int date, int qts)
    method Stop (line 54) | public void Stop()
    method ReceivedCall (line 61) | public void ReceivedCall(long id, long accessHash)
    method DiscardCall (line 65) | public void DiscardCall(long id, long accessHash)
    method Handle (line 70) | public static void Handle(TLUpdateBase updateBase)
    method Handle (line 85) | void IHandle<TLUpdateBase>.Handle(TLUpdateBase message)

FILE: Agents/PushPayload.cs
  class Notification (line 13) | [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17613")]

FILE: Agents/PushUtils.cs
  class PushUtils2 (line 25) | public static class PushUtils2
    method AppendTile (line 111) | private static void AppendTile(XmlDocument toTile, XmlDocument fromTile)
    method UpdateTile (line 117) | private static void UpdateTile(string caption, string message)
    method UpdateBadge (line 149) | private static void UpdateBadge(int badgeNumber)
    method IsMuted (line 175) | private static bool IsMuted(Data data)
    method IsServiceNotification (line 180) | private static bool IsServiceNotification(Data data)
    method RemoveToastGroup (line 185) | private static void RemoveToastGroup(string groupname)
    method GetCaption (line 192) | private static string GetCaption(Data data)
    method GetSound (line 236) | private static string GetSound(Data data)
    method GetGroup (line 241) | private static string GetGroup(Data data)
    method GetTag (line 246) | private static string GetTag(Data data)
    method GetLaunch (line 251) | private static string GetLaunch(Data data)
    method GetMessage (line 271) | private static string GetMessage(Data data)
    method UpdateToastAndTiles (line 325) | public static void UpdateToastAndTiles(RootObject rootObject)
    method SetToastImage (line 355) | private static void SetToastImage(XmlDocument document, string imageSo...
    method SetImage (line 368) | private static void SetImage(XmlDocument document, string imageSource)
    method SetSound (line 374) | private static void SetSound(XmlDocument document, string soundSource)
    method SetLaunch (line 392) | private static void SetLaunch(RootObject rootObject, XmlDocument docum...
    method SetText (line 422) | private static void SetText(XmlDocument document, string caption, stri...
    method GetArguments (line 429) | private static string GetArguments(string peer, string peerId, bool ne...
    method GetArgumentsAndImageSource (line 451) | private static void GetArgumentsAndImageSource(RootObject rootObject, ...
    method SetActions (line 499) | private static void SetActions(XmlDocument document, string arguments)
    method AddToast (line 542) | public static void AddToast(RootObject rootObject, string caption, str...
    method GetRootObject (line 633) | public static T GetRootObject<T>(string payload) where T : class
    method IsFileExists (line 645) | private static async Task<bool> IsFileExists(string fileName)
    method GetImageSource (line 673) | private static string GetImageSource(Custom custom)
    method GetImageSource (line 696) | public static string GetImageSource(MTPeer mtpeer)
  class Photo (line 720) | public sealed class Photo
  class MTPeer (line 728) | public sealed class MTPeer
  class Custom (line 734) | public sealed class Custom
    method GetParams (line 757) | public IEnumerable<string> GetParams()
  class Data (line 766) | public sealed class Data
  class RootObject (line 783) | public sealed class RootObject

FILE: Agents/RegistrationHelper.cs
  class RegistrationHelper (line 14) | internal sealed class RegistrationHelper {

FILE: Agents/ScheduledAgentImpl.cs
  class ScheduledAgentImpl (line 34) | public class ScheduledAgentImpl : ScheduledTaskAgent
    method Log (line 42) | private static void Log(string message, Action callback = null)
    method ScheduledAgentImpl (line 53) | public ScheduledAgentImpl()
    method SetText (line 64) | private static void SetText(XmlDocument document, string caption, stri...
    method OnInvoke (line 71) | protected override void OnInvoke(ScheduledTask task)
    method OnCancel (line 218) | protected override void OnCancel()
    method GetInitConnection (line 226) | private TLInitConnection GetInitConnection()
    method OnIncomingCallDialogDismissed (line 238) | private void OnIncomingCallDialogDismissed(long callId, long callAcces...
    method ProcessLiveLocations (line 298) | private void ProcessLiveLocations()
    method Complete (line 337) | private void Complete()

FILE: Agents/VideoMediaStreamSource.cs
  class VideoMediaStreamSource (line 18) | public class VideoMediaStreamSource : MediaStreamSource, IDisposable
    class VideoSample (line 20) | public class VideoSample
      method VideoSample (line 22) | public VideoSample(Windows.Storage.Streams.IBuffer _buffer, UInt64 _...
    method VideoMediaStreamSource (line 48) | public VideoMediaStreamSource(Stream audioStream, int frameWidth, int ...
    method Dispose (line 58) | public void Dispose()
    method Shutdown (line 64) | public void Shutdown()
    method Dispose (line 87) | protected virtual void Dispose(bool disposing)
    method TransportController_VideoMessageReceived (line 99) | void TransportController_VideoMessageReceived(Windows.Storage.Streams....
    method SendSamples (line 115) | private void SendSamples()
    method PrepareVideo (line 145) | private void PrepareVideo()
    method PrepareAudio (line 162) | private void PrepareAudio()
    method OpenMediaAsync (line 166) | protected override void OpenMediaAsync()
    method GetSampleAsync (line 188) | protected override void GetSampleAsync(MediaStreamType mediaStreamType)
    method CloseMedia (line 203) | protected override void CloseMedia()
    method GetDiagnosticAsync (line 207) | protected override void GetDiagnosticAsync(MediaStreamSourceDiagnostic...
    method SwitchMediaStreamAsync (line 212) | protected override void SwitchMediaStreamAsync(MediaStreamDescription ...
    method SeekAsync (line 217) | protected override void SeekAsync(long seekToTime)

FILE: Agents/VideoRenderer.cs
  class VideoRenderer (line 23) | internal class VideoRenderer : IVideoRenderer
    method VideoRenderer (line 28) | internal VideoRenderer()
    method Start (line 38) | public void Start()
    method StartMediaStreamer (line 58) | private void StartMediaStreamer()
    method Stop (line 74) | public void Stop()

FILE: BackEnd/ApiLock.cpp
  type PhoneVoIPApp (line 10) | namespace PhoneVoIPApp
    type BackEnd (line 12) | namespace BackEnd

FILE: BackEnd/ApiLock.h
  function namespace (line 11) | namespace PhoneVoIPApp

FILE: BackEnd/BackEndAudio.h
  function namespace (line 19) | namespace PhoneVoIPApp

FILE: BackEnd/BackEndCapture.h
  function namespace (line 16) | namespace PhoneVoIPApp

FILE: BackEnd/BackEndNativeBuffer.h
  function namespace (line 16) | namespace PhoneVoIPApp
  function STDMETHODIMP (line 41) | STDMETHODIMP RuntimeClassInitialize(UINT totalSize)
  function STDMETHODIMP (line 50) | STDMETHODIMP RuntimeClassInitialize(BYTE* pBuffer, UINT totalSize, BOOL ...
  function STDMETHODIMP (line 59) | STDMETHODIMP Buffer( BYTE **value)
  function STDMETHODIMP (line 65) | STDMETHODIMP get_Capacity(UINT32 *value)
  function STDMETHODIMP (line 71) | STDMETHODIMP get_Length(UINT32 *value)
  function STDMETHODIMP (line 77) | STDMETHODIMP put_Length(UINT32 value)
  function Windows (line 87) | static Windows::Storage::Streams::IBuffer^ GetIBufferFromNativeBuffer(Mi...
  function BYTE (line 92) | static BYTE* GetBytesFromIBuffer(Windows::Storage::Streams::IBuffer^ buf...

FILE: BackEnd/BackEndTransport.h
  function namespace (line 11) | namespace PhoneVoIPApp

FILE: BackEnd/BackgroundTask.h
  function namespace (line 5) | namespace PhoneVoIPApp

FILE: BackEnd/CallController.cpp
  function int64 (line 221) | int64 CallController::GetPreferredRelayID()
  function Error (line 233) | Error CallController::GetLastError()
  function CallAudioRoute (line 605) | CallAudioRoute CallController::AvailableAudioRoutes::get()
  function CallAudioRoute (line 619) | CallAudioRoute CallController::AudioRoute::get()
  function int64 (line 690) | int64 CallController::OtherPartyId::get()
  function int64 (line 716) | int64 CallController::CallId::get()
  function int64 (line 723) | int64 CallController::CallAccessHash::get()
  function int64 (line 730) | int64 CallController::AcceptedCallId::get()

FILE: BackEnd/CallController.h
  function namespace (line 19) | namespace PhoneVoIPApp

FILE: BackEnd/Globals.cpp
  function HRESULT (line 23) | HRESULT __declspec(dllexport) MyGetActivationFactory(_In_ HSTRING activa...

FILE: BackEnd/Globals.h
  function namespace (line 14) | namespace PhoneVoIPApp

FILE: BackEnd/ICallControllerStatusListener.h
  function class (line 17) | class Endpoint sealed{
  function public (line 26) | public value struct EndpointStruct{
  function public (line 40) | public value struct ProxyStruct{
  function class (line 105) | class CameraLocation

FILE: BackEnd/IConfig.h
  function namespace (line 3) | namespace PhoneVoIPApp

FILE: BackEnd/IMTProtoUpdater.h
  function namespace (line 10) | namespace PhoneVoIPApp

FILE: BackEnd/IVideoRenderer.h
  function namespace (line 10) | namespace PhoneVoIPApp

FILE: BackEnd/Server.h
  function namespace (line 12) | namespace PhoneVoIPApp

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess.h
  type interface (line 50) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_COutOfProcess_C____ISer...
  function namespace (line 53) | namespace ABI {
  function namespace (line 94) | namespace ABI {
  function namespace (line 105) | namespace ABI {
  function namespace (line 146) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_COutOfProcess_C____IServerPublicNonVirtualsVtbl (line 171) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_COutOfProcess_C____IServer...
  function interface (line 207) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_COutOfProcess_C____IServerPubli...

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess_i.c
  type IID (line 50) | typedef struct _IID
  type IID (line 62) | typedef IID CLSID;

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess_p.c
  type PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_TYPE_FORMAT_STRING (line 55) | typedef struct _PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_TYPE_FORMAT_STRING
  type PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_PROC_FORMAT_STRING (line 61) | typedef struct _PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_PROC_FORMAT_STRING
  type PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_EXPR_FORMAT_STRING (line 67) | typedef struct _PhoneVoIPApp2EBackEnd2EOutOfProcess_MIDL_EXPR_FORMAT_STRING
  function _PhoneVoIPApp2EBackEnd2EOutOfProcess_IID_Lookup (line 306) | int __stdcall _PhoneVoIPApp2EBackEnd2EOutOfProcess_IID_Lookup( const IID...

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd.h
  type interface (line 50) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIMessageReceivedEventH...
  function namespace (line 53) | namespace ABI {
  type interface (line 68) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CICameraLocationChanged...
  function namespace (line 71) | namespace ABI {
  type interface (line 86) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIIncomingCallDialogDis...
  function namespace (line 89) | namespace ABI {
  type interface (line 104) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportP...
  function namespace (line 107) | namespace ABI {
  type interface (line 122) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportP...
  function namespace (line 125) | namespace ABI {
  type interface (line 140) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IEndpointPublicNon...
  function namespace (line 143) | namespace ABI {
  type interface (line 158) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CICallControllerStatusL...
  function namespace (line 161) | namespace ABI {
  type interface (line 176) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCapturePub...
  function namespace (line 179) | namespace ABI {
  type interface (line 194) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCapturePro...
  function namespace (line 197) | namespace ABI {
  type interface (line 212) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIConfig
  function namespace (line 215) | namespace ABI {
  type interface (line 230) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____ICallControllerPub...
  function namespace (line 233) | namespace ABI {
  type interface (line 248) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIVideoRenderer
  function namespace (line 251) | namespace ABI {
  type interface (line 266) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIMTProtoUpdater
  function namespace (line 269) | namespace ABI {
  type interface (line 284) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsPublicNonV...
  function namespace (line 287) | namespace ABI {
  type interface (line 302) | typedef interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsStatics
  function namespace (line 305) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyProtocol (line 346) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyProtocol __x_ABI_CPhon...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallState (line 356) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallState __x_ABI_CPhoneVoI...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CError (line 366) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CError __x_ABI_CPhoneVoIPApp...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CNetworkType (line 376) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CNetworkType __x_ABI_CPhoneV...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CDataSavingMode (line 386) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CDataSavingMode __x_ABI_CPho...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallStatus (line 396) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallStatus __x_ABI_CPhoneVo...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallAudioRoute (line 406) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallAudioRoute __x_ABI_CPho...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCameraLocation (line 416) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCameraLocation __x_ABI_CPho...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CMediaOperations (line 426) | typedef enum __x_ABI_CPhoneVoIPApp_CBackEnd_CMediaOperations __x_ABI_CPh...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CEndpointStruct (line 434) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CEndpointStruct __x_ABI_CP...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyStruct (line 438) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyStruct __x_ABI_CPhon...
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CConfig (line 442) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CConfig __x_ABI_CPhoneVoIP...
  function namespace (line 461) | namespace ABI {
  function namespace (line 470) | namespace ABI {
  function namespace (line 479) | namespace ABI {
  function namespace (line 488) | namespace ABI {
  function namespace (line 497) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyProtocol (line 509) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyProtocol
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallState (line 521) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallState
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CError (line 535) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CError
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CNetworkType (line 549) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CNetworkType
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CDataSavingMode (line 571) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CDataSavingMode
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallStatus (line 584) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallStatus
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCallAudioRoute (line 597) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCallAudioRoute
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CCameraLocation (line 611) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CCameraLocation
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CMediaOperations (line 623) | enum __x_ABI_CPhoneVoIPApp_CBackEnd_CMediaOperations
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CEndpointStruct (line 635) | struct __x_ABI_CPhoneVoIPApp_CBackEnd_CEndpointStruct
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyStruct (line 645) | struct __x_ABI_CPhoneVoIPApp_CBackEnd_CProxyStruct
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CConfig (line 655) | struct __x_ABI_CPhoneVoIPApp_CBackEnd_CConfig
  function namespace (line 675) | namespace ABI {
  function namespace (line 691) | namespace ABI {
  function namespace (line 707) | namespace ABI {
  function namespace (line 723) | namespace ABI {
  function namespace (line 739) | namespace ABI {
  function namespace (line 755) | namespace ABI {
  function namespace (line 771) | namespace ABI {
  function namespace (line 787) | namespace ABI {
  function namespace (line 803) | namespace ABI {
  function namespace (line 819) | namespace ABI {
  function namespace (line 835) | namespace ABI {
  function namespace (line 851) | namespace ABI {
  function namespace (line 881) | namespace ABI {
  function namespace (line 900) | namespace ABI {
  function namespace (line 921) | namespace ABI {
  function namespace (line 942) | namespace ABI {
  function namespace (line 971) | namespace ABI {
  function namespace (line 991) | namespace ABI {
  function namespace (line 1011) | namespace ABI {
  function namespace (line 1032) | namespace ABI {
  function namespace (line 1051) | namespace ABI {
  function namespace (line 1073) | namespace ABI {
  function namespace (line 1094) | namespace ABI {
  function namespace (line 1115) | namespace ABI {
  function namespace (line 1158) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CIMessageReceivedEventHandlerVtbl (line 1183) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CIMessageReceivedEventHand...
  function interface (line 1208) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIMessageReceivedEventHandler
  function namespace (line 1258) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CICameraLocationChangedEventHandlerVtbl (line 1281) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CICameraLocationChangedEve...
  function interface (line 1304) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CICameraLocationChangedEventHan...
  function namespace (line 1354) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CIIncomingCallDialogDismissedCallbackVtbl (line 1379) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CIIncomingCallDialogDismis...
  function interface (line 1404) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIIncomingCallDialogDismissedCa...
  function namespace (line 1470) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportPublicNonVirtualsVtbl (line 1514) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportPubl...
  function interface (line 1576) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportPublicNon...
  function namespace (line 1668) | namespace PhoneVoIPApp {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportProtectedNonVirtualsVtbl (line 1687) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportProt...
  function interface (line 1719) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndTransportProtected...
  function namespace (line 1792) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IEndpointPublicNonVirtualsVtbl (line 1844) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IEndpointPublicNonVir...
  function interface (line 1918) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IEndpointPublicNonVirtuals
  function namespace (line 2021) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CICallControllerStatusListenerVtbl (line 2059) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CICallControllerStatusList...
  function interface (line 2115) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CICallControllerStatusListener
  function namespace (line 2206) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCapturePublicNonVirtualsVtbl (line 2243) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCapturePublic...
  function interface (line 2298) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCapturePublicNonVi...
  function namespace (line 2390) | namespace PhoneVoIPApp {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCaptureProtectedNonVirtualsVtbl (line 2409) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCaptureProtec...
  function interface (line 2441) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IBackEndCaptureProtectedNo...
  function namespace (line 2514) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CIConfigVtbl (line 2546) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CIConfigVtbl
  function interface (line 2594) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIConfig
  function namespace (line 2679) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____ICallControllerPublicNonVirtualsVtbl (line 2868) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____ICallControllerPublic...
  function interface (line 3117) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____ICallControllerPublicNonVi...
  function namespace (line 3334) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CIVideoRendererVtbl (line 3358) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CIVideoRendererVtbl
  function interface (line 3396) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIVideoRenderer
  function namespace (line 3475) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_CIMTProtoUpdaterVtbl (line 3510) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_CIMTProtoUpdaterVtbl
  function interface (line 3561) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_CIMTProtoUpdater
  function namespace (line 3646) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsPublicNonVirtualsVtbl (line 3693) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsPublicNonVirt...
  function interface (line 3761) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsPublicNonVirtuals
  function namespace (line 3861) | namespace ABI {
  type __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsStaticsVtbl (line 3895) | typedef struct __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsStaticsVtbl
  function interface (line 3945) | interface __x_ABI_CPhoneVoIPApp_CBackEnd_C____IGlobalsStatics

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd_i.c
  type IID (line 50) | typedef struct _IID
  type IID (line 62) | typedef IID CLSID;

FILE: BackEndProxyStub/PhoneVoIPApp.BackEnd_p.c
  type PhoneVoIPApp2EBackEnd_MIDL_TYPE_FORMAT_STRING (line 55) | typedef struct _PhoneVoIPApp2EBackEnd_MIDL_TYPE_FORMAT_STRING
  type PhoneVoIPApp2EBackEnd_MIDL_PROC_FORMAT_STRING (line 61) | typedef struct _PhoneVoIPApp2EBackEnd_MIDL_PROC_FORMAT_STRING
  type PhoneVoIPApp2EBackEnd_MIDL_EXPR_FORMAT_STRING (line 67) | typedef struct _PhoneVoIPApp2EBackEnd_MIDL_EXPR_FORMAT_STRING

FILE: EmojiPanel/EmojiPanel/App.xaml.cs
  class App (line 19) | public partial class App : Application
    method App (line 30) | public App()
    method Application_Launching (line 65) | private void Application_Launching(object sender, LaunchingEventArgs e)
    method Application_Activated (line 71) | private void Application_Activated(object sender, ActivatedEventArgs e)
    method Application_Deactivated (line 77) | private void Application_Deactivated(object sender, DeactivatedEventAr...
    method Application_Closing (line 83) | private void Application_Closing(object sender, ClosingEventArgs e)
    method RootFrame_NavigationFailed (line 88) | private void RootFrame_NavigationFailed(object sender, NavigationFaile...
    method Application_UnhandledException (line 98) | private void Application_UnhandledException(object sender, Application...
    method InitializePhoneApplication (line 113) | private void InitializePhoneApplication()
    method CompleteInitializePhoneApplication (line 131) | private void CompleteInitializePhoneApplication(object sender, Navigat...

FILE: EmojiPanel/EmojiPanel/Controls/Emoji/EmojiControl.xaml.cs
  class EmojiControl (line 24) | public partial class EmojiControl
    method GetInstance (line 48) | public static EmojiControl GetInstance()
    method EmojiControl (line 59) | public EmojiControl()
    method BindTextBox (line 82) | public void BindTextBox(TextBox textBox)
    method UnbindTextBox (line 89) | public void UnbindTextBox()
    method Open (line 113) | private void Open()
    method Hide (line 184) | private void Hide()
    method TextBoxOnGotFocus (line 236) | private void TextBoxOnGotFocus(object sender, RoutedEventArgs routedEv...
    method TextBoxOnLostFocus (line 240) | private void TextBoxOnLostFocus(object sender, RoutedEventArgs routedE...
    method OnBackKeyPress (line 249) | private void OnBackKeyPress(object sender, CancelEventArgs cancelEvent...
    method VirtPanelOnScrollPositionChanged (line 258) | private static void VirtPanelOnScrollPositionChanged(object sender, My...
    method LoadCategory (line 282) | public async void LoadCategory(int index)
    method OnRootFrameTransformChanged (line 370) | public static void OnRootFrameTransformChanged(DependencyObject source...
    method OnRootFrameTransformChanged (line 375) | public void OnRootFrameTransformChanged()
    method LoadRecents (line 384) | public void LoadRecents()
    method UnloadRecents (line 392) | public void UnloadRecents()
    method OnEmojiSelected (line 400) | private void OnEmojiSelected(object sender, EmojiDataItem emojiDataItem)
    method BackspaceButtonOnClick (line 419) | private void BackspaceButtonOnClick(object sender, RoutedEventArgs rou...
    method GetCategoryButtonByIndex (line 465) | private Button GetCategoryButtonByIndex(int index)
    method LoadButtons (line 485) | public void LoadButtons()
    method AbcButtonOnClick (line 574) | private void AbcButtonOnClick(object sender, RoutedEventArgs routedEve...
    method CategoryButtonClick (line 579) | private void CategoryButtonClick(object sender, RoutedEventArgs routed...
    method CreateButtonsBackgrounds (line 595) | private void CreateButtonsBackgrounds(int categoryIndex)
    method InitializeOrientation (line 615) | private void InitializeOrientation(Orientation orientation)
    method OnSizeChanged (line 641) | private void OnSizeChanged(object sender, SizeChangedEventArgs sizeCha...

FILE: EmojiPanel/EmojiPanel/Controls/Emoji/EmojiData.cs
  class EmojiDataItem (line 11) | public class EmojiDataItem
    method EmojiDataItem (line 13) | public EmojiDataItem() { }
    method EmojiDataItem (line 15) | public EmojiDataItem(string string2, ulong code)
    method BuildString (line 25) | public static string BuildString(ulong code)
    method BuildUri (line 52) | public static Uri BuildUri(string string2)
    method GetByIndex (line 84) | public static EmojiDataItem GetByIndex(int categoryIndex, int spriteIn...
  class EmojiData (line 105) | public static class EmojiData
    method AddToRecents (line 109) | public static void AddToRecents(EmojiDataItem emojiDataItem)
    method LoadRecents (line 132) | public static void LoadRecents()
    method SaveRecents (line 158) | public static void SaveRecents()

FILE: EmojiPanel/EmojiPanel/Controls/Emoji/EmojiSpriteItem.cs
  class EmojiSpriteItem (line 17) | public class EmojiSpriteItem : VListItemBase
    method EmojiSpriteItem (line 25) | public EmojiSpriteItem(int categoryIndex, int spriteOffset)
    method EmojiSpriteItem (line 74) | public EmojiSpriteItem(Uri spriteUri, int categoryIndex, int spriteOff...
    method ViewOnLostMouseCapture (line 117) | private static void ViewOnLostMouseCapture(object sender, MouseEventAr...
    method ClearCurrentHighlight (line 122) | public static void ClearCurrentHighlight()
    method ViewOnMouseLeftButtonDown (line 133) | private void ViewOnMouseLeftButtonDown(object sender, MouseButtonEvent...
    method ViewOnTap (line 161) | private void ViewOnTap(object sender, GestureEventArgs args)
    method CreateBorders (line 180) | private void CreateBorders()

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/DelayedExecutor.cs
  class DelayedExecutor (line 12) | public class DelayedExecutor
    class ExecutionInfo (line 14) | class ExecutionInfo
    method DelayedExecutor (line 26) | public DelayedExecutor(int delay) // TO DO : add IDateTimeProvider dep...
    method AddToDelayedExecution (line 32) | public void AddToDelayedExecution(Action action)
    method TimerCallback (line 42) | private void TimerCallback(object state)
    method ChangeTimer (line 72) | private void ChangeTimer(bool activate)

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/Helpers.cs
  class Helpers (line 10) | public static class Helpers
    method GetAssetUri (line 12) | public static Uri GetAssetUri(string assetName)

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/MyListItemBase.cs
  class MyListItemBase (line 7) | public class MyListItemBase : Grid

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/MyVirtualizingPanel.cs
  class MyVirtualizingPanel (line 15) | public class MyVirtualizingPanel : Canvas
    method Log (line 19) | private static void Log(string str)
    method OnListVerticalOffsetChanged (line 47) | private static void OnListVerticalOffsetChanged(DependencyObject obj, ...
    method InitializeWithScrollViewer (line 61) | public void InitializeWithScrollViewer(ScrollViewer scrollViewer)
    method EnsureBoundToScrollViewer (line 67) | protected void EnsureBoundToScrollViewer()
    method group_CurrentStateChanging (line 105) | private void group_CurrentStateChanging(object sender, VisualStateChan...
    method FindVisualState (line 118) | private static VisualStateGroup FindVisualState(FrameworkElement eleme...
    class ScrollPositionChangedEventAgrs (line 131) | public class ScrollPositionChangedEventAgrs : EventArgs
      method ScrollPositionChangedEventAgrs (line 136) | public ScrollPositionChangedEventAgrs(double currentPosition,
    method OnListVerticalOffsetChanged (line 150) | private void OnListVerticalOffsetChanged()
    method DetermineIfScrollingIsFast (line 175) | private bool DetermineIfScrollingIsFast()
    method MyVirtualizingPanel (line 217) | public MyVirtualizingPanel()
    method MyVirtualizingPanel_Loaded (line 222) | void MyVirtualizingPanel_Loaded(object sender, RoutedEventArgs e)
    method AddItems (line 239) | public void AddItems(IEnumerable<VListItemBase> _itemsToBeAdded)
    method InsertRemoveItems (line 279) | public void InsertRemoveItems(int index, List<VListItemBase> itemsToIn...
    method RemoveItem (line 327) | public void RemoveItem(VListItemBase itemToBeRemoved)
    method RearrangeAllItems (line 339) | private void RearrangeAllItems()
    method PerformLoadUnload2 (line 365) | private void PerformLoadUnload2(bool isToLoad, bool bypassUnload = false)
    method GetRealOffset (line 462) | private double GetRealOffset()
    method PerformLoadUnload (line 484) | private void PerformLoadUnload(bool isToLoad)
    method SetLoadedBounds (line 489) | private void SetLoadedBounds(int lowerBoundInd, int upperBoundInd, boo...
    method UnloadItemsInSegment (line 530) | private void UnloadItemsInSegment(Segment segment)
    method LoadItemsInSegment (line 542) | private void LoadItemsInSegment(Segment segment)
    method GetCoveredPoints (line 557) | private List<int> GetCoveredPoints(double from, double to)
    method ClearItems (line 576) | public void ClearItems()

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/VListItemBase.cs
  class VListItemBase (line 7) | public abstract class VListItemBase
    method VListItemBase (line 18) | protected VListItemBase()
    method Load (line 48) | public virtual void Load()
    method Unload (line 55) | public virtual void Unload()

FILE: EmojiPanel/EmojiPanel/Controls/Utilites/VirtSegment.cs
  class Segment (line 9) | public class Segment
    method Segment (line 16) | public Segment(int lowerBound, int upperBound)
    method Segment (line 22) | public Segment()
    method ToString (line 27) | public override string ToString()
    method CompareToSegment (line 33) | public void CompareToSegment(

FILE: EmojiPanel/EmojiPanel/MainPage.xaml.cs
  class MainPage (line 11) | public partial class MainPage
    method MainPage (line 15) | public MainPage()
    method OnSmileIconClick (line 20) | private void OnSmileIconClick(object sender, EventArgs e)
    method OnNavigatingFrom (line 34) | protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    method ClearAllButtonClick (line 47) | private void ClearAllButtonClick(object sender, EventArgs e)

FILE: ExifLib/ExifIO.cs
  class ExifIO (line 10) | public static class ExifIO
    method ReadShort (line 12) | public static short ReadShort(byte[] Data, int offset, bool littleEndian)
    method ReadUShort (line 26) | public static ushort ReadUShort(byte[] Data, int offset, bool littleEn...
    method ReadInt (line 40) | public static int ReadInt(byte[] Data, int offset, bool littleEndian)
    method ReadUInt (line 54) | public static uint ReadUInt(byte[] Data, int offset, bool littleEndian)
    method ReadSingle (line 68) | public static float ReadSingle(byte[] Data, int offset, bool littleEnd...
    method ReadDouble (line 83) | public static double ReadDouble(byte[] Data, int offset, bool littleEn...

FILE: ExifLib/ExifIds.cs
  class JpegId (line 5) | public static class JpegId
  type ExifIFD (line 17) | public enum ExifIFD
  type ExifId (line 23) | public enum ExifId
  type ExifGps (line 48) | public enum ExifGps
  type ExifOrientation (line 83) | public enum ExifOrientation
  type ExifUnit (line 92) | public enum ExifUnit
  type ExifFlash (line 102) | [Flags]
  type ExifGpsLatitudeRef (line 115) | public enum ExifGpsLatitudeRef
  type ExifGpsLongitudeRef (line 122) | public enum ExifGpsLongitudeRef

FILE: ExifLib/ExifReader.cs
  class ExifReader (line 10) | public class ExifReader
    method ReadJpeg (line 15) | public static JpegInfo ReadJpeg(FileInfo fi)
    method ReadJpeg (line 28) | public static JpegInfo ReadJpeg(Stream stream)
    method ExifReader (line 34) | protected ExifReader(Stream stream)
    method ProcessExif (line 122) | private void ProcessExif(byte[] section)
    method DirOffset (line 173) | private int DirOffset(int start, int num)
    method ProcessExifDir (line 178) | private void ProcessExifDir(byte[] section, int offsetDir, int offsetB...
    method ProcessSOF (line 251) | private void ProcessSOF(byte[] section, int marker)

FILE: ExifLib/ExifTag.cs
  type ExifTagFormat (line 9) | public enum ExifTagFormat
  class ExifTag (line 27) | public class ExifTag
    method ExifTag (line 37) | public ExifTag(byte[] section, int sectionOffset, int offsetBase, int ...
    method ReadShort (line 74) | private short ReadShort(int offset)
    method ReadUShort (line 79) | private ushort ReadUShort(int offset)
    method ReadInt (line 84) | private int ReadInt(int offset)
    method ReadUInt (line 89) | private uint ReadUInt(int offset)
    method ReadSingle (line 94) | private float ReadSingle(int offset)
    method ReadDouble (line 99) | private double ReadDouble(int offset)
    method GetInt (line 119) | public int GetInt(int componentIndex)
    method GetNumericValue (line 124) | public double GetNumericValue(int componentIndex)
    method GetStringValue (line 148) | public string GetStringValue()
    method GetStringValue (line 153) | public string GetStringValue(int componentIndex)
    method Populate (line 169) | public virtual void Populate(JpegInfo info, ExifIFD ifd)
    method ToString (line 233) | public override string ToString()

FILE: ExifLib/JpegInfo.cs
  class JpegInfo (line 5) | public class JpegInfo

FILE: FFmpegInterop/Source/FFmpegInteropMSS.cpp
  function HRESULT (line 259) | HRESULT FFmpegInteropMSS::InitFFmpegContext(bool forceAudioDecode, bool ...
  function HRESULT (line 393) | HRESULT FFmpegInteropMSS::CreateAudioStreamDescriptor(bool forceAudioDec...
  function HRESULT (line 423) | HRESULT FFmpegInteropMSS::CreateVideoStreamDescriptor(bool forceVideoDec...
  function FileStreamRead (line 570) | static int FileStreamRead(void* ptr, uint8_t* buf, int bufSize)
  function FileStreamSeek (line 591) | static int64_t FileStreamSeek(void* ptr, int64_t pos, int whence)

FILE: FFmpegInterop/Source/FFmpegInteropMSS.h
  function namespace (line 34) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/FFmpegReader.h
  function namespace (line 23) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/H264AVCSampleProvider.cpp
  function MediaSampleProvider (line 28) | MediaSampleProvider(reader, avFormatCtx, avCodecCtx)

FILE: FFmpegInterop/Source/H264AVCSampleProvider.h
  function namespace (line 22) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/H264SampleProvider.cpp
  function MediaSampleProvider (line 28) | MediaSampleProvider(reader, avFormatCtx, avCodecCtx)

FILE: FFmpegInterop/Source/H264SampleProvider.h
  function namespace (line 22) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/MediaSampleProvider.cpp
  function HRESULT (line 37) | HRESULT MediaSampleProvider::AllocateResources()
  function AVPacket (line 137) | AVPacket MediaSampleProvider::PopPacket()

FILE: FFmpegInterop/Source/MediaSampleProvider.h
  function namespace (line 30) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/UncompressedAudioSampleProvider.cpp
  function HRESULT (line 34) | HRESULT UncompressedAudioSampleProvider::AllocateResources()

FILE: FFmpegInterop/Source/UncompressedAudioSampleProvider.h
  function namespace (line 27) | namespace FFmpegInterop

FILE: FFmpegInterop/Source/UncompressedVideoSampleProvider.cpp
  function HRESULT (line 45) | HRESULT UncompressedVideoSampleProvider::AllocateResources()

FILE: FFmpegInterop/Source/UncompressedVideoSampleProvider.h
  function namespace (line 28) | namespace FFmpegInterop

FILE: FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegGifDecoder.cpp
  type VideoInfo (line 18) | struct VideoInfo {
  function open_codec_context (line 90) | int open_codec_context(int *stream_idx, AVFormatContext *fmt_ctx, enum A...
  function decode_packet (line 123) | int decode_packet(VideoInfo *info, int *got_frame) {
  function int32 (line 235) | static __inline int32 clamp0(int32 v) {
  function int32 (line 239) | static __inline int32 clamp255(int32 v) {
  function uint32 (line 243) | static __inline uint32 Clamp(int32 val) {
  function uint32 (line 248) | static __inline uint32 Abs(int32 v) {
  function int32 (line 253) | static __inline int32 clamp0(int32 v) {
  function int32 (line 257) | static __inline int32 clamp255(int32 v) {
  function uint32 (line 261) | static __inline uint32 Clamp(int32 val) {
  function uint32 (line 266) | static __inline uint32 Abs(int32 v) {
  function YuvPixel (line 286) | static __inline void YuvPixel(uint8 y, uint8 u, uint8 v,
  function I422ToARGBRow_C (line 295) | void I422ToARGBRow_C(const uint8* src_y,
  function I420ToARGB (line 322) | int I420ToARGB(const uint8* src_y, int src_stride_y,
  function ARGBShuffleRow_C (line 393) | void ARGBShuffleRow_C(const uint8* src_argb, uint8* dst_argb,
  function ARGBShuffle (line 416) | int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra,
  function ABGRToARGB (line 455) | int ABGRToARGB(const uint8* src_abgr, int src_stride_abgr,

FILE: FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegGifDecoder.h
  function namespace (line 3) | namespace FFmpegInterop

FILE: OpenCVComponent/OpenCVComponent.cpp
  function OutputDebugString (line 81) | void OutputDebugString(std::string output, LARGE_INTEGER start, LARGE_IN...
  function CopyMatrixToVector (line 283) | void CopyMatrixToVector(const cv::Mat& mat, std::vector<int>& vector, in...

FILE: OpenCVComponent/OpenCVComponent.h
  function namespace (line 16) | namespace OpenCVComponent
  function class (line 38) | class FacesImage sealed
  function class (line 47) | class OpenCVLib sealed

FILE: Telegram.Api.PCL/Hash/CRC32/CRC.WinRT.cs
  class CRC32 (line 22) | internal class CRC32
    method CRC32 (line 29) | static CRC32()
    method GetCrc32 (line 89) | public Int32 GetCrc32(Stream input)
    method GetCrc32AndCopy (line 101) | public Int32 GetCrc32AndCopy(Stream input, Stream output)
    method ComputeCrc32 (line 137) | public Int32 ComputeCrc32(Int32 W, byte B)
    method _InternalComputeCrc32 (line 142) | internal Int32 _InternalComputeCrc32(UInt32 W, byte B)
    method SlurpBlock (line 154) | public void SlurpBlock(byte[] block, int offset, int count)
    method gf2_matrix_times (line 172) | private uint gf2_matrix_times(uint[] matrix, uint vec)
    method gf2_matrix_square (line 186) | private void gf2_matrix_square(uint[] square, uint[] mat)
    method Combine (line 203) | public void Combine(int crc, int length)
    method ComputeHash (line 260) | public byte[] ComputeHash(byte[] data)

FILE: Telegram.Api.PCL/Resources/AppResources.cs
  class AppResources (line 5) | internal class AppResources
    method AppResources (line 11) | internal AppResources()

FILE: Telegram.Api.WP8/Resources/AppResources.Designer.cs
  class AppResources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method AppResources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: Telegram.Api.WP8/Services/FileManager/IWebFileManager.cs
  type IWebFileManager (line 13) | public interface IWebFileManager
    method DownloadFile (line 15) | void DownloadFile(TLInt dcId, TLInputWebFileGeoPointLocation file, str...
    method DownloadFile (line 16) | void DownloadFile(TLInt dcId, TLInputWebFileGeoPointLocation file, str...
    method CancelDownloadFile (line 17) | void CancelDownloadFile(TLObject owner);

FILE: Telegram.Api.WP8/Services/FileManager/WebFileManager.cs
  class WebFileManager (line 18) | public class WebFileManager : FileManagerBase, IWebFileManager
    method WebFileManager (line 20) | public WebFileManager(ITelegramEventAggregator eventAggregator, IMTPro...
    method OnDownloading (line 30) | private void OnDownloading(object state)
    method GetDownloadableItem (line 167) | protected DownloadableItem GetDownloadableItem(TLInt dcId, TLInputWebF...
    method DownloadFile (line 181) | public void DownloadFile(TLInt dcId, TLInputWebFileGeoPointLocation fi...
    method DownloadFile (line 186) | public void DownloadFile(TLInt dcId, TLInputWebFileGeoPointLocation fi...

FILE: Telegram.Api.WP8/Services/Location/ILiveLocationService.cs
  type ILiveLocationService (line 14) | public interface ILiveLocationService
    method Load (line 16) | void Load();
    method UpdateAll (line 18) | void UpdateAll();
    method LoadAndUpdateAllAsync (line 20) | void LoadAndUpdateAllAsync();
    method Add (line 22) | void Add(TLMessage70 messageBase);
    method UpdateAsync (line 24) | void UpdateAsync(TLMessage70 message, TLGeoPointBase geoPoint, Action<...
    method Get (line 26) | TLMessage Get(TLPeerBase peer, TLInt fromId);
    method Get (line 28) | IList<TLMessage> Get();
    method Clear (line 30) | void Clear();
    method StopAllAsync (line 32) | void StopAllAsync();

FILE: Telegram.Api.WP8/Services/Location/LiveLocationService.cs
  class LiveLocationService (line 20) | public class LiveLocationService : ILiveLocationService, IHandle<TLUpdat...
    method LiveLocationService (line 32) | public LiveLocationService(IMTProtoService mtProtoService, ITelegramEv...
    method OnTick (line 45) | private void OnTick(object state)
    method LoadAndUpdateAllAsync (line 52) | public void LoadAndUpdateAllAsync()
    method StopAllAsync (line 64) | public void StopAllAsync()
    method UpdateAll (line 159) | public void UpdateAll()
    method SetNextTimer (line 268) | private void SetNextTimer()
    method Get (line 274) | public IList<TLMessage> Get()
    method Get (line 303) | public TLMessage Get(TLPeerBase peer, TLInt fromId)
    method Load (line 366) | public void Load()
    method Clear (line 406) | public void Clear()
    method GetTimeSpan (line 418) | private TimeSpan GetTimeSpan()
    method Add (line 467) | public void Add(TLMessage70 message)
    method Remove (line 483) | public void Remove(TLMessage message)
    method UpdateAsync (line 497) | public void UpdateAsync(TLMessage70 message, TLGeoPointBase geoPointBa...
    method UpdateAndRemoveAt (line 567) | private void UpdateAndRemoveAt(int i, TLMessage message, TLMessage upd...
    method Handle (line 584) | public void Handle(TLUpdateEditMessage update)
    method Handle (line 635) | public void Handle(TLUpdateEditChannelMessage update)
  class LiveLocationAddedEventArgs (line 670) | public class LiveLocationAddedEventArgs
  class LiveLocationRemovedEventArgs (line 675) | public class LiveLocationRemovedEventArgs
  class LiveLocationClearedEventArgs (line 680) | public class LiveLocationClearedEventArgs
  class LiveLocationLoadedEventArgs (line 685) | public class LiveLocationLoadedEventArgs

FILE: Telegram.Api.WP8/TL/Functions/Account/TLAcceptAuthorization.cs
  class TLAcceptAuthorization (line 3) | class TLAcceptAuthorization : TLObject
    method ToBytes (line 17) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLDeleteSecureValue.cs
  class TLDeleteSecureValue (line 10) | public class TLDeleteSecureValue : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLGetAllSecureValues.cs
  class TLGetAllSecureValues (line 10) | public class TLGetAllSecureValues : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLGetAuthorizationForm.cs
  class TLGetAuthorizationForm (line 10) | class TLGetAuthorizationForm : TLObject
    method ToBytes (line 20) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLGetSecureValue.cs
  class TLGetSecureValue (line 10) | public class TLGetSecureValue : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLGetWebAuthorizations.cs
  class TLGetWebAuthorizations (line 10) | class TLGetWebAuthorizations : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLInitTakeoutSession.cs
  type InitTakeoutSessionFlags (line 12) | [Flags]
  class TLInitTakeoutSession (line 23) | class TLInitTakeoutSession : TLObject
    method ToBytes (line 81) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLResetWebAuthorization.cs
  class TLResetWebAuthorization (line 10) | class TLResetWebAuthorization : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLResetWebAuthorizations.cs
  class TLResetWebAuthorizations (line 10) | class TLResetWebAuthorizations : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLSaveSecureValue.cs
  class TLSaveSecureValue (line 10) | class TLSaveSecureValue : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLSendVerifyEmailCode.cs
  class TLSendVerifyEmailCode (line 10) | class TLSendVerifyEmailCode : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLSendVerifyPhoneCode.cs
  type SendVerifyPhoneCodeFlags (line 12) | [Flags]
  class TLSendVerifyPhoneCode (line 18) | class TLSendVerifyPhoneCode : TLObject
    method ToBytes (line 40) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLVerifyEmail.cs
  class TLVerifyEmail (line 10) | class TLVerifyEmail : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Account/TLVerifyEmailCode.cs
  class TLVerifyEmailCode (line 9) | class TLVerifyEmailCode

FILE: Telegram.Api.WP8/TL/Functions/Account/TLVerifyPhone.cs
  class TLVerifyPhone (line 10) | class TLVerifyPhone : TLObject
    method ToBytes (line 20) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Auth/TLBindTempAuthKey.cs
  class TLBindTempAuthKey (line 10) | class TLBindTempAuthKey : TLObject
    method ToBytes (line 22) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Channels/TLChangeFeedBroadcast.cs
  type ChangeFeedBroadcastFlags (line 12) | [Flags]
  class TLChangeFeedBroadcast (line 18) | class TLChangeFeedBroadcast : TLObject
    method ToBytes (line 40) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Channels/TLGetFeed.cs
  type GetFeedFlags (line 12) | [Flags]
  class TLGetFeed (line 21) | class TLGetFeed : TLObject
    method ToBytes (line 71) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Channels/TLReadFeed.cs
  class TLReadFeed (line 10) | class TLReadFeed : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Channels/TLSetFeedBroadcasts.cs
  class TLSetFeedBroadcasts (line 10) | class TLSetFeedBroadcasts : TLObject
    method ToBytes (line 20) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Contacts/TLGetSaved.cs
  class TLGetSaved (line 10) | class TLGetSaved : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Help/TLGetDeepLinkInfo.cs
  class TLGetDeepLinkInfo (line 10) | public class TLGetDeepLinkInfo : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Help/TLGetPassportConfig.cs
  class TLGetPassportConfig (line 10) | class TLGetPassportConfig : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Help/TLGetProxyData.cs
  class TLGetProxyData (line 10) | class TLGetProxyData : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLClearAllDrafts.cs
  class TLClearAllDrafts (line 10) | class TLClearAllDrafts : TLObject
    method ToBytes (line 14) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLGetDialogUnreadMarks.cs
  class TLGetDialogUnreadMarks (line 11) | class TLGetDialogUnreadMarks : TLObject
    method ToBytes (line 15) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLMarkDialogUnread.cs
  type MarkDialogUnreadFlags (line 12) | [Flags]
  class TLMarkDialogUnread (line 18) | class TLMarkDialogUnread : TLObject
    method ToBytes (line 38) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLReport.cs
  class TLReport (line 10) | public class TLReport : TLObject
    method ToBytes (line 20) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLSearchStickerSets.cs
  type SearchStickerSetsFlags (line 12) | [Flags]
  class TLSearchStickerSets (line 18) | class TLSearchStickerSets : TLObject
    method ToBytes (line 40) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Messages/TLToggleTopPeers.cs
  class TLToggleTopPeers (line 10) | class TLToggleTopPeers : TLObject
    method ToBytes (line 16) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Upload/TLGetWebFile.cs
  class TLGetWebFile (line 10) | public class TLGetWebFile : TLObject
    method ToBytes (line 20) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/Functions/Users/TLSetSecureValueErrors.cs
  class TLSetSecureValueErrors (line 10) | class TLSetSecureValueErrors : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLAppUpdate.cs
  type AppUpdateFlags (line 13) | [Flags]
  class TLAppUpdateBase (line 21) | public abstract class TLAppUpdateBase : TLObject { }
  class TLNoAppUpdate (line 23) | public class TLNoAppUpdate : TLAppUpdateBase
    method FromBytes (line 27) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLAppUpdate (line 35) | public class TLAppUpdate : TLAppUpdateBase
    method FromBytes (line 76) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLAuthorizationForm.cs
  type AuthorizationFormFlags (line 12) | [Flags]
  class TLAuthorizationForm (line 19) | public class TLAuthorizationForm : TLObject
    method FromBytes (line 64) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLAuthorizationForm85 (line 79) | public class TLAuthorizationForm85 : TLAuthorizationForm
    method FromBytes (line 85) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLContactsSettings.cs
  type ContactsSettingsFlags (line 14) | [Flags]
  class TLContactsSettings (line 20) | public class TLContactsSettings : TLObject
    method FromBytes (line 32) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 41) | public override byte[] ToBytes()
    method FromStream (line 46) | public override TLObject FromStream(Stream input)
    method ToStream (line 53) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLDeepLinkInfo.cs
  type DeepLinkInfoFlags (line 12) | [Flags]
  class TLDeepLinkInfoBase (line 19) | public abstract class TLDeepLinkInfoBase : TLObject { }
  class TLDeepLinkInfoEmpty (line 21) | public class TLDeepLinkInfoEmpty : TLDeepLinkInfoBase
    method FromBytes (line 25) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLDeepLinkInfo (line 33) | public class TLDeepLinkInfo : TLDeepLinkInfoBase
    method FromBytes (line 57) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLDialogPeer.cs
  class TLDialogPeerBase (line 13) | public abstract class TLDialogPeerBase : TLObject { }
  class TLDialogPeerFeed (line 15) | public class TLDialogPeerFeed : TLDialogPeerBase
    method FromBytes (line 21) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 30) | public override byte[] ToBytes()
    method FromStream (line 37) | public override TLObject FromStream(Stream input)
    method ToStream (line 44) | public override void ToStream(Stream output)
    method ToString (line 50) | public override string ToString()
  class TLDialogPeer (line 56) | public class TLDialogPeer : TLDialogPeerBase
    method FromBytes (line 62) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 71) | public override byte[] ToBytes()
    method FromStream (line 78) | public override TLObject FromStream(Stream input)
    method ToStream (line 85) | public override void ToStream(Stream output)
    method ToString (line 91) | public override string ToString()

FILE: Telegram.Api.WP8/TL/TLFeedBroadcasts.cs
  class TLFeedBroadcastsBase (line 10) | public abstract class TLFeedBroadcastsBase : TLObject
  class TLFeedBroadcastsUngrouped (line 15) | public class TLFeedBroadcastsUngrouped : TLFeedBroadcastsBase
    method FromBytes (line 19) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLFeedBroadcasts (line 29) | public class TLFeedBroadcasts : TLFeedBroadcastsBase
    method FromBytes (line 35) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLFeedPosition.cs
  class TLFeedPosition (line 13) | public class TLFeedPosition : TLObject
    method FromBytes (line 23) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 34) | public override byte[] ToBytes()
    method FromStream (line 43) | public override TLObject FromStream(Stream input)
    method ToStream (line 52) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLFeedSources.cs
  type FeedSourcesFlags (line 12) | [Flags]
  class TLFeedSourcesBase (line 18) | public abstract class TLFeedSourcesBase : TLObject { }
  class TLFeedSourcesNotModified (line 20) | public class TLFeedSourcesNotModified : TLFeedSourcesBase
    method FromBytes (line 24) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLFeedSources (line 32) | public class TLFeedSources : TLFeedSourcesBase
    method FromBytes (line 58) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLFoundStickerSets.cs
  class TLFoundStickerSetsBase (line 14) | public abstract class TLFoundStickerSetsBase : TLObject { }
  class TLFoundStickerSetsNotModified (line 16) | public class TLFoundStickerSetsNotModified : TLFoundStickerSetsBase
    method FromBytes (line 20) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 27) | public override byte[] ToBytes()
    method FromStream (line 32) | public override TLObject FromStream(Stream input)
    method ToStream (line 37) | public override void ToStream(Stream output)
  class TLFoundStickerSets (line 43) | public class TLFoundStickerSets : TLFoundStickerSetsBase, IStickers
    method FromBytes (line 76) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 90) | public override byte[] ToBytes()
    method FromStream (line 98) | public override TLObject FromStream(Stream input)
    method ToStream (line 110) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLInputCheckPasswordSRP.cs
  class TLInputCheckPasswordBase (line 10) | public abstract class TLInputCheckPasswordBase : TLObject { }
  class TLInputCheckPasswordEmpty (line 12) | public class TLInputCheckPasswordEmpty : TLInputCheckPasswordBase
    method ToBytes (line 16) | public override byte[] ToBytes()
  class TLInputCheckPasswordSRP (line 22) | public class TLInputCheckPasswordSRP : TLInputCheckPasswordBase
    method ToBytes (line 32) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLInputClientProxy.cs
  class TLInputClientProxy (line 13) | public class TLInputClientProxy : TLObject
    method ToBytes (line 21) | public override byte[] ToBytes()
    method ToStream (line 29) | public override void ToStream(Stream output)
    method FromStream (line 36) | public override TLObject FromStream(Stream input)
    method ToString (line 44) | public override string ToString()

FILE: Telegram.Api.WP8/TL/TLInputDialogPeer.cs
  class TLInputDialogPeerBase (line 13) | public abstract class TLInputDialogPeerBase : TLObject { }
  class TLInputDialogPeerFeed (line 15) | public class TLInputDialogPeerFeed : TLInputDialogPeerBase
    method FromBytes (line 21) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 30) | public override byte[] ToBytes()
    method ToStream (line 37) | public override void ToStream(Stream output)
    method FromStream (line 44) | public override TLObject FromStream(Stream input)
    method ToString (line 51) | public override string ToString()
  class TLInputDialogPeer (line 57) | public class TLInputDialogPeer : TLInputDialogPeerBase
    method FromBytes (line 63) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 72) | public override byte[] ToBytes()
    method ToStream (line 79) | public override void ToStream(Stream output)
    method FromStream (line 86) | public override TLObject FromStream(Stream input)
    method ToString (line 93) | public override string ToString()

FILE: Telegram.Api.WP8/TL/TLInputMessage.cs
  class TLInputMessageBase (line 13) | public abstract class TLInputMessageBase :  TLObject { }
  class TLInputMessageId (line 15) | public class TLInputMessageId : TLInputMessageBase
    method ToBytes (line 21) | public override byte[] ToBytes()
    method FromStream (line 28) | public override TLObject FromStream(Stream input)
    method ToStream (line 35) | public override void ToStream(Stream output)
    method ToString (line 41) | public override string ToString()
  class TLInputMessageReplyTo (line 47) | public class TLInputMessageReplyTo : TLInputMessageBase
    method ToBytes (line 53) | public override byte[] ToBytes()
    method FromStream (line 60) | public override TLObject FromStream(Stream input)
    method ToStream (line 67) | public override void ToStream(Stream output)
    method ToString (line 73) | public override string ToString()
  class TLInputMessagePinned (line 79) | public class TLInputMessagePinned : TLInputMessageBase
    method ToBytes (line 83) | public override byte[] ToBytes()
    method FromStream (line 89) | public override TLObject FromStream(Stream input)
    method ToStream (line 94) | public override void ToStream(Stream output)
    method ToString (line 99) | public override string ToString()

FILE: Telegram.Api.WP8/TL/TLInputSecureFile.cs
  class TLInputSecureFileBase (line 10) | public abstract class TLInputSecureFileBase : TLObject { }
  class TLInputSecureFileUploaded (line 12) | public class TLInputSecureFileUploaded : TLInputSecureFileBase
    method ToBytes (line 26) | public override byte[] ToBytes()
  class TLInputSecureFile (line 38) | public class TLInputSecureFile : TLInputSecureFileBase
    method ToBytes (line 46) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLInputSecureValue.cs
  class TLInputSecureValue (line 10) | public class TLInputSecureValue : TLObject
    method ToBytes (line 72) | public override byte[] ToBytes()
  class TLInputSecureValue85 (line 87) | public class TLInputSecureValue85 : TLInputSecureValue
    method ToBytes (line 99) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLInvokeWithMessageRange.cs
  class TLInvokeWithMessageRange (line 10) | class TLInvokeWithMessageRange : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLInvokeWithTakeout.cs
  class TLInvokeWithTakeout (line 10) | public class TLInvokeWithTakeout : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLPassportConfig.cs
  class TLPassportConfigBase (line 15) | public abstract class TLPassportConfigBase : TLObject { }
  class TLPassportConfigNotModified (line 17) | public class TLPassportConfigNotModified : TLPassportConfigBase
    method FromBytes (line 21) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 28) | public override TLObject FromStream(Stream input)
    method ToStream (line 33) | public override void ToStream(Stream output)
  class TLPassportConfig (line 39) | public class TLPassportConfig : TLPassportConfigBase
    method FromBytes (line 49) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 59) | public override TLObject FromStream(Stream input)
    method ToStream (line 67) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLPasswordKdfAlgo.cs
  class TLPasswordKdfAlgoBase (line 10) | public abstract class TLPasswordKdfAlgoBase : TLObject { }
  class TLPasswordKdfAlgoUnknown (line 12) | public class TLPasswordKdfAlgoUnknown : TLPasswordKdfAlgoBase
    method FromBytes (line 16) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 23) | public override byte[] ToBytes()
  class TLPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow (line 29) | public class TLPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA2...
    method FromBytes (line 41) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 53) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLProxyData.cs
  type ProxyDataPromoCustomFlags (line 14) | [Flags]
  class TLProxyDataBase (line 21) | public abstract class TLProxyDataBase : TLObject
    method GetEmptyObject (line 25) | public abstract TLProxyDataBase GetEmptyObject();
  class TLProxyDataEmpty (line 28) | public class TLProxyDataEmpty : TLProxyDataBase
    method FromBytes (line 32) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 40) | public override byte[] ToBytes()
    method ToStream (line 47) | public override void ToStream(Stream output)
    method FromStream (line 53) | public override TLObject FromStream(Stream input)
    method GetEmptyObject (line 60) | public override TLProxyDataBase GetEmptyObject()
  class TLProxyDataPromo (line 66) | public class TLProxyDataPromo : TLProxyDataBase
    method FromBytes (line 90) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 103) | public override byte[] ToBytes()
    method ToStream (line 113) | public override void ToStream(Stream output)
    method FromStream (line 124) | public override TLObject FromStream(Stream input)
    method GetEmptyObject (line 136) | public override TLProxyDataBase GetEmptyObject()

FILE: Telegram.Api.WP8/TL/TLSavedPhoneContact.cs
  class TLSavedPhoneContact (line 10) | public class TLSavedPhoneContact : TLObject
    method FromBytes (line 22) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLSecureCredentialsEncrypted.cs
  class TLSecureCredentialsEncrypted (line 10) | public class TLSecureCredentialsEncrypted : TLObject
    method FromBytes (line 20) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 31) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLSecureData.cs
  class TLSecureData (line 13) | public class TLSecureData : TLObject
    method FromBytes (line 27) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 38) | public override byte[] ToBytes()
    method FromStream (line 47) | public override TLObject FromStream(Stream input)
    method ToStream (line 56) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLSecureFile.cs
  type ISecureFileError (line 13) | public interface ISecureFileError
  class TLSecureFileBase (line 20) | public abstract class TLSecureFileBase : TLObject
    method ToInputSecureFile (line 48) | public abstract TLInputSecureFileBase ToInputSecureFile();
  class TLSecureFileEmpty (line 51) | public class TLSecureFileEmpty : TLSecureFileBase
    method FromBytes (line 55) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 62) | public override TLObject FromStream(Stream input)
    method ToStream (line 67) | public override void ToStream(Stream output)
    method ToInputSecureFile (line 72) | public override TLInputSecureFileBase ToInputSecureFile()
  class TLSecureFile (line 78) | public class TLSecureFile : TLSecureFileBase, ISecureFileError
    method FromBytes (line 98) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 113) | public override TLObject FromStream(Stream input)
    method ToStream (line 126) | public override void ToStream(Stream output)
    method ToInputSecureFile (line 138) | public override TLInputSecureFileBase ToInputSecureFile()
  class TLSecureFileUploaded (line 144) | public class TLSecureFileUploaded : TLSecureFileBase, ISecureFileError
    method FromStream (line 164) | public override TLObject FromStream(Stream input)
    method ToStream (line 177) | public override void ToStream(Stream output)
    method ToInputSecureFile (line 189) | public override TLInputSecureFileBase ToInputSecureFile()

FILE: Telegram.Api.WP8/TL/TLSecurePasswordKdfAlgo.cs
  class TLSecurePasswordKdfAlgoBase (line 10) | public abstract class TLSecurePasswordKdfAlgoBase : TLObject { }
  class TLSecurePasswordKdfAlgoUnknown (line 12) | public class TLSecurePasswordKdfAlgoUnknown : TLSecurePasswordKdfAlgoBase
    method FromBytes (line 16) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 23) | public override byte[] ToBytes()
  class TLSecurePasswordKdfAlgoPBKDF2HMACSHA512iter100000 (line 29) | public class TLSecurePasswordKdfAlgoPBKDF2HMACSHA512iter100000 : TLSecur...
    method FromBytes (line 35) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 44) | public override byte[] ToBytes()
  class TLSecurePasswordKdfAlgoSHA512 (line 52) | public class TLSecurePasswordKdfAlgoSHA512 : TLSecurePasswordKdfAlgoBase
    method FromBytes (line 58) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 67) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLSecureRequiredType.cs
  type SecureRequiredTypeFlags (line 13) | [Flags]
  class TLSecureRequiredTypeBase (line 21) | public abstract class TLSecureRequiredTypeBase : TLObject { }
  class TLSecureRequiredType (line 23) | public class TLSecureRequiredType : TLSecureRequiredTypeBase
    method FromBytes (line 43) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToString (line 53) | public override string ToString()
  class TLSecureRequiredTypeOneOf (line 59) | public class TLSecureRequiredTypeOneOf : TLSecureRequiredTypeBase
    method FromBytes (line 65) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToString (line 74) | public override string ToString()

FILE: Telegram.Api.WP8/TL/TLSecureSecretSettings.cs
  class TLSecureSecretSettings (line 10) | public class TLSecureSecretSettings : TLObject
    method FromBytes (line 20) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 31) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLSecureValue.cs
  type SecureValueFlags (line 14) | [Flags]
  class TLSecureValue (line 26) | public class TLSecureValue : TLObject
    method FromBytes (line 94) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 111) | public override TLObject FromStream(Stream input)
    method ToStream (line 126) | public override void ToStream(Stream output)
    method ToString (line 140) | public override string ToString()
    method ToInputSecureValue (line 153) | public virtual TLInputSecureValue ToInputSecureValue()
    method Update (line 178) | public virtual void Update(TLSecureValue result)
  class TLSecureValue85 (line 192) | public class TLSecureValue85 : TLSecureValue
    method FromBytes (line 204) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method FromStream (line 222) | public override TLObject FromStream(Stream input)
    method ToStream (line 238) | public override void ToStream(Stream output)
    method ToString (line 253) | public override string ToString()
    method ToInputSecureValue (line 267) | public override TLInputSecureValue ToInputSecureValue()
    method Update (line 302) | public override void Update(TLSecureValue result)

FILE: Telegram.Api.WP8/TL/TLSecureValueError.cs
  class TLSecureValueErrorBase (line 10) | public abstract class TLSecureValueErrorBase : TLObject
  class TLSecureValueError (line 19) | public class TLSecureValueError : TLSecureValueErrorBase
    method FromBytes (line 25) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorData (line 42) | public class TLSecureValueErrorData : TLSecureValueErrorBase
    method FromBytes (line 50) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorFileBase (line 107) | public abstract class TLSecureValueErrorFileBase : TLSecureValueErrorBase
  class TLSecureValueErrorFrontSide (line 112) | public class TLSecureValueErrorFrontSide : TLSecureValueErrorFileBase
    method FromBytes (line 116) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorReverseSide (line 133) | public class TLSecureValueErrorReverseSide : TLSecureValueErrorFileBase
    method FromBytes (line 137) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorSelfie (line 154) | public class TLSecureValueErrorSelfie : TLSecureValueErrorFileBase
    method FromBytes (line 158) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorFile (line 175) | public class TLSecureValueErrorFile : TLSecureValueErrorFileBase
    method FromBytes (line 179) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorFiles (line 196) | public class TLSecureValueErrorFiles : TLSecureValueErrorBase
    method FromBytes (line 202) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorTranslationFile (line 219) | public class TLSecureValueErrorTranslationFile : TLSecureValueErrorFileBase
    method FromBytes (line 223) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLSecureValueErrorTranslationFiles (line 240) | public class TLSecureValueErrorTranslationFiles : TLSecureValueErrorBase
    method FromBytes (line 246) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLSecureValueHash.cs
  class TLSecureValueHash (line 10) | public class TLSecureValueHash : TLObject
    method ToBytes (line 18) | public override byte[] ToBytes()

FILE: Telegram.Api.WP8/TL/TLSecureValuePlainData.cs
  class TLSecurePlainDataBase (line 13) | public abstract class TLSecurePlainDataBase : TLObject { }
  class TLSecurePlainPhone (line 15) | public class TLSecurePlainPhone : TLSecurePlainDataBase
    method FromBytes (line 21) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 30) | public override byte[] ToBytes()
    method FromStream (line 37) | public override TLObject FromStream(Stream input)
    method ToStream (line 44) | public override void ToStream(Stream output)
  class TLSecurePlainEmail (line 51) | public class TLSecurePlainEmail : TLSecurePlainDataBase
    method FromBytes (line 57) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 66) | public override byte[] ToBytes()
    method FromStream (line 73) | public override TLObject FromStream(Stream input)
    method ToStream (line 80) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLSecureValueType.cs
  class TLSecureValueTypeBase (line 14) | public abstract class TLSecureValueTypeBase : TLObject { }
  class TLSecureValueTypePersonalDetails (line 16) | public class TLSecureValueTypePersonalDetails : TLSecureValueTypeBase
    method FromBytes (line 20) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 27) | public override byte[] ToBytes()
    method FromStream (line 32) | public override TLObject FromStream(Stream input)
    method ToStream (line 37) | public override void ToStream(Stream output)
  class TLSecureValueTypePassport (line 43) | public class TLSecureValueTypePassport : TLSecureValueTypeBase
    method FromBytes (line 47) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 54) | public override byte[] ToBytes()
    method FromStream (line 59) | public override TLObject FromStream(Stream input)
    method ToStream (line 64) | public override void ToStream(Stream output)
  class TLSecureValueTypeDriverLicense (line 70) | public class TLSecureValueTypeDriverLicense : TLSecureValueTypeBase
    method FromBytes (line 74) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 81) | public override byte[] ToBytes()
    method FromStream (line 86) | public override TLObject FromStream(Stream input)
    method ToStream (line 91) | public override void ToStream(Stream output)
  class TLSecureValueTypeIdentityCard (line 97) | public class TLSecureValueTypeIdentityCard : TLSecureValueTypeBase
    method FromBytes (line 101) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 108) | public override byte[] ToBytes()
    method FromStream (line 113) | public override TLObject FromStream(Stream input)
    method ToStream (line 118) | public override void ToStream(Stream output)
  class TLSecureValueTypeInternalPassport (line 124) | public class TLSecureValueTypeInternalPassport : TLSecureValueTypeBase
    method FromBytes (line 128) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 135) | public override byte[] ToBytes()
    method FromStream (line 140) | public override TLObject FromStream(Stream input)
    method ToStream (line 145) | public override void ToStream(Stream output)
  class TLSecureValueTypeAddress (line 151) | public class TLSecureValueTypeAddress : TLSecureValueTypeBase
    method FromBytes (line 155) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 162) | public override byte[] ToBytes()
    method FromStream (line 167) | public override TLObject FromStream(Stream input)
    method ToStream (line 172) | public override void ToStream(Stream output)
  class TLSecureValueTypeUtilityBill (line 178) | public class TLSecureValueTypeUtilityBill : TLSecureValueTypeBase
    method FromBytes (line 182) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 189) | public override byte[] ToBytes()
    method FromStream (line 194) | public override TLObject FromStream(Stream input)
    method ToStream (line 199) | public override void ToStream(Stream output)
  class TLSecureValueTypeBankStatement (line 205) | public class TLSecureValueTypeBankStatement : TLSecureValueTypeBase
    method FromBytes (line 209) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 216) | public override byte[] ToBytes()
    method FromStream (line 221) | public override TLObject FromStream(Stream input)
    method ToStream (line 226) | public override void ToStream(Stream output)
  class TLSecureValueTypeRentalAgreement (line 232) | public class TLSecureValueTypeRentalAgreement : TLSecureValueTypeBase
    method FromBytes (line 236) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 243) | public override byte[] ToBytes()
    method FromStream (line 248) | public override TLObject FromStream(Stream input)
    method ToStream (line 253) | public override void ToStream(Stream output)
  class TLSecureValueTypePassportRegistration (line 259) | public class TLSecureValueTypePassportRegistration : TLSecureValueTypeBase
    method FromBytes (line 263) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 270) | public override byte[] ToBytes()
    method FromStream (line 275) | public override TLObject FromStream(Stream input)
    method ToStream (line 280) | public override void ToStream(Stream output)
  class TLSecureValueTypeTemporaryRegistration (line 286) | public class TLSecureValueTypeTemporaryRegistration : TLSecureValueTypeBase
    method FromBytes (line 290) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 297) | public override byte[] ToBytes()
    method FromStream (line 302) | public override TLObject FromStream(Stream input)
    method ToStream (line 307) | public override void ToStream(Stream output)
  class TLSecureValueTypePhone (line 313) | public class TLSecureValueTypePhone : TLSecureValueTypeBase
    method FromBytes (line 317) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 324) | public override byte[] ToBytes()
    method FromStream (line 329) | public override TLObject FromStream(Stream input)
    method ToStream (line 334) | public override void ToStream(Stream output)
  class TLSecureValueTypeEmail (line 340) | public class TLSecureValueTypeEmail : TLSecureValueTypeBase
    method FromBytes (line 344) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method ToBytes (line 351) | public override byte[] ToBytes()
    method FromStream (line 356) | public override TLObject FromStream(Stream input)
    method ToStream (line 361) | public override void ToStream(Stream output)

FILE: Telegram.Api.WP8/TL/TLSentEmailCode.cs
  class TLSentEmailCode (line 10) | public class TLSentEmailCode : TLObject, ILength
    method FromBytes (line 18) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLTakeout.cs
  class TLTakeout (line 10) | public class TLTakeout : TLObject
    method FromBytes (line 16) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLTermsOfServiceUpdate.cs
  class TLTermsOfServiceUpdateBase (line 10) | public abstract class TLTermsOfServiceUpdateBase : TLObject
  class TLTermsOfServiceUpdate (line 15) | public class TLTermsOfServiceUpdate : TLTermsOfServiceUpdateBase
    method FromBytes (line 21) | public override TLObject FromBytes(byte[] bytes, ref int position)
  class TLTermsOfServiceUpdateEmpty (line 32) | public class TLTermsOfServiceUpdateEmpty : TLTermsOfServiceUpdateBase
    method FromBytes (line 36) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/TL/TLWebAuthorization.cs
  class TLWebAuthorization (line 15) | public class TLWebAuthorization : TLObject
    method FromBytes (line 90) | public override TLObject FromBytes(byte[] bytes, ref int position)
    method Update (line 107) | public void Update(TLWebAuthorization authorization)

FILE: Telegram.Api.WP8/TL/TLWebAuthorizations.cs
  class TLWebAuthorizations (line 10) | public class TLWebAuthorizations : TLObject
    method FromBytes (line 18) | public override TLObject FromBytes(byte[] bytes, ref int position)

FILE: Telegram.Api.WP8/Transport/NativeTcpTransport.cs
  class NativeTcpTransport (line 17) | public class NativeTcpTransport : TcpTransportBase
    method NativeTcpTransport (line 40) | public NativeTcpTransport(string host, int port, string staticHost, in...
    method Wrapper_OnPacketReceived (line 144) | private void Wrapper_OnPacketReceived(ConnectionSocketWrapper sender, ...
    method Wrapper_OnClosed (line 161) | private void Wrapper_OnClosed(ConnectionSocketWrapper sender)
    method LOG (line 171) | private void LOG(string message)
    method SendPacketAsync (line 176) | public override void SendPacketAsync(string caption, byte[] data, Acti...
    method Close (line 323) | public override void Close()
    method GetTransportInfo (line 360) | public override string GetTransportInfo()

FILE: Telegram.Api.WP8/Transport/TCPTransportWinRT.cs
  class TcpTransportWinRT (line 25) | public class TcpTransportWinRT : TcpTransportBase
    method TcpTransportWinRT (line 41) | public TcpTransportWinRT(string host, int port, string staticHost, int...
    method GetInitBufferInternal (line 54) | private byte[] GetInitBufferInternal()
    method GetInitBuffer (line 102) | protected override byte[] GetInitBuffer()
    method ConnectAsync (line 108) | private async Task<bool> ConnectAsync(double timeout, Action<TcpTransp...
    method SendAsync (line 187) | private async Task<bool> SendAsync(double timeout, byte[] data, Action...
    method ReceiveAsync (line 219) | private async void ReceiveAsync(double timeout)
    method SendPacketAsync (line 285) | public override void SendPacketAsync(string caption, byte[] data, Acti...
    method Enqueue (line 343) | private void Enqueue(string caption, byte[] data, Action<TcpTransportR...
    method SendQueue (line 351) | private void SendQueue(double timeout)
    method Close (line 375) | public override void Close()
    method GetTransportInfo (line 386) | public override string GetTransportInfo()
  class AsyncExtensions (line 398) | public static class AsyncExtensions
    method WithTimeout (line 400) | public static async Task WithTimeout(this IAsyncAction task, double ti...
    method WithTimeout (line 406) | public static async Task<T> WithTimeout<T>(this IAsyncOperation<T> tas...

FILE: Telegram.Api/Aggregator/EventAggregator.cs
  type IHandle (line 18) | public interface IHandle { }
    method Handle (line 29) | void Handle(TMessage message);
  type IHandle (line 24) | public interface IHandle<TMessage> : IHandle {  //don't use contravarian...
    method Handle (line 29) | void Handle(TMessage message);
  type ITelegramEventAggregator (line 35) | public interface ITelegramEventAggregator {
    method HandlerExistsFor (line 50) | bool HandlerExistsFor(Type messageType);
    method Subscribe (line 56) | void Subscribe(object subscriber);
    method Unsubscribe (line 62) | void Unsubscribe(object subscriber);
    method Publish (line 71) | void Publish(object message);
    method Publish (line 78) | void Publish(object message, Action<System.Action> marshal);
  class TelegramEventAggregator (line 84) | public class TelegramEventAggregator : ITelegramEventAggregator {
    method TelegramEventAggregator (line 102) | public TelegramEventAggregator() {
    method HandlerExistsFor (line 122) | public bool HandlerExistsFor(Type messageType) {
    method Subscribe (line 130) | public virtual void Subscribe(object subscriber) {
    method Unsubscribe (line 147) | public virtual void Unsubscribe(object subscriber) {
    method Publish (line 169) | public virtual void Publish(object message) {
    method Publish (line 189) | public virtual void Publish(object message, Action<System.Action> mars...
    class Handler (line 217) | class Handler {
      method Handler (line 225) | public Handler(object handler) {
      method Matches (line 250) | public bool Matches(object instance) {
      method Handle (line 254) | public bool Handle(Type messageType, object message) {
      method Handles (line 272) | public bool Handles(Type messageType) {

FILE: Telegram.Api/Aggregator/ExtensionMethods.cs
  class ExtensionMethods (line 18) | public static class ExtensionMethods {
    method GetAssemblyName (line 24) | public static string GetAssemblyName(this Assembly assembly) {
    method GetAttributes (line 35) | public static IEnumerable<T> GetAttributes<T>(this MemberInfo member, ...
    method Apply (line 49) | public static void Apply<T>(this IEnumerable<T> enumerable, Action<T> ...
    method GetMemberInfo (line 60) | public static MemberInfo GetMemberInfo(this Expression expression) {
    method Zip (line 88) | public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this ...
    method GetExportedTypes (line 117) | public static IEnumerable<Type> GetExportedTypes(this Assembly assembl...
    method IsAssignableFrom (line 130) | public static bool IsAssignableFrom(this Type target, Type type) {

FILE: Telegram.Api/Compression/GZipDeflateStream.cs
  class GZipInflateStream (line 18) | internal sealed class GZipInflateStream : Stream
    method GZipInflateStream (line 23) | public GZipInflateStream(System.IO.Stream deflatedStream)
    method ProcessStream (line 29) | private void ProcessStream()
    method Flush (line 230) | public override void Flush()
    method Read (line 246) | public override int Read(byte[] buffer, int offset, int count)
    method Seek (line 251) | public override long Seek(long offset, SeekOrigin origin)
    method SetLength (line 256) | public override void SetLength(long value)
    method Write (line 261) | public override void Write(byte[] buffer, int offset, int count)
    method Close (line 266) | public override void Close()
    method Dispose (line 271) | protected override void Dispose(bool disposing)
    method BeginRead (line 276) | public override IAsyncResult BeginRead(byte[] buffer, int offset, int ...
    method ReadByte (line 280) | public override int ReadByte()
    method EndRead (line 284) | public override int EndRead(IAsyncResult asyncResult)

FILE: Telegram.Api/Compression/GZipWebClient.cs
  class GZipWebClient (line 19) | public class GZipWebClient : WebClient
    method GZipWebClient (line 24) | [SecuritySafeCritical]
    method GetWebRequest (line 35) | protected override WebRequest GetWebRequest(Uri address)
    method GetWebResponse (line 49) | protected override WebResponse GetWebResponse(WebRequest request, IAsy...
    class GZipWebResponse (line 65) | internal sealed class GZipWebResponse : HttpWebResponse
      method GZipWebResponse (line 70) | internal GZipWebResponse(HttpWebResponse resp)
      method GetResponseStream (line 75) | public override System.IO.Stream GetResponseStream()
      method Close (line 79) | public override void Close()

FILE: Telegram.Api/Constants.cs
  class Constants (line 12) | public static class Constants

FILE: Telegram.Api/Extensions/ActionExtensions.cs
  class ActionExtensions (line 12) | public static class ActionExtensions
    method SafeInvoke (line 14) | public static void SafeInvoke(this Action action)
    method SafeInvoke (line 22) | public static void SafeInvoke<T>(this Action<T> action, T param)
    method SafeInvoke (line 30) | public static void SafeInvoke<T1, T2>(this Action<T1, T2> action, T1 p...
    method SafeInvoke (line 38) | public static void SafeInvoke<T1, T2, T3>(this Action<T1, T2, T3> acti...
    method SafeInvoke (line 46) | public static void SafeInvoke<T1, T2, T3, T4>(this Action<T1, T2, T3, ...

FILE: Telegram.Api/Extensions/HttpWebRequestExtensions.cs
  class HttpWebRequestExtensions (line 14) | public static class HttpWebRequestExtensions
    method BeginAsync (line 16) | public static void BeginAsync(this HttpWebRequest request, byte[] data...
    method BeginAsync (line 21) | public static void BeginAsync(this HttpWebRequest request, byte[] data...
    method GetRequestStreamCallback (line 26) | private static void GetRequestStreamCallback(byte[] data, IAsyncResult...
    method EndAsync (line 44) | private static void EndAsync(IAsyncResult asynchronousResult, Action<b...

FILE: Telegram.Api/Extensions/StreamExtensions.cs
  class StreamExtensions (line 12) | public static class StreamExtensions
    method Write (line 14) | public static void Write(this Stream output, byte[] buffer)

FILE: Telegram.Api/Extensions/TLObjectExtensions.cs
  class TLObjectExtensions (line 13) | public static class TLObjectExtensions
    method NullableToStream (line 15) | public static void NullableToStream(this TLObject obj, Stream output)
    method NullableFromStream (line 27) | public static T NullableFromStream<T>(Stream input) where T : TLObject

FILE: Telegram.Api/Hash/CRC32/CRC.cs
  class CRC32 (line 17) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming",
    method CRC32 (line 28) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
    method CRC32 (line 71) | public CRC32()
    method Initialize (line 79) | public override void Initialize()
    method InitializeVariables (line 87) | private void InitializeVariables()
    method HashCore (line 100) | protected override void HashCore(byte[] array, int ibStart, int cbSize)
    method HashFinal (line 125) | protected override byte[] HashFinal()

FILE: Telegram.Api/Hash/MD5/MD5.cs
  type ABCDStruct (line 12) | struct ABCDStruct
  class MD5Core (line 20) | public sealed class MD5Core
    method MD5Core (line 23) | private MD5Core() {}
    method GetHash (line 25) | public static byte[] GetHash(string input, Encoding encoding)
    method GetHash (line 37) | public static byte[] GetHash(string input)
    method GetHashString (line 42) | public static string GetHashString(byte[] input)
    method GetHashString (line 53) | public static string GetHashString(string input, Encoding encoding)
    method GetHashString (line 65) | public static string GetHashString(string input)
    method GetHash (line 70) | public static byte[] GetHash(byte[] input)
    method GetHashFinalBlock (line 93) | internal static byte[] GetHashFinalBlock(byte[] input, int ibStart, in...
    method GetHashBlock (line 133) | internal static void GetHashBlock(byte[] input, ref ABCDStruct ABCDVal...
    method r1 (line 217) | private static uint r1(uint a, uint b, uint c, uint d, uint x, int s, ...
    method r2 (line 224) | private static uint r2(uint a, uint b, uint c, uint d, uint x, int s, ...
    method r3 (line 231) | private static uint r3(uint a, uint b, uint c, uint d, uint x, int s, ...
    method r4 (line 238) | private static uint r4(uint a, uint b, uint c, uint d, uint x, int s, ...
    method LSR (line 248) | private static uint LSR(uint i, int s)
    method Converter (line 254) | private static uint[] Converter(byte[] input, int ibStart)

FILE: Telegram.Api/Hash/MD5/MD5CryptoServiceProvider.cs
  class MD5CryptoServiceProvider (line 14) | public class MD5CryptoServiceProvider : MD5
    method MD5CryptoServiceProvider (line 16) | public MD5CryptoServiceProvider()
  class MD5 (line 22) | public class MD5 : IDisposable
    method Create (line 24) | static public MD5 Create(string hashName)
    method GetMd5String (line 32) | static public string GetMd5String(String source)
    method Create (line 54) | static public MD5 Create()
    method F (line 85) | static private uint F(uint x, uint y, uint z)
    method G (line 89) | static private uint G(uint x, uint y, uint z)
    method H (line 93) | static private uint H(uint x, uint y, uint z)
    method I (line 97) | static private uint I(uint x, uint y, uint z)
    method ROTATE_LEFT (line 110) | static private uint ROTATE_LEFT(uint x, byte n)
    method FF (line 120) | static private void FF(ref uint a, uint b, uint c, uint d, uint x, byt...
    method GG (line 126) | static private void GG(ref uint a, uint b, uint c, uint d, uint x, byt...
    method HH (line 132) | static private void HH(ref uint a, uint b, uint c, uint d, uint x, byt...
    method II (line 138) | static private void II(ref uint a, uint b, uint c, uint d, uint x, byt...
    method MD5 (line 163) | internal MD5()
    method Initialize (line 174) | public virtual void Initialize()
    method HashCore (line 194) | protected virtual void HashCore(byte[] input, int offset, int count)
    method HashFinal (line 234) | protected virtual byte[] HashFinal()
    method Transform (line 272) | private void Transform(byte[] block, int offset)
    method Encode (line 369) | private static void Encode(byte[] output, int outputOffset, uint[] inp...
    method Decode (line 391) | static private void Decode(uint[] output, int outputOffset, byte[] inp...
    method Clear (line 452) | public void Clear()
    method ComputeHash (line 457) | public byte[] ComputeHash(byte[] buffer)
    method ComputeHash (line 461) | public byte[] ComputeHash(byte[] buffer, int offset, int count)
    method ComputeHash (line 469) | public byte[] ComputeHash(Stream inputStream)
    method TransformBlock (line 482) | public int TransformBlock(
    method TransformFinalBlock (line 519) | public byte[] TransformFinalBlock(
    method Dispose (line 554) | protected virtual void Dispose(bool disposing)
    method Dispose (line 559) | public void Dispose()

FILE: Telegram.Api/Hash/MD5/MD5Managed.cs
  class MD5Managed (line 12) | public class MD5Managed : HashAlgorithm
    method MD5Managed (line 22) | public MD5Managed()
    method Initialize (line 28) | public override void Initialize()
    method HashCore (line 41) | protected override void HashCore(byte[] array, int ibStart, int cbSize)
    method HashFinal (line 70) | protected override byte[] HashFinal()

FILE: Telegram.Api/Helpers/Execute.cs
  class Execute (line 23) | public static class Execute
    method BeginOnThreadPool (line 25) | public static void BeginOnThreadPool(TimeSpan delay, Action action)
    method BeginOnThreadPool (line 56) | public static void BeginOnThreadPool(Action action)
    method BeginOnUIThread (line 85) | public static void BeginOnUIThread(Action action)
    method BeginOnUIThread (line 121) | public static void BeginOnUIThread(TimeSpan delay, Action action)
    method CheckAccess (line 129) | public static bool CheckAccess()
    method OnUIThread (line 144) | public static void OnUIThread(Action action)
    method ShowMessageBox (line 162) | public static void ShowMessageBox(string message)
    method ShowDebugMessage (line 175) | public static void ShowDebugMessage(string message)

FILE: Telegram.Api/Helpers/FileUtils.cs
  class FileUtils (line 33) | public static class FileUtils
    method MergePartsToFileAsync (line 35) | public static async Task MergePartsToFileAsync(Func<DownloadablePart, ...
    method MergePartsToFile (line 55) | public static void MergePartsToFile(Func<DownloadablePart, string> get...
    method Delete (line 96) | public static bool Delete(object syncRoot, string fileName)
    method Copy (line 131) | public static void Copy(object syncRoot, string fileName, string desti...
    method NotifyProgress (line 161) | public static void NotifyProgress(object itemsSyncRoot, IList<Uploadab...
    method SwitchIdleDetectionMode (line 206) | public static void SwitchIdleDetectionMode(bool enabled)
    method GetChunkSize (line 221) | public static int GetChunkSize(long totalSize)
    method GetPartsCount (line 244) | public static int GetPartsCount(long totalSize, int chunkSize)
    method GetLocalFileLength (line 249) | public static int GetLocalFileLength(string fileName)
    method GetLocalFile (line 281) | public static StorageFile GetLocalFile(string fileName)
    method CreateLocalFile (line 298) | private static StorageFile CreateLocalFile(string fileName)
    method Delete (line 307) | private static void Delete(StorageFile file)
    method CheckMissingPart (line 317) | public static void CheckMissingPart(object syncRoot, DownloadablePart ...
    method CheckMissingPartAsync (line 371) | private static async Task CheckMissingPartAsync(object syncRoot, Downl...
    method WriteBytes (line 411) | public static void WriteBytes(string fileName, byte[] bytes)
    method WriteBytes (line 428) | private static void WriteBytes(StorageFile file, byte[] data)
    method ReadBytes (line 436) | public static byte[] ReadBytes(string fileName, long position, long le...
    method ReadBytesAsync (line 457) | private static async Task<byte[]> ReadBytesAsync(StorageFile file, lon...
    method FillBuffer (line 476) | public static async Task<Tuple<bool, byte[]>> FillBuffer(IStorageFile ...
    method GetUploadableItem (line 544) | public static UploadableItem GetUploadableItem(TLLong fileId, TLObject...
    method GetUploadableItem (line 549) | public static UploadableItem GetUploadableItem(TLLong fileId, TLObject...
    method GetItemParts (line 561) | private static List<UploadablePart> GetItemParts(UploadableItem item, ...
    method Write (line 579) | public static void Write(object syncRoot, string directoryName, string...
    method WriteAsync (line 607) | private static async Task WriteAsync(string directoryName, string file...
    method Clear (line 621) | public static void Clear(object syncRoot, string directoryName)
    method ClearAsync (line 650) | private static async Task ClearAsync(string directoryName)
    method CopyLog (line 668) | public static void CopyLog(object syncRoot, string fromDirectoryName, ...
    method CopyLogAsync (line 698) | private static async Task CopyLogAsync(object syncRoot, string fromDir...
    method GetLocalFileStreamForRead (line 731) | public static Stream GetLocalFileStreamForRead(string fileName)
    method GetLocalFileStreamForWrite (line 746) | public static Stream GetLocalFileStreamForWrite(string fileName)
    method SaveWithTempFile (line 761) | public static void SaveWithTempFile<T>(string fileName, T data) where ...

FILE: Telegram.Api/Helpers/Notifications.cs
  class Notifications (line 12) | public static class Notifications
    method Disable (line 26) | public static void Disable()
    method Enable (line 31) | public static void Enable()

FILE: Telegram.Api/Helpers/PhoneHelper.cs
  class PhoneHelper (line 10) | public class PhoneHelper
    method IsLowMemoryDevice (line 16) | public static bool IsLowMemoryDevice()
    method GetOSVersion (line 43) | public static string GetOSVersion()
    method GetAppVersion (line 53) | public static string GetAppVersion()
    method GetAppAttribute (line 66) | public static string GetAppAttribute(string attributeName)
    method GetDeviceFullName (line 93) | public static string GetDeviceFullName()
    method IsWiFiEnabled (line 102) | public static bool IsWiFiEnabled()
    method IsCellularDataEnabled (line 111) | public static bool IsCellularDataEnabled()
    method GetShortPhoneModel (line 120) | public static string GetShortPhoneModel(string phoneCode)

FILE: Telegram.Api/Helpers/RequestHelper.cs
  class RequestHelper (line 10) | class RequestHelper
    method RequestHelper (line 14) | public RequestHelper(ITransport transport)
    method Send (line 19) | public TLResponse Send(string caption, int seqNo, Func<byte[]> getData)

FILE: Telegram.Api/Helpers/SettingsHelper.cs
  class SettingsHelper (line 30) | public static class SettingsHelper
    method CrossThreadAccess (line 34) | public static void CrossThreadAccess(Action<IsolatedStorageSettings> a...
    method GetValue (line 49) | public static T GetValue<T>(string key)
    method GetValue (line 72) | public static object GetValue(string key)
    method SetValue (line 98) | public static void SetValue(string key, object value)
    method SaveBackgroundSettingsAsync (line 119) | private static void SaveBackgroundSettingsAsync(object syncRoot, strin...
    method RemoveValue (line 127) | public static void RemoveValue(string key)
    method CrossThreadAccess (line 140) | public static void CrossThreadAccess(Action<Dictionary<string, object>...
    method GetValue (line 155) | public static T GetValue<T>(string key)
    method GetValue (line 178) | public static object GetValue(string key)
    method SetValue (line 202) | public static void SetValue(string key, object value)
    method RemoveValue (line 210) | public static void RemoveValue(string key)
    method GetValuesAsync (line 233) | public static async Task<Dictionary<string, object>> GetValuesAsync()
    method ReplaceNonPclTypes (line 268) | private static void ReplaceNonPclTypes(List<Type> knownTypes)
  class SettingsHelper (line 136) | public static class SettingsHelper
    method CrossThreadAccess (line 34) | public static void CrossThreadAccess(Action<IsolatedStorageSettings> a...
    method GetValue (line 49) | public static T GetValue<T>(string key)
    method GetValue (line 72) | public static object GetValue(string key)
    method SetValue (line 98) | public static void SetValue(string key, object value)
    method SaveBackgroundSettingsAsync (line 119) | private static void SaveBackgroundSettingsAsync(object syncRoot, strin...
    method RemoveValue (line 127) | public static void RemoveValue(string key)
    method CrossThreadAccess (line 140) | public static void CrossThreadAccess(Action<Dictionary<string, object>...
    method GetValue (line 155) | public static T GetValue<T>(string key)
    method GetValue (line 178) | public static object GetValue(string key)
    method SetValue (line 202) | public static void SetValue(string key, object value)
    method RemoveValue (line 210) | public static void RemoveValue(string key)
    method GetValuesAsync (line 233) | public static async Task<Dictionary<string, object>> GetValuesAsync()
    method ReplaceNonPclTypes (line 268) | private static void ReplaceNonPclTypes(List<Type> knownTypes)
  class BackgroundItem (line 349) | public class BackgroundItem { }

FILE: Telegram.Api/Helpers/Utils.cs
  class PollardRhoLong (line 32) | public class PollardRhoLong
    method Gcd (line 34) | public static long Gcd(long ths, long val)
    method Rho (line 55) | public static long Rho(long N)
  class PollardRho (line 82) | public class PollardRho
    method Rho (line 89) | public static BigInteger Rho(BigInteger N)
    method Factor (line 110) | public static WindowsPhone.Tuple<BigInteger, BigInteger> Factor(BigInt...
  class Utils (line 122) | public static class Utils
    method XapContentFileExists (line 125) | public static bool XapContentFileExists(string relativePath)
    method GetRSAFingerprint (line 131) | public static long GetRSAFingerprint(string key)
    method GetRSABytes (line 189) | public static byte[] GetRSABytes(byte[] bytes, string key)
    method GetP (line 237) | private static UInt64 GetP(UInt64 data)
    method GetPQ (line 251) | public static WindowsPhone.Tuple<UInt64, UInt64> GetPQ(UInt64 pq)
    method GetPQPollard (line 266) | public static WindowsPhone.Tuple<UInt64, UInt64> GetPQPollard(UInt64 pq)
    method GetFastPQ (line 273) | public static WindowsPhone.Tuple<UInt64, UInt64> GetFastPQ(UInt64 pq)
    method GCD (line 283) | public static long GCD(long a, long b)
    method FastFactor (line 307) | public static long FastFactor(long what)
    method XorArrays (line 363) | private static byte[] XorArrays(byte[] first, byte[] second)
    method AesIge (line 374) | public static Stream AesIge(Stream data, byte[] key, byte[] iv, bool e...
    method AesIge (line 422) | public static byte[] AesIge(byte[] data, byte[] key, byte[] iv, bool e...
    method AesIgeWinRT (line 429) | public static byte[] AesIgeWinRT(byte[] data, byte[] key, byte[] iv, b...
    method AesIge2 (line 435) | public static byte[] AesIge2(byte[] data, byte[] key, byte[] iv, bool ...
    method AesIge (line 487) | public static byte[] AesIge(byte[] data, byte[] key, byte[] iv, bool e...
    method AES_ctr128_encrypt (line 541) | public static byte[] AES_ctr128_encrypt(byte[] input, byte[] key, ref ...
    method AES_ctr128_encrypt2 (line 576) | public static byte[] AES_ctr128_encrypt2(byte[] input, byte[] key, ref...
    method AesIge (line 627) | public static byte[] AesIge(byte[] data, byte[] key, byte[] iv, bool e...
    method AesCtr (line 632) | public static byte[] AesCtr(byte[] data, byte[] key, byte[] iv, bool e...
    method StringToByteArray (line 647) | public static byte[] StringToByteArray(String hex)
    method SubArray (line 658) | public static T[] SubArray<T>(this T[] data, int index, int length)
    method DateTimeToUnixTimestamp (line 670) | public static double DateTimeToUnixTimestamp(DateTime dateTime)
    method UnixTimestampToDateTime (line 680) | public static DateTime UnixTimestampToDateTime(double unixTimeStamp)
    method ComputeSHA1 (line 691) | public static byte[] ComputeSHA1(byte[] data)
    method ComputeSHA256 (line 704) | public static byte[] ComputeSHA256(byte[] data)
    method ComputeMD5 (line 717) | public static byte[] ComputeMD5(byte[] data)
    method ComputeCRC32 (line 730) | public static byte[] ComputeCRC32(string data)
    method ComputeCRC32 (line 738) | public static byte[] ComputeCRC32(byte[] data)
    method CurrentUICulture (line 746) | public static string CurrentUICulture()

FILE: Telegram.Api/Logs/Log.cs
  class Log (line 19) | public class Log
    method Write (line 42) | public static void Write(string str, Action callback = null)
    method SyncWrite (line 62) | public static void SyncWrite(string str, Action callback = null)
    method WriteInternal (line 77) | private static void WriteInternal(string str, Action callback = null)
    method CopyTo (line 98) | public static void CopyTo(string fileName, Action<string> callback)
    method Clear (line 113) | public static void Clear(Action callback)

FILE: Telegram.Api/Services/Cache/Context.cs
  class Context (line 13) | public class Context<T> : Dictionary<long, T>
    method Context (line 15) | public Context()
    method Context (line 20) | public Context(IEnumerable<T> items, Func<T, long> keyFunc)

FILE: Telegram.Api/Services/Cache/EventArgs/DialogAddedEventArgs.cs
  class MessagesRemovedEventArgs (line 13) | public class MessagesRemovedEventArgs
    method MessagesRemovedEventArgs (line 21) | public MessagesRemovedEventArgs(TLDialogBase dialog, TLMessageBase mes...
    method MessagesRemovedEventArgs (line 27) | public MessagesRemovedEventArgs(TLDialogBase dialog, IList<TLMessageBa...
    method MessagesRemovedEventArgs (line 33) | public MessagesRemovedEventArgs(TLDialogBase dialog, TLDecryptedMessag...
  class DialogAddedEventArgs (line 40) | public class DialogAddedEventArgs
    method DialogAddedEventArgs (line 44) | public DialogAddedEventArgs(TLDialogBase dialog)
  class DialogRemovedEventArgs (line 50) | public class DialogRemovedEventArgs
    method DialogRemovedEventArgs (line 54) | public DialogRemovedEventArgs(TLDialogBase dialog)
  class ChannelAvailableMessagesEventArgs (line 60) | public class ChannelAvailableMessagesEventArgs
    method ChannelAvailableMessagesEventArgs (line 66) | public ChannelAvailableMessagesEventArgs(TLDialogBase dialog, TLInt av...

FILE: Telegram.Api/Services/Cache/EventArgs/TopMessageUpdatedEventArgs.cs
  class TopMessageUpdatedEventArgs (line 12) | public class TopMessageUpdatedEventArgs : System.EventArgs
    method TopMessageUpdatedEventArgs (line 24) | public TopMessageUpdatedEventArgs(TLPeerBase peer)
    method TopMessageUpdatedEventArgs (line 29) | public TopMessageUpdatedEventArgs(TLDialogBase dialog, TLMessageBase m...
    method TopMessageUpdatedEventArgs (line 35) | public TopMessageUpdatedEventArgs(TLDialogBase dialog, TLDecryptedMess...

FILE: Telegram.Api/Services/Cache/ICacheService.cs
  type ICacheService (line 15) | public interface ICacheService
    method ClearLocalFileNames (line 19) | void ClearLocalFileNames();
    method CompressAsync (line 20) | void CompressAsync(Action callback);
    method Commit (line 21) | void Commit();
    method TryCommit (line 22) | bool TryCommit();
    method SaveSnapshot (line 23) | void SaveSnapshot(string toDirectoryName);
    method SaveTempSnapshot (line 24) | void SaveTempSnapshot(string toDirectoryName);
    method LoadSnapshot (line 25) | void LoadSnapshot(string fromDirectoryName);
    method GetUser (line 29) | TLUserBase GetUser(TLInt id);
    method GetUser (line 30) | TLUserBase GetUser(string username);
    method GetUser (line 31) | TLUserBase GetUser(TLUserProfilePhoto photo);
    method GetMessage (line 32) | TLMessageBase GetMessage(TLInt id, TLInt channelId = null);
    method GetMessage (line 33) | TLMessageBase GetMessage(TLLong randomId);
    method GetMessage (line 34) | TLMessageBase GetMessage(TLWebPageBase webPage);
    method GetDecryptedMessage (line 35) | TLDecryptedMessageBase GetDecryptedMessage(TLInt chatId, TLLong random...
    method GetDialog (line 36) | TLDialog GetDialog(TLMessageCommon message);
    method GetDialog (line 37) | TLDialog GetDialog(TLPeerBase peer);
    method GetEncryptedDialog (line 38) | TLDialogBase GetEncryptedDialog(TLInt chatId);
    method GetChat (line 40) | TLChat GetChat(TLChatPhoto chatPhoto);
    method GetChannel (line 41) | TLChannel GetChannel(string username);
    method GetChannel (line 42) | TLChannel GetChannel(TLChatPhoto channelPhoto);
    method GetChat (line 43) | TLChatBase GetChat(TLInt id);
    method GetBroadcast (line 44) | TLBroadcastChat GetBroadcast(TLInt id);
    method GetMessages (line 46) | IList<TLMessageBase> GetMessages();
    method GetSendingMessages (line 47) | IList<TLMessageBase> GetSendingMessages();
    method GetResendingMessages (line 48) | IList<TLMessageBase> GetResendingMessages();
    method GetHistoryAsync (line 50) | void GetHistoryAsync(TLPeerBase peer, Action<IList<TLMessageBase>> cal...
    method GetHistory (line 51) | IList<TLMessageBase> GetHistory(TLPeerBase peer, int limit = Constants...
    method GetHistory (line 52) | IList<TLMessageBase> GetHistory(TLPeerBase peer, int maxId, int limit ...
    method GetHistory (line 54) | IList<TLMessageBase> GetHistory(int dialogId);
    method GetDecryptedHistory (line 55) | IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogId, int li...
    method GetDecryptedHistory (line 56) | IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogId, long r...
    method GetUnreadDecryptedHistory (line 57) | IList<TLDecryptedMessageBase> GetUnreadDecryptedHistory(int dialogId);
    method GetDialogsAsync (line 58) | void GetDialogsAsync(Action<IList<TLDialogBase>> callback);
    method GetDialogs (line 59) | IList<TLDialogBase> GetDialogs();
    method GetContactsAsync (line 60) | void GetContactsAsync(Action<IList<TLUserBase>> callback);
    method GetContacts (line 62) | List<TLUserBase> GetContacts();
    method GetUsersForSearch (line 63) | List<TLUserBase> GetUsersForSearch(IList<TLDialogBase> nonCachedDialogs);
    method GetUsers (line 64) | List<TLUserBase> GetUsers();
    method GetChats (line 65) | List<TLChatBase> GetChats();
    method GetChatsAsync (line 66) | void GetChatsAsync(Action<IList<TLChatBase>> callback);
    method ClearAsync (line 69) | void ClearAsync(Action callback = null);
    method SyncMessage (line 70) | void SyncMessage(TLMessageBase message, Action<TLMessageBase> callback);
    method SyncMessage (line 71) | void SyncMessage(TLMessageBase message, bool notifyNewDialog, bool not...
    method SyncEditedMessage (line 72) | void SyncEditedMessage(TLMessageBase message, bool notifyNewDialog, bo...
    method SyncSendingMessage (line 73) | void SyncSendingMessage(TLMessageCommon message, TLMessageBase previou...
    method SyncSendingMessages (line 74) | void SyncSendingMessages(IList<TLMessage> messages, TLMessageBase prev...
    method SyncSendingMessageId (line 75) | void SyncSendingMessageId(TLLong randomId, TLInt id, Action<TLMessageC...
    method SyncPeerMessages (line 76) | void SyncPeerMessages(TLPeerBase peer, TLMessagesBase messages, bool n...
    method AddMessagesToContext (line 77) | void AddMessagesToContext(TLMessagesBase messages, Action<TLMessagesBa...
    method SyncDialogs (line 78) | void SyncDialogs(Stopwatch stopwatch, TLDialogsBase dialogs, Action<TL...
    method SyncProxyData (line 79) | void SyncProxyData(TLProxyDataBase proxyData, Action<TLProxyDataBase> ...
    method SyncChannelDialogs (line 80) | void SyncChannelDialogs(TLDialogsBase dialogs, Action<TLDialogsBase> c...
    method MergeMessagesAndChannels (line 81) | void MergeMessagesAndChannels(TLDialogsBase dialogs);
    method SyncUser (line 82) | void SyncUser(TLUserBase user, Action<TLUserBase> callback);
    method SyncUser (line 83) | void SyncUser(TLUserFull userFull, Action<TLUserFull> callback);
    method SyncUsers (line 84) | void SyncUsers(TLVector<TLUserBase> users, Action<TLVector<TLUserBase>...
    method AddUsers (line 85) | void AddUsers(TLVector<TLUserBase> users, Action<TLVector<TLUserBase>>...
    method SyncUsersAndChats (line 86) | void SyncUsersAndChats(TLVector<TLUserBase> users, TLVector<TLChatBase...
    method SyncUserLink (line 87) | void SyncUserLink(TLLinkBase link, Action<TLLinkBase> callback);
    method SyncContacts (line 88) | void SyncContacts(TLContactsBase contacts, Action<TLContactsBase> call...
    method SyncContacts (line 89) | void SyncContacts(TLImportedContacts contacts, Action<TLImportedContac...
    method ClearDialog (line 91) | void ClearDialog(TLPeerBase peer);
    method DeleteDialog (line 92) | void DeleteDialog(TLDialogBase dialog);
    method DeleteMessages (line 93) | void DeleteMessages(TLVector<TLInt> ids);
    method DeleteChannelMessages (line 94) | void DeleteChannelMessages(TLInt channelId, TLVector<TLInt> ids);
    method DeleteMessages (line 95) | void DeleteMessages(TLPeerBase peer, TLMessageBase lastItem, TLVector<...
    method DeleteMessages (line 96) | void DeleteMessages(TLVector<TLLong> ids);
    method DeleteDecryptedMessages (line 97) | void DeleteDecryptedMessages(TLVector<TLLong> ids);
    method ClearDecryptedHistoryAsync (line 98) | void ClearDecryptedHistoryAsync(TLInt chatId);
    method ClearBroadcastHistoryAsync (line 99) | void ClearBroadcastHistoryAsync(TLInt chatId);
    method SyncStatedMessage (line 101) | void SyncStatedMessage(TLStatedMessageBase statedMessage, Action<TLSta...
    method SyncStatedMessages (line 102) | void SyncStatedMessages(TLStatedMessagesBase statedMessages, Action<TL...
    method GetConfigAsync (line 104) | void GetConfigAsync(Action<TLConfig> config);
    method GetConfig (line 105) | TLConfig GetConfig();
    method SetConfig (line 106) | void SetConfig(TLConfig config);
    method GetCdnConfigAsync (line 108) | void GetCdnConfigAsync(Action<TLCdnConfig> cdnConfig);
    method GetCdnConfig (line 109) | TLCdnConfig GetCdnConfig();
    method SetCdnCofig (line 110) | void SetCdnCofig(TLCdnConfig cdnConfig);
    method ClearConfigImportAsync (line 112) | void ClearConfigImportAsync();
    method SyncChat (line 113) | void SyncChat(TLMessagesChatFull messagesChatFull, Action<TLMessagesCh...
    method AddChats (line 114) | void AddChats(TLVector<TLChatBase> chats, Action<TLVector<TLChatBase>>...
    method SyncBroadcast (line 115) | void SyncBroadcast(TLBroadcastChat broadcast, Action<TLBroadcastChat> ...
    method GetEncryptedChat (line 117) | TLEncryptedChatBase GetEncryptedChat(TLInt id);
    method SyncEncryptedChat (line 118) | void SyncEncryptedChat(TLEncryptedChatBase encryptedChat, Action<TLEnc...
    method SyncDecryptedMessage (line 119) | void SyncDecryptedMessage(TLDecryptedMessageBase message, TLEncryptedC...
    method SyncDecryptedMessages (line 120) | void SyncDecryptedMessages(IList<WindowsPhone.Tuple<TLDecryptedMessage...
    method SyncSendingDecryptedMessage (line 121) | void SyncSendingDecryptedMessage(TLInt chatId, TLInt date, TLLong rand...
    method Init (line 123) | void Init();
    method SyncDifference (line 125) | void SyncDifference(TLDifference difference, Action<TLDifference> resu...
    method SyncDifferenceWithoutUsersAndChats (line 126) | void SyncDifferenceWithoutUsersAndChats(TLDifference difference, Actio...
    method SyncStatuses (line 127) | void SyncStatuses(TLVector<TLContactStatusBase> contacts, Action<TLVec...
    method DeleteUser (line 128) | void DeleteUser(TLInt id);
    method DeleteChat (line 129) | void DeleteChat(TLInt id);
    method DeleteUserHistory (line 130) | void DeleteUserHistory(TLPeerChannel channel, TLPeerUser peer);
    method UpdateDialogPinned (line 132) | void UpdateDialogPinned(TLPeerBase peer, bool pinned);
    method UpdatePinnedDialogs (line 133) | void UpdatePinnedDialogs(TLVector<TLPeerBase> order);
    method UpdateChannelAvailableMessages (line 134) | void UpdateChannelAvailableMessages(TLInt channelId, TLInt availableMi...
    method UpdateDialogPromo (line 135) | void UpdateDialogPromo(TLDialogBase dialogBase, bool promo);
    method GetProxyData (line 136) | TLProxyDataBase GetProxyData();
    method UpdateProxyData (line 137) | void UpdateProxyData(TLProxyDataBase proxyData);
  class ExceptionInfo (line 140) | public class ExceptionInfo
    method ToString (line 148) | public override string ToString()

FILE: Telegram.Api/Services/Cache/InMemoryCacheService.cs
  class MockupCacheService (line 24) | public class MockupCacheService : ICacheService
    method SyncProxyData (line 28) | public void SyncProxyData(TLProxyDataBase proxyData, Action<TLProxyDat...
    method ClearLocalFileNames (line 33) | public void ClearLocalFileNames()
    method CompressAsync (line 38) | public void CompressAsync(Action callback)
    method Commit (line 43) | public void Commit()
    method TryCommit (line 48) | public bool TryCommit()
    method SaveSnapshot (line 53) | public void SaveSnapshot(string toDirectoryName)
    method SaveTempSnapshot (line 58) | public void SaveTempSnapshot(string toDirectoryName)
    method LoadSnapshot (line 63) | public void LoadSnapshot(string fromDirectoryName)
    method GetUser (line 68) | public TLUserBase GetUser(TLInt id)
    method GetUser (line 73) | public TLUserBase GetUser(string username)
    method GetUser (line 78) | public TLUserBase GetUser(TLUserProfilePhoto photo)
    method GetMessage (line 83) | public TLMessageBase GetMessage(TLInt id, TLInt channelId = null)
    method GetMessage (line 88) | public TLMessageBase GetMessage(TLLong randomId)
    method GetMessage (line 93) | public TLMessageBase GetMessage(TLWebPageBase webPage)
    method GetDecryptedMessage (line 98) | public TLDecryptedMessageBase GetDecryptedMessage(TLInt chatId, TLLong...
    method GetDialog (line 103) | public TLDialog GetDialog(TLMessageCommon message)
    method GetDialog (line 108) | public TLDialog GetDialog(TLPeerBase peer)
    method GetEncryptedDialog (line 113) | public TLDialogBase GetEncryptedDialog(TLInt chatId)
    method GetChat (line 118) | public TLChat GetChat(TLChatPhoto chatPhoto)
    method GetChannel (line 123) | public TLChannel GetChannel(string username)
    method GetChannel (line 128) | public TLChannel GetChannel(TLChatPhoto channelPhoto)
    method GetChat (line 133) | public TLChatBase GetChat(TLInt id)
    method GetBroadcast (line 138) | public TLBroadcastChat GetBroadcast(TLInt id)
    method GetMessages (line 143) | public IList<TLMessageBase> GetMessages()
    method GetSendingMessages (line 148) | public IList<TLMessageBase> GetSendingMessages()
    method GetResendingMessages (line 153) | public IList<TLMessageBase> GetResendingMessages()
    method GetHistoryAsync (line 158) | public void GetHistoryAsync(TLPeerBase peer, Action<IList<TLMessageBas...
    method GetHistory (line 163) | public IList<TLMessageBase> GetHistory(TLPeerBase peer, int limit = Co...
    method GetHistory (line 168) | public IList<TLMessageBase> GetHistory(TLPeerBase peer, int maxId, int...
    method GetHistory (line 173) | public IList<TLMessageBase> GetHistory(int dialogId)
    method GetDecryptedHistory (line 178) | public IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogId,...
    method GetDecryptedHistory (line 183) | public IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogId,...
    method GetUnreadDecryptedHistory (line 188) | public IList<TLDecryptedMessageBase> GetUnreadDecryptedHistory(int dia...
    method GetDialogsAsync (line 193) | public void GetDialogsAsync(Action<IList<TLDialogBase>> callback)
    method GetDialogs (line 198) | public IList<TLDialogBase> GetDialogs()
    method GetContactsAsync (line 203) | public void GetContactsAsync(Action<IList<TLUserBase>> callback)
    method GetContacts (line 208) | public List<TLUserBase> GetContacts()
    method GetUsersForSearch (line 213) | public List<TLUserBase> GetUsersForSearch(IList<TLDialogBase> nonCache...
    method GetUsers (line 218) | public List<TLUserBase> GetUsers()
    method GetChats (line 223) | public List<TLChatBase> GetChats()
    method GetChatsAsync (line 228) | public void GetChatsAsync(Action<IList<TLChatBase>> callback)
    method ClearAsync (line 233) | public void ClearAsync(Action callback = null)
    method SyncMessage (line 238) | public void SyncMessage(TLMessageBase message, Action<TLMessageBase> c...
    method SyncMessage (line 243) | public void SyncMessage(TLMessageBase message, bool notifyNewDialog, b...
    method SyncEditedMessage (line 248) | public void SyncEditedMessage(TLMessageBase message, bool notifyNewDia...
    method SyncSendingMessage (line 253) | public void SyncSendingMessage(TLMessageCommon message, TLMessageBase ...
    method SyncSendingMessages (line 258) | public void SyncSendingMessages(IList<TLMessage> messages, TLMessageBa...
    method SyncSendingMessageId (line 263) | public void SyncSendingMessageId(TLLong randomId, TLInt id, Action<TLM...
    method SyncPeerMessages (line 268) | public void SyncPeerMessages(TLPeerBase peer, TLMessagesBase messages,...
    method AddMessagesToContext (line 274) | public void AddMessagesToContext(TLMessagesBase messages, Action<TLMes...
    method SyncDialogs (line 279) | public void SyncDialogs(Stopwatch stopwatch, TLDialogsBase dialogs, Ac...
    method SyncChannelDialogs (line 284) | public void SyncChannelDialogs(TLDialogsBase dialogs, Action<TLDialogs...
    method MergeMessagesAndChannels (line 289) | public void MergeMessagesAndChannels(TLDialogsBase dialogs)
    method SyncUser (line 294) | public void SyncUser(TLUserBase user, Action<TLUserBase> callback)
    method SyncUser (line 299) | public void SyncUser(TLUserFull userFull, Action<TLUserFull> callback)
    method SyncUsers (line 304) | public void SyncUsers(TLVector<TLUserBase> users, Action<TLVector<TLUs...
    method AddUsers (line 309) | public void AddUsers(TLVector<TLUserBase> users, Action<TLVector<TLUse...
    method SyncUsersAndChats (line 314) | public void SyncUsersAndChats(TLVector<TLUserBase> users, TLVector<TLC...
    method SyncUserLink (line 319) | public void SyncUserLink(TLLinkBase link, Action<TLLinkBase> callback)
    method SyncContacts (line 324) | public void SyncContacts(TLContactsBase contacts, Action<TLContactsBas...
    method SyncContacts (line 329) | public void SyncContacts(TLImportedContacts contacts, Action<TLImporte...
    method ClearDialog (line 334) | public void ClearDialog(TLPeerBase peer)
    method DeleteDialog (line 339) | public void DeleteDialog(TLDialogBase dialog)
    method DeleteMessages (line 344) | public void DeleteMessages(TLVector<TLInt> ids)
    method DeleteChannelMessages (line 349) | public void DeleteChannelMessages(TLInt channelId, TLVector<TLInt> ids)
    method DeleteMessages (line 354) | public void DeleteMessages(TLPeerBase peer, TLMessageBase lastItem, TL...
    method DeleteMessages (line 359) | public void DeleteMessages(TLVector<TLLong> ids)
    method DeleteDecryptedMessages (line 364) | public void DeleteDecryptedMessages(TLVector<TLLong> ids)
    method ClearDecryptedHistoryAsync (line 369) | public void ClearDecryptedHistoryAsync(TLInt chatId)
    method ClearBroadcastHistoryAsync (line 374) | public void ClearBroadcastHistoryAsync(TLInt chatId)
    method SyncStatedMessage (line 379) | public void SyncStatedMessage(TLStatedMessageBase statedMessage, Actio...
    method SyncStatedMessages (line 384) | public void SyncStatedMessages(TLStatedMessagesBase statedMessages, Ac...
    method GetCdnConfigAsync (line 393) | public void GetCdnConfigAsync(Action<TLCdnConfig> callback)
    method GetCdnConfig (line 403) | public TLCdnConfig GetCdnConfig()
    method SetCdnCofig (line 413) | public void SetCdnCofig(TLCdnConfig cdnConfig)
    method GetConfig (line 422) | public TLConfig GetConfig()
    method GetConfigAsync (line 434) | public void GetConfigAsync(Action<TLConfig> callback)
    method SetConfig (line 445) | public void SetConfig(TLConfig config)
    method ClearConfigImportAsync (line 453) | public void ClearConfigImportAsync()
    method SyncChat (line 458) | public void SyncChat(TLMessagesChatFull messagesChatFull, Action<TLMes...
    method AddChats (line 463) | public void AddChats(TLVector<TLChatBase> chats, Action<TLVector<TLCha...
    method SyncBroadcast (line 468) | public void SyncBroadcast(TLBroadcastChat broadcast, Action<TLBroadcas...
    method GetEncryptedChat (line 473) | public TLEncryptedChatBase GetEncryptedChat(TLInt id)
    method SyncEncryptedChat (line 478) | public void SyncEncryptedChat(TLEncryptedChatBase encryptedChat, Actio...
    method SyncDecryptedMessage (line 483) | public void SyncDecryptedMessage(TLDecryptedMessageBase message, TLEnc...
    method SyncDecryptedMessages (line 488) | public void SyncDecryptedMessages(IList<WindowsPhone.Tuple<TLDecrypted...
    method SyncSendingDecryptedMessage (line 493) | public void SyncSendingDecryptedMessage(TLInt chatId, TLInt date, TLLo...
    method Init (line 498) | public void Init()
    method SyncDifference (line 503) | public void SyncDifference(TLDifference difference, Action<TLDifferenc...
    method SyncDifferenceWithoutUsersAndChats (line 508) | public void SyncDifferenceWithoutUsersAndChats(TLDifference difference...
    method SyncStatuses (line 513) | public void SyncStatuses(TLVector<TLContactStatusBase> contacts, Actio...
    method DeleteUser (line 518) | public void DeleteUser(TLInt id)
    method DeleteChat (line 523) | public void DeleteChat(TLInt id)
    method DeleteUserHistory (line 528) | public void DeleteUserHistory(TLPeerChannel channel, TLPeerUser peer)
    method UpdateDialogPinned (line 533) | public void UpdateDialogPinned(TLPeerBase peer, bool pinned)
    method UpdatePinnedDialogs (line 538) | public void UpdatePinnedDialogs(TLVector<TLPeerBase> order)
    method UpdateChannelAvailableMessages (line 543) | public void UpdateChannelAvailableMessages(TLInt channelId, TLInt avai...
    method UpdateDialogPromo (line 548) | public void UpdateDialogPromo(TLDialogBase dialogBase, bool promo)
    method GetProxyData (line 553) | public TLProxyDataBase GetProxyData()
    method UpdateProxyData (line 558) | public void UpdateProxyData(TLProxyDataBase proxyData)
  class InMemoryCacheService (line 564) | public class InMemoryCacheService : ICacheService
    method Init (line 615) | public void Init()
    method InMemoryCacheService (line 629) | public InMemoryCacheService(ITelegramEventAggregator eventAggregator)
    method GetDialogs (line 636) | public IList<TLDialogBase> GetDialogs()
    method GetDialogsAsync (line 666) | public void GetDialogsAsync(Action<IList<TLDialogBase>> callback)
    method GetUsers (line 699) | public List<TLUserBase> GetUsers()
    method GetContacts (line 728) | public List<TLUserBase> GetContacts()
    method GetUsersForSearch (line 758) | public List<TLUserBase> GetUsersForSearch(IList<TLDialogBase> nonCache...
    method GetContactsAsync (line 833) | public void GetContactsAsync(Action<IList<TLUserBase>> callback)
    method GetChats (line 868) | public List<TLChatBase> GetChats()
    method GetChatsAsync (line 898) | public void GetChatsAsync(Action<IList<TLChatBase>> callback)
    method GetChat (line 932) | public TLChatBase GetChat(TLInt id)
    method GetBroadcast (line 942) | public TLBroadcastChat GetBroadcast(TLInt id)
    method GetEncryptedChat (line 952) | public TLEncryptedChatBase GetEncryptedChat(TLInt id)
    method GetUser (line 962) | public TLUserBase GetUser(TLInt id)
    method GetUser (line 972) | public TLUserBase GetUser(TLUserProfilePhoto photo)
    method GetUser (line 979) | public TLUserBase GetUser(string username)
    method GetMessage (line 986) | public TLMessageBase GetMessage(TLInt id, TLInt channelId = null)
    method GetMessage (line 1002) | public TLMessageBase GetMessage(TLLong randomId)
    method GetMessage (line 1007) | public TLMessageBase GetMessage(TLWebPageBase webPageBase)
    method GetDialog (line 1078) | public TLDialog GetDialog(TLMessageCommon message)
    method GetDialog (line 1092) | public TLDialog GetDialog(TLPeerBase peer)
    method GetEncryptedDialog (line 1099) | public TLDialogBase GetEncryptedDialog(TLInt chatId)
    method GetChat (line 1104) | public TLChat GetChat(TLChatPhoto chatPhoto)
    method GetChannel (line 1109) | public TLChannel GetChannel(string username)
    method GetChannel (line 1116) | public TLChannel GetChannel(TLChatPhoto chatPhoto)
    method GetHistory (line 1123) | public IList<TLMessageBase> GetHistory(int dialogIndex)
    method GetDecryptedMessage (line 1165) | public TLDecryptedMessageBase GetDecryptedMessage(TLInt chatId, TLLong...
    method GetDecryptedHistory (line 1203) | public IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogInd...
    method GetUnreadDecryptedHistory (line 1245) | public IList<TLDecryptedMessageBase> GetUnreadDecryptedHistory(int dia...
    method GetDecryptedHistory (line 1285) | public IList<TLDecryptedMessageBase> GetDecryptedHistory(int dialogInd...
    method GetHistory (line 1344) | public IList<TLMessageBase> GetHistory(TLPeerBase peer, int maxId, int...
    method GetHistory (line 1417) | public IList<TLMessageBase> GetHistory(TLPeerBase peer, int limit = Co...
    method GetHistoryAsync (line 1475) | public void GetHistoryAsync(TLPeerBase peer, Action<IList<TLMessageBas...
    method ClearAsync (line 1485) | public void ClearAsync(Action callback = null)
    method GetCachedMessage (line 1500) | private TLMessageBase GetCachedMessage(TLMessageBase message)
    method GetCachedDecryptedMessage (line 1531) | private TLDecryptedMessageBase GetCachedDecryptedMessage(TLLong randomId)
    method GetCachedDecryptedMessage (line 1541) | private TLDecryptedMessageBase GetCachedDecryptedMessage(TLDecryptedMe...
    method SyncSendingMessages (line 1557) | public void SyncSendingMessages(IList<TLMessage> messages, TLMessageBa...
    method SyncSendingMessageId (line 1605) | public void SyncSendingMessageId(TLLong randomId, TLInt id, Action<TLM...
    method SyncSendingMessage (line 1649) | public void SyncSendingMessage(TLMessageCommon message, TLMessageBase ...
    method SyncSendingDecryptedMessage (line 1707) | public void SyncSendingDecryptedMessage(TLInt chatId, TLInt date, TLLo...
    method SyncDecryptedMessages (line 1730) | public void SyncDecryptedMessages(IList<WindowsPhone.Tuple<TLDecrypted...
    method SyncDecryptedMessage (line 1775) | public void SyncDecryptedMessage(TLDecryptedMessageBase message, TLEnc...
    method SyncMessage (line 1819) | public void SyncMessage(TLMessageBase message, Action<TLMessageBase> c...
    method SyncEditedMessage (line 1824) | public void SyncEditedMessage(TLMessageBase message, bool notifyNewDia...
    method SyncMessage (line 1881) | public void SyncMessage(TLMessageBase message, bool notifyNewDialog, b...
    method SyncPeerMessages (line 1950) | public void SyncPeerMessages(TLPeerBase peer, TLMessagesBase messages,...
    method ProcessPeerReading (line 1975) | private void ProcessPeerReading(TLPeerBase peer, TLMessagesBase messages)
    method AddMessagesToContext (line 2017) | public void AddMessagesToContext(TLMessagesBase messages, Action<TLMes...
    method SyncStatuses (line 2046) | public void SyncStatuses(TLVector<TLContactStatusBase> contactStatuses...
    method SyncDifference (line 2079) | public void SyncDifference(TLDifference difference, Action<TLDifferenc...
    method SyncDifferenceWithoutUsersAndChats (line 2103) | public void SyncDifferenceWithoutUsersAndChats(TLDifference difference...
    method SyncMessageInternal (line 2133) | private void SyncMessageInternal(TLPeerBase peer, TLMessageBase messag...
    method SyncMessagesInternal (line 2176) | private void SyncMessagesInternal(TLPeerBase peer, IEnumerable<TLMessa...
    method SyncDialogsInternal (line 2272) | private void SyncDialogsInternal(Stopwatch stopwatch2, TLDialogsBase d...
    method SyncChannelDialogsInternal (line 2334) | private void SyncChannelDialogsInternal(TLDialogsBase dialogs, TLDialo...
    method SyncDialogs (line 2377) | public void SyncDialogs(Stopwatch stopwatch, TLDialogsBase dialogs, Ac...
    method SyncProxyData (line 2414) | public void SyncProxyData(TLProxyDataBase proxyData, Action<TLProxyDat...
    method SyncChannelDialogs (line 2432) | public void SyncChannelDialogs(TLDialogsBase dialogs, Action<TLDialogs...
    method MergeReadMaxIdAndNotifySettings (line 2465) | private void MergeReadMaxIdAndNotifySettings(TLDialogsBase dialogs)
    method MergeMessagesAndChannels (line 2555) | public void MergeMessagesAndChannels(TLDialogsBase dialogs)
    method SyncUserLink (line 2711) | public void SyncUserLink(TLLinkBase link, Action<TLLinkBase> callback)
    method SyncUser (line 2733) | public void SyncUser(TLUserFull userFull, Action<TLUserFull> callback)
    method SyncUser (line 2763) | public void SyncUser(TLUserBase user, Action<TLUserBase> callback)
    method SyncUsers (line 2784) | public void SyncUsers(TLVector<TLUserBase> users, Action<TLVector<TLUs...
    method SyncUsersAndChats (line 2805) | public void SyncUsersAndChats(TLVector<TLUserBase> users, TLVector<TLC...
    method SyncUserInternal (line 2828) | private void SyncUserInternal(TLUserBase user, out TLUserBase result)
    method SyncUsersInternal (line 2866) | private void SyncUsersInternal(TLVector<TLUserBase> users, TLVector<TL...
    method SyncEncryptedChatInternal (line 2928) | private void SyncEncryptedChatInternal(TLEncryptedChatBase chat, out T...
    method SyncEncryptedChat (line 3018) | public void SyncEncryptedChat(TLEncryptedChatBase encryptedChat, Actio...
    method SyncEncryptedMessagesInternal (line 3036) | public void SyncEncryptedMessagesInternal(TLInt qts, TLVector<TLEncryp...
    method AddChats (line 3229) | public void AddChats(TLVector<TLChatBase> chats, Action<TLVector<TLCha...
    method SyncChat (line 3258) | public void SyncChat(TLMessagesChatFull messagesChatFull, Action<TLMes...
    method SyncChats (line 3294) | public void SyncChats(TLVector<TLChatBase> chats, Action<TLVector<TLCh...
    method SyncChatsInternal (line 3315) | private void SyncChatsInternal(TLVector<TLChatBase> chats, TLVector<TL...
    method SyncChatInternal (line 3372) | private void SyncChatInternal(TLChatBase chat, out TLChatBase result)
    method SyncBroadcast (line 3412) | public void SyncBroadcast(TLBroadcastChat broadcast, Action<TLBroadcas...
    method SyncBroadcastInternal (line 3433) | private void SyncBroadcastInternal(TLBroadcastChat chat, out TLBroadca...
    method AddUsers (line 3466) | public void AddUsers(TLVector<TLUserBase> users, Action<TLVector<TLUse...
    method SyncContacts (line 3495) | public void SyncContacts(TLImportedContacts contacts, Action<TLImporte...
    method SyncStatedMessage (line 3516) | public void SyncStatedMessage(TLStatedMessageBase statedMessage, Actio...
    method SyncStatedMessages (line 3561) | public void SyncStatedMessages(TLStatedMessagesBase statedMessages, Ac...
    method UpdateDialogPinned (line 3592) | public void UpdateDialogPinned(TLPeerBase peer, bool pinned)
    method UpdatePinnedDialogs (line 3600) | public void UpdatePinnedDialogs(TLVector<TLPeerBase> order)
    method GetProxyData (line 3608) | public TLProxyDataBase GetProxyData()
    method UpdateProxyData (line 3615) | public void UpdateProxyData(TLProxyDataBase proxyData)
    method UpdateChannelAvailableMessages (line 3623) | public void UpdateChannelAvailableMessages(TLInt channelId, TLInt avai...
    method UpdateDialogPromo (line 3632) | public void UpdateDialogPromo(TLDialogBase dialogBase, bool promo)
    method DeleteDialog (line 3640) | public void DeleteDialog(TLDialogBase dialog)
    method ClearDialog (line 3650) | public void ClearDialog(TLPeerBase peer)
    method DeleteUser (line 3660) | public void DeleteUser(TLInt id)
    method DeleteChat (line 3666) | public void DeleteChat(TLInt id)
    method DeleteMessages (line 3672) | public void DeleteMessages(TLVector<TLLong> randomIds)
    method DeleteDecryptedMessages (line 3693) | public void DeleteDecryptedMessages(TLVector<TLLong> randomIds)
    method ClearDecryptedHistoryAsync (line 3712) | public void ClearDecryptedHistoryAsync(TLInt chatId)
    method ClearBroadcastHistoryAsync (line 3719) | public void ClearBroadcastHistoryAsync(TLInt chatId)
    method DeleteMessages (line 3726) | public void DeleteMessages(TLPeerBase peer, TLMessageBase lastItem, TL...
    method DeleteMessages (line 3735) | public void DeleteMessages(TLVector<TLInt> ids)
    method DeleteUserHistory (line 3751) | public void DeleteUserHistory(TLPeerChannel channel, TLPeerUser user)
    method DeleteChannelMessages (line 3760) | public void DeleteChannelMessages(TLInt channelId, TLVector<TLInt> ids)
    method SyncContactsInternal (line 3785) | private void SyncContactsInternal(TLImportedContacts contacts, TLImpor...
    method SyncContacts (line 3839) | public void SyncContacts(TLContactsBase contacts, Action<TLContactsBas...
    method SyncContactsInternal (line 3866) | private void SyncContactsInternal(TLContacts contacts, TLContacts result)
    method GetCdnConfigAsync (line 3926) | public void GetCdnConfigAsync(Action<TLCdnConfig> callback)
    method GetCdnConfig (line 3936) | public TLCdnConfig GetCdnConfig()
    method SetCdnCofig (line 3946) | public void SetCdnCofig(TLCdnConfig cdnConfig)
    method GetConfig (line 3955) | public TLConfig GetConfig()
    method GetConfigAsync (line 3967) | public void GetConfigAsync(Action<TLConfig> callback)
    method SetConfig (line 3974) | public void SetConfig(TLConfig config)
    method ClearConfigImportAsync (line 3982) | public void ClearConfigImportAsync()
    method GetSendingMessages (line 4005) | public IList<TLMessageBase> GetSendingMessages()
    method GetResendingMessages (line 4010) | public IList<TLMessageBase> GetResendingMessages()
    method GetMessages (line 4015) | public IList<TLMessageBase> GetMessages()
    method Commit (line 4045) | public void Commit()
    method CompressAsync (line 4053) | public void CompressAsync(Action callback)
    method ClearLocalFileNames (line 4066) | public void ClearLocalFileNames()
    method TryCommit (line 4074) | public bool TryCommit()
    method SaveSnapshot (line 4086) | public void SaveSnapshot(string toDirectoryName)
    method SaveTempSnapshot (line 4094) | public void SaveTempSnapshot(string toDirectoryName)
    method LoadSnapshot (line 4102) | public void LoadSnapshot(string fromDirectoryName)

FILE: Telegram.Api/Services/Cache/InMemoryDatabase.cs
  class InMemoryDatabase (line 26) | public class InMemoryDatabase : IDisposable
    method InMemoryDatabase (line 96) | public InMemoryDatabase(ITelegramEventAggregator eventAggregator)
    method AddDialog (line 112) | public void AddDialog(TLDialog dialog)
    method RemoveMessageFromContext (line 181) | public void RemoveMessageFromContext(TLMessageBase message)
    method RemoveDecryptedMessageFromContext (line 205) | public void RemoveDecryptedMessageFromContext(TLDecryptedMessageBase m...
    method AddMessageToContext (line 217) | public void AddMessageToContext(TLMessageBase message)
    method AddDecryptedMessageToContext (line 249) | public void AddDecryptedMessageToContext(TLDecryptedMessageBase message)
    method AddUser (line 261) | public void AddUser(TLUserBase user)
    method AddChat (line 269) | public void AddChat(TLChatBase chat)
    method AddEncryptedChat (line 277) | public void AddEncryptedChat(TLEncryptedChatBase chat)
    method AddBroadcast (line 285) | public void AddBroadcast(TLBroadcastChat broadcast)
    method SaveSnapshot (line 293) | public void SaveSnapshot(string toDirectoryName)
    method SaveTempSnapshot (line 307) | public void SaveTempSnapshot(string toDirectoryName)
    method CopyInternal (line 321) | private void CopyInternal(object syncRoot, string fileName, string des...
    method LoadSnapshot (line 326) | public void LoadSnapshot(string fromDirectoryName)
    method Clear (line 340) | public void Clear()
    method ClearInternal (line 362) | private void ClearInternal(object syncRoot, string fileName)
    method AddDecryptedMessageCommon (line 367) | private void AddDecryptedMessageCommon(TLDecryptedMessageBase message,...
    method CorrectDialogOrder (line 471) | private void CorrectDialogOrder(TLDialogBase dialog, int dateIndex, in...
    method AddMessageCommon (line 514) | private void AddMessageCommon(TLMessageBase message, bool notifyNewDia...
    method GetEncryptedDialog (line 761) | private TLEncryptedDialog GetEncryptedDialog(TLInt id)
    method GetEncryptedDialog (line 777) | private TLEncryptedDialog GetEncryptedDialog(TLEncryptedChatBase peer)
    method GetEncryptedDialog (line 793) | private TLEncryptedDialog GetEncryptedDialog(TLDecryptedMessageBase co...
    method GetDialog (line 812) | public TLDialogBase GetDialog(TLPeerBase peer)
    method GetDialog (line 856) | private TLDialogBase GetDialog(TLMessageCommon commonMessage)
    method UpdateSendingMessageContext (line 905) | public void UpdateSendingMessageContext(TLMessageBase message)
    method UpdateSendingMessage (line 914) | public void UpdateSendingMessage(TLMessageBase message, TLMessageBase ...
    method UpdateSendingDecryptedMessage (line 956) | public void UpdateSendingDecryptedMessage(TLInt chatId, TLInt date, TL...
    method AddSendingMessage (line 983) | public void AddSendingMessage(TLMessageBase message, TLMessageBase pre...
    method AddSendingMessage (line 1031) | public void AddSendingMessage(TLMessageBase message, TLMessageBase pre...
    method AddDecryptedMessage (line 1057) | public void AddDecryptedMessage(TLDecryptedMessageBase message, TLEncr...
    method AddMessage (line 1101) | public void AddMessage(TLMessageBase message, bool notifyNewDialogs = ...
    method ClearDecryptedHistory (line 1146) | public void ClearDecryptedHistory(TLInt chatId)
    method ClearBroadcastHistory (line 1192) | public void ClearBroadcastHistory(TLInt chatId)
    method DeleteDecryptedMessage (line 1246) | public void DeleteDecryptedMessage(TLDecryptedMessageBase message, TLP...
    method GetMessage (line 1307) | public TLMessageBase GetMessage(TLPeerBase peer, TLInt messageId)
    method DeleteMessages (line 1323) | public void DeleteMessages(TLPeerBase peer, TLMessageBase lastMessage,...
    method DeleteUserHistory (line 1455) | public void DeleteUserHistory(TLPeerBase channel, TLPeerBase user)
    method DeleteMessages (line 1590) | public void DeleteMessages(IList<TLMessageBase> messages, TLPeerBase p...
    method DeleteMessage (line 1712) | public void DeleteMessage(TLMessageBase message)
    method ReplaceUser (line 1811) | public void ReplaceUser(int index, TLUserBase user)
    method DeleteUser (line 1836) | public void DeleteUser(TLInt id)
    method DeleteUser (line 1841) | public void DeleteUser(TLUserBase user)
    method ReplaceChat (line 1846) | public void ReplaceChat(int index, TLChatBase chat)
    method ReplaceBroadcast (line 1871) | public void ReplaceBroadcast(int index, TLBroadcastChat chat)
    method ReplaceEncryptedChat (line 1896) | public void ReplaceEncryptedChat(int index, TLEncryptedChatBase chat)
    method DeleteChat (line 1921) | public void DeleteChat(TLInt id)
    method DeleteChat (line 1926) | public void DeleteChat(TLChatBase chat)
    method DeleteDialog (line 1931) | public void DeleteDialog(TLDialogBase dialogBase)
    method UpdatePinnedDialogs (line 1945) | public void UpdatePinnedDialogs(TLPeerDialogs peerDialogs)
    method UpdateProxyData (line 1950) | public void UpdateProxyData(TLProxyDataBase proxyDaya)
    method UpdateDialogPinned (line 1958) | public void UpdateDialogPinned(TLPeerBase peer, bool pinned)
    method UpdateDialogPromo (line 1998) | public void UpdateDialogPromo(TLDialogBase dialogBase, bool promo)
    method UpdateChannelAvailableMessages (line 2075) | public void UpdateChannelAvailableMessages(TLPeerBase peer, TLInt avai...
    method ClearDialog (line 2173) | public void ClearDialog(TLPeerBase peer)
    method Log (line 2298) | private static void Log(string str)
    method Open (line 2305) | public void Open()
    method RaiseCommitInvoked (line 2609) | protected virtual void RaiseCommitInvoked()
    method Commit (line 2615) | public void Commit()
    method CommitInternal (line 2621) | public void CommitInternal()
    method CountRecords (line 2680) | public int CountRecords<T>() where T : TLObject
    method Dispose (line 2718) | public void Dispose()
    method Compress (line 2723) | public void Compress()
    method ClearLocalFileNames (line 2747) | public void ClearLocalFileNames()

FILE: Telegram.Api/Services/Connection/ConnectionService.cs
  type IConnectionService (line 25) | public interface IConnectionService
    method Initialize (line 27) | void Initialize(IMTProtoService mtProtoService);
  class ConnectionService (line 31) | public class ConnectionService : IConnectionService
    method RaiseConnectionFailed (line 35) | protected virtual void RaiseConnectionFailed()
    method Initialize (line 43) | public void Initialize(IMTProtoService mtProtoService)
    method ConnectionService (line 57) | public ConnectionService(IDeviceInfoService deviceInfoService)
    method CheckConnectionState (line 220) | private void CheckConnectionState(object state)

FILE: Telegram.Api/Services/Connection/PublicConfigService.cs
  class MockupPublicConfigService (line 28) | public class MockupPublicConfigService : IPublicConfigService
    method GetAsync (line 30) | public void GetAsync(Action<TLConfigSimple> callback, Action<Exception...
  class PublicConfigService (line 36) | public class PublicConfigService : IPublicConfigService
    method Log (line 38) | private static void Log(string str)
    method PerformAppRequestAsync (line 47) | private void PerformAppRequestAsync(Action<TLConfigSimple> callback, A...
    method PerformDnsRequestAsync (line 149) | private void PerformDnsRequestAsync(Action<TLConfigSimple> callback, A...
    method DecryptSimpleConfig (line 191) | private static TLConfigSimple DecryptSimpleConfig(string dataString)
    method GetAsync (line 316) | public void GetAsync(Action<TLConfigSimple> callback, Action<Exception...
    method ParseDataString (line 344) | private static string ParseDataString(string dataString)
  type IPublicConfigService (line 383) | public interface IPublicConfigService
    method GetAsync (line 385) | void GetAsync(Action<TLConfigSimple> callback, Action<Exception> fault...
  class Question (line 388) | public class Question
  class Answer (line 394) | public class Answer
  class RootObject (line 402) | public class RootObject

FILE: Telegram.Api/Services/DCOptionItem.cs
  class ConnectionParams (line 10) | public class ConnectionParams
  class DCOptionItem (line 19) | public class DCOptionItem

FILE: Telegram.Api/Services/DelayedItem.cs
  class DelayedItem (line 14) | class DelayedItem
    method ToString (line 26) | public override string ToString()

FILE: Telegram.Api/Services/DeviceInfo/EmptyDeviceInfoService.cs
  class DeviceInfoService (line 12) | public class DeviceInfoService : IDeviceInfoService
    method DeviceInfoService (line 21) | public DeviceInfoService(string model, string appVersion, string syste...
    method DeviceInfoService (line 31) | public DeviceInfoService(TLInitConnection initConnection, bool isBackg...

FILE: Telegram.Api/Services/DeviceInfo/IDeviceInfo.cs
  type IDeviceInfoService (line 10) | public interface IDeviceInfoService

FILE: Telegram.Api/Services/FileManager/AudioFileManager.cs
  class AudioFileManager (line 16) | public class AudioFileManager : FileManagerBase, IAudioFileManager
    method AudioFileManager (line 18) | public AudioFileManager(ITelegramEventAggregator eventAggregator, IMTP...
    method OnDownloading (line 27) | private void OnDownloading(object state)
    method DownloadFile (line 148) | public void DownloadFile(TLInt dcId, TLInputFileLocationBase fileLocat...
    method GetDownloadableItem (line 191) | private DownloadableItem GetDownloadableItem(TLInt dcId, TLInputFileLo...

FILE: Telegram.Api/Services/FileManager/DocumentFileManager.cs
  class DocumentFileManager (line 19) | public class DocumentFileManager : FileManagerBase, IDocumentFileManager
    method DocumentFileManager (line 21) | public DocumentFileManager(ITelegramEventAggregator eventAggregator, I...
    method OnDownloading (line 30) | private void OnDownloading(object state)
    method DownloadFileAsync (line 175) | public void DownloadFileAsync(TLString originalFileName, TLInt dcId, T...
    method GetDownloadableItem (line 241) | private DownloadableItem GetDownloadableItem(TLString fileName, TLInt ...
    method GetItemParts (line 256) | protected override List<DownloadablePart> GetItemParts(TLInt size, Dow...

FILE: Telegram.Api/Services/FileManager/DownloadableItem.cs
  class DownloadableItem (line 13) | public class DownloadableItem
    method IncreaseTimeout (line 49) | public void IncreaseTimeout()

FILE: Telegram.Api/Services/FileManager/DownloadablePart.cs
  type PartStatus (line 12) | public enum PartStatus
  class DownloadablePart (line 19) | public class DownloadablePart
    method DownloadablePart (line 37) | public DownloadablePart(DownloadableItem item, TLInt offset, TLInt lim...
    method ToString (line 46) | public override string ToString()

FILE: Telegram.Api/Services/FileManager/DownloadingCanceledEventArgs.cs
  class DownloadingCanceledEventArgs (line 10) | public class DownloadingCanceledEventArgs
    method DownloadingCanceledEventArgs (line 14) | public DownloadingCanceledEventArgs(DownloadableItem item)

FILE: Telegram.Api/Services/FileManager/EncryptedFileManager.cs
  class EncryptedFileManager (line 17) | public class EncryptedFileManager : FileManagerBase, IEncryptedFileManager
    method EncryptedFileManager (line 19) | public EncryptedFileManager(ITelegramEventAggregator eventAggregator, ...
    method OnDownloading (line 28) | private void OnDownloading(object state)
    method DownloadFile (line 135) | public void DownloadFile(TLEncryptedFile file, TLObject owner, Action<...
    method GetDownloadableItem (line 185) | private DownloadableItem GetDownloadableItem(TLInt dcId, TLInputFileLo...
    method GetItemParts (line 199) | protected override List<DownloadablePart> GetItemParts(TLInt size, Dow...

FILE: Telegram.Api/Services/FileManager/FileManager.cs
  class FileManager (line 18) | public class FileManager : FileManagerBase, IFileManager
    method FileManager (line 20) | public FileManager(ITelegramEventAggregator eventAggregator, IMTProtoS...
    method OnDownloading (line 29) | private void OnDownloading(object state)
    method DownloadFile (line 166) | public void DownloadFile(TLFileLocation file, TLObject owner, TLInt fi...
    method DownloadFile (line 193) | public void DownloadFile(TLFileLocation file, TLObject owner, TLInt fi...
    method GetDownloadableItem (line 234) | protected DownloadableItem GetDownloadableItem(TLFileLocation location...
  class StringLocker (line 249) | public class StringLocker
    method Lock (line 255) | public static void Lock(string key, Action action)

FILE: Telegram.Api/Services/FileManager/FileManagerBase.cs
  class FileManagerBase (line 18) | public abstract class FileManagerBase
    method FileManagerBase (line 34) | protected FileManagerBase(ITelegramEventAggregator eventAggregator, IM...
    method ProcessFilePart (line 40) | protected void ProcessFilePart(DownloadablePart part, TLInt dcId, TLIn...
    method GetFile (line 89) | protected TLFileBase GetFile(TLInt dcId, TLInputFileLocationBase locat...
    method ReuploadFile (line 131) | protected TLVector<TLFileHash> ReuploadFile(TLFileCdnRedirect redirect...
    method GetIV (line 184) | protected byte[] GetIV(byte[] ivec, TLInt offset)
    method GetCdnFile (line 201) | protected TLFileBase GetCdnFile(TLFileCdnRedirect redirect, TLInt offs...
    method GetItemParts (line 279) | protected virtual List<DownloadablePart> GetItemParts(TLInt size, Down...
    method CancelDownloadFile (line 293) | public void CancelDownloadFile(TLObject owner)
    method CancelDownloadFileAsync (line 306) | public void CancelDownloadFileAsync(TLObject owner)
    method StartAwaitingWorkers (line 311) | protected void StartAwaitingWorkers()

FILE: Telegram.Api/Services/FileManager/IAudioFileManager.cs
  type IAudioFileManager (line 12) | public interface IAudioFileManager
    method DownloadFile (line 14) | void DownloadFile(TLInt dcId, TLInputFileLocationBase file, TLObject o...
    method CancelDownloadFile (line 15) | void CancelDownloadFile(TLObject owner);

FILE: Telegram.Api/Services/FileManager/IDocumentFileManager.cs
  type IDocumentFileManager (line 13) | public interface IDocumentFileManager
    method DownloadFileAsync (line 15) | void DownloadFileAsync(TLString fileName, TLInt dcId, TLInputFileLocat...
    method CancelDownloadFileAsync (line 16) | void CancelDownloadFileAsync(TLObject owner);

FILE: Telegram.Api/Services/FileManager/IEncryptedFileManager.cs
  type IEncryptedFileManager (line 13) | public interface IEncryptedFileManager
    method DownloadFile (line 15) | void DownloadFile(TLEncryptedFile file, TLObject owner, Action<Downloa...
    method CancelDownloadFile (line 16) | void CancelDownloadFile(TLObject owner);

FILE: Telegram.Api/Services/FileManager/IFileManager.cs
  type IFileManager (line 12) | public interface IFileManager
    method DownloadFile (line 14) | void DownloadFile(TLFileLocation file, TLObject owner, TLInt fileSize);
    method DownloadFile (line 15) | void DownloadFile(TLFileLocation file, TLObject owner, TLInt fileSize,...
    method CancelDownloadFile (line 16) | void CancelDownloadFile(TLObject owner);

FILE: Telegram.Api/Services/FileManager/IUploadAudioFileManager.cs
  type IUploadAudioFileManager (line 13) | public interface IUploadAudioFileManager
    method UploadFile (line 15) | void UploadFile(TLLong fileId, TLObject owner, string fileName);
    method UploadFile (line 16) | void UploadFile(TLLong fileId, TLObject owner, string fileName, IList<...
    method CancelUploadFile (line 17) | void CancelUploadFile(TLLong fileId);

FILE: Telegram.Api/Services/FileManager/IUploadFileManager.cs
  type IUploadFileManager (line 15) | public interface IUploadFileManager
    method UploadFile (line 17) | void UploadFile(TLLong fileId, TLObject owner, byte[] bytes);
    method UploadFile (line 19) | void UploadFile(TLLong fileId, TLObject owner, StorageFile file);
    method CancelUploadFile (line 21) | void CancelUploadFile(TLLong fileId);
  type IUploadDocumentFileManager (line 24) | public interface IUploadDocumentFileManager
    method UploadFile (line 26) | void UploadFile(TLLong fileId, TLObject owner, byte[] bytes);
    method UploadFile (line 28) | void UploadFile(TLLong fileId, TLObject owner, StorageFile file);
    method UploadFile (line 29) | void UploadFile(TLLong fileId, TLObject owner, StorageFile file, TLStr...
    method CancelUploadFile (line 31) | void CancelUploadFile(TLLong fileId);

FILE: Telegram.Api/Services/FileManager/IUploadVideoFileManager.cs
  type IUploadVideoFileManager (line 16) | public interface IUploadVideoFileManager
    method UploadFile (line 18) | void UploadFile(TLLong fileId, TLObject owner, string fileName);
    method UploadFile (line 19) | void UploadFile(TLLong fileId, TLObject owner, string fileName, IList<...
    method UploadFile (line 22) | void UploadFile(TLLong fileId, bool isGif, TLObject owner, StorageFile...
    method CancelUploadFile (line 25) | void CancelUploadFile(TLLong fileId);

FILE: Telegram.Api/Services/FileManager/IVideoFileManager.cs
  type IVideoFileManager (line 13) | public interface IVideoFileManager
    method DownloadFileAsync (line 15) | void DownloadFileAsync(TLInt dcId, TLInputFileLocationBase file, TLObj...
    method CancelDownloadFileAsync (line 16) | void CancelDownloadFileAsync(TLObject owner);

FILE: Telegram.Api/Services/FileManager/ProgressChangedEventArgs.cs
  class ProgressChangedEventArgs (line 10) | public class ProgressChangedEventArgs
    method ProgressChangedEventArgs (line 16) | public ProgressChangedEventArgs(DownloadableItem item, double progress)

FILE: Telegram.Api/Services/FileManager/UploadAudioFileManager.cs
  class UploadAudioFileManager (line 20) | public class UploadAudioFileManager : IUploadAudioFileManager
    method UploadAudioFileManager (line 32) | public UploadAudioFileManager(ITelegramEventAggregator eventAggregator...
    method OnUploading (line 49) | private void OnUploading(object state)
    method PutFile (line 144) | private bool PutFile(TLLong fileId, TLInt filePart, byte[] bytes)
    method UploadFile (line 165) | public void UploadFile(TLLong fileId, TLObject owner, string fileName)
    method UploadFile (line 191) | public void UploadFile(TLLong fileId, TLObject owner, string fileName,...
    method GetUploadableItem (line 217) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetUploadableItem (line 224) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetItemParts (line 231) | private List<UploadablePart> GetItemParts(UploadableItem item, long is...
    method GetItemParts (line 245) | private List<UploadablePart> GetItemParts(UploadableItem item, long is...
    method StartAwaitingWorkers (line 272) | private void StartAwaitingWorkers()
    method CancelUploadFile (line 282) | public void CancelUploadFile(TLLong fileId)

FILE: Telegram.Api/Services/FileManager/UploadFileManager.cs
  class UploadProgressChangedEventArgs (line 31) | public class UploadProgressChangedEventArgs
    method UploadProgressChangedEventArgs (line 37) | public UploadProgressChangedEventArgs(UploadableItem item, double prog...
  class UploadablePart (line 44) | public class UploadablePart
    method ClearBuffer (line 60) | public void ClearBuffer()
    method UploadablePart (line 65) | public UploadablePart(UploadableItem item, TLInt filePart, byte[] bytes)
    method UploadablePart (line 72) | public UploadablePart(UploadableItem item, TLInt filePart, long positi...
    method UploadablePart (line 80) | public UploadablePart(UploadableItem item, TLInt filePart, byte[] byte...
    method ToString (line 89) | public override string ToString()
    method SetBuffer (line 94) | public void SetBuffer(byte[] bytes)
    method SetParentItem (line 99) | public void SetParentItem(UploadableItem item)
  class UploadableItem (line 105) | public class UploadableItem
    method UploadableItem (line 133) | public UploadableItem(TLLong fileId, TLObject owner, byte[] bytes)
    method UploadableItem (line 141) | public UploadableItem(TLLong fileId, TLObject owner, StorageFile file)
    method UploadableItem (line 148) | public UploadableItem(TLLong fileId, TLObject owner, StorageFile file,...
    method UploadableItem (line 159) | public UploadableItem(TLLong fileId, TLObject owner, string isoFileNam...
  class UploadFileManager (line 168) | public class UploadFileManager : IUploadFileManager
    method UploadFileManager (line 180) | public UploadFileManager(ITelegramEventAggregator eventAggregator, IMT...
    method OnUploading (line 197) | private void OnUploading(object state)
    method PutFile (line 323) | private bool PutFile(TLLong fileId, TLInt filePart, TLInt fileTotalPar...
    method UploadFile (line 345) | public void UploadFile(TLLong fileId, TLObject owner, byte[] bytes)
    method UploadFile (line 358) | public void UploadFile(TLLong fileId, TLObject owner, StorageFile file)
    method GetUploadableItem (line 370) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetItemParts (line 382) | private static List<UploadablePart> GetItemParts(UploadableItem item, ...
    method GetUploadableItem (line 398) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetItemParts (line 405) | private static List<UploadablePart> GetItemParts(UploadableItem item)
    method StartAwaitingWorkers (line 421) | private void StartAwaitingWorkers()
    method CancelUploadFile (line 431) | public void CancelUploadFile(TLLong fileId)
  class UploadingCanceledEventArgs (line 446) | public class UploadingCanceledEventArgs
    method UploadingCanceledEventArgs (line 450) | public UploadingCanceledEventArgs(UploadableItem item)
  class UploadDocumentFileManager (line 456) | public class UploadDocumentFileManager : IUploadDocumentFileManager
    method UploadDocumentFileManager (line 468) | public UploadDocumentFileManager(ITelegramEventAggregator eventAggrega...
    method OnUploading (line 485) | private void OnUploading(object state)
    method PutBigFile (line 598) | private bool PutBigFile(TLLong fileId, TLInt filePart, TLInt fileTotal...
    method PutFile (line 620) | private bool PutFile(TLLong fileId, TLInt filePart, byte[] bytes)
    method UploadFile (line 642) | public void UploadFile(TLLong fileId, TLObject owner, byte[] bytes)
    method UploadFile (line 655) | public void UploadFile(TLLong fileId, TLObject owner, StorageFile file)
    method UploadFile (line 660) | public void UploadFile(TLLong fileId, TLObject owner, StorageFile file...
    method GetUploadableItem (line 677) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetItemParts (line 684) | private static List<UploadablePart> GetItemParts(UploadableItem item)
    method StartAwaitingWorkers (line 702) | private void StartAwaitingWorkers()
    method CancelUploadFile (line 712) | public void CancelUploadFile(TLLong fileId)

FILE: Telegram.Api/Services/FileManager/UploadVideoFileManager.cs
  class UploadVideoFileManager (line 23) | public class UploadVideoFileManager : IUploadVideoFileManager
    method UploadVideoFileManager (line 35) | public UploadVideoFileManager(ITelegramEventAggregator eventAggregator...
    method OnUploading (line 52) | private void OnUploading(object state)
    method PutFile (line 170) | private bool PutFile(TLLong fileId, TLInt filePart, byte[] bytes)
    method PutBigFile (line 190) | private bool PutBigFile(TLLong fileId, TLInt filePart, TLInt fileTotal...
    method UploadFile (line 210) | public void UploadFile(TLLong fileId, TLObject owner, string fileName)
    method UploadFile (line 237) | public void UploadFile(TLLong fileId, bool isGif, TLObject owner, Stor...
    method UploadFile (line 252) | public void UploadFile(TLLong fileId, TLObject owner, string fileName,...
    method GetUploadableItem (line 280) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetUploadableItem (line 289) | private UploadableItem GetUploadableItem(TLLong fileId, TLObject owner...
    method GetItemParts (line 296) | private List<UploadablePart> GetItemParts(UploadableItem item, long fi...
    method GetItemParts (line 312) | private List<UploadablePart> GetItemParts(UploadableItem item, long fi...
    method StartAwaitingWorkers (line 335) | private void StartAwaitingWorkers()
    method CancelUploadFile (line 345) | public void CancelUploadFile(TLLong fileId)

FILE: Telegram.Api/Services/FileManager/VideoFileManager.cs
  class VideoFileManager (line 18) | public class VideoFileManager : FileManagerBase, IVideoFileManager
    method VideoFileManager (line 20) | public VideoFileManager(ITelegramEventAggregator eventAggregator, IMTP...
    method OnDownloading (line 29) | private void OnDownloading(object state)
    method DownloadFileAsync (line 134) | public void DownloadFileAsync(TLInt dcId, TLInputFileLocationBase file...
    method GetDownloadableItem (line 182) | private DownloadableItem GetDownloadableItem(TLInt dcId, TLInputFileLo...
    method GetItemParts (line 195) | protected override List<DownloadablePart> GetItemParts(TLInt size, Dow...

FILE: Telegram.Api/Services/FileManager/Worker.cs
  class Worker (line 18) | public class Worker
    method Worker (line 31) | public Worker(ParameterizedThreadStart start, string name)
    method OnThreadStartInternal (line 39) | private void OnThreadStartInternal(ParameterizedThreadStart start)
    method Start (line 62) | public void Start()
    method Stop (line 67) | public void Stop()
    method Worker (line 84) | public Worker(Action<object> start, string name)
    method OnThreadStartInternal (line 94) | private void OnThreadStartInternal(Action<object> start, object state)
    method Start (line 120) | public void Start()
    method Stop (line 125) | public void Stop()
  class Worker (line 73) | public class Worker
    method Worker (line 31) | public Worker(ParameterizedThreadStart start, string name)
    method OnThreadStartInternal (line 39) | private void OnThreadStartInternal(ParameterizedThreadStart start)
    method Start (line 62) | public void Start()
    method Stop (line 67) | public void Stop()
    method Worker (line 84) | public Worker(Action<object> start, string name)
    method OnThreadStartInternal (line 94) | private void OnThreadStartInternal(Action<object> start, object state)
    method Start (line 120) | public void Start()
    method Stop (line 125) | public void Stop()

FILE: Telegram.Api/Services/HistoryItem.cs
  type RequestStatus (line 13) | public enum RequestStatus
  class HistoryItem (line 21) | public class HistoryItem
    method ToString (line 44) | public override string ToString()

FILE: Telegram.Api/Services/IMTProtoService.cs
  type IMTProtoService (line 18) | public interface IMTProtoService
    method GetEncryptedTransportMessage (line 20) | TLEncryptedTransportMessage GetEncryptedTransportMessage(byte[] authKe...
    method CheckPublicConfig (line 23) | void CheckPublicConfig();
    method PeerToInputPeer (line 26) | TLInputPeerBase PeerToInputPeer(TLPeerBase peer);
    method Stop (line 28) | void Stop();
    method StartInitialize (line 30) | void StartInitialize();
    method RemoveFromQueue (line 32) | void RemoveFromQueue(TLLong id);
    method SetMessageOnTime (line 37) | void SetMessageOnTime(double seconds, string message);
    method GetActiveTransport (line 39) | ITransport GetActiveTransport();
    method GetCurrentPacketInfo (line 40) | WindowsPhone.Tuple<int, int, int> GetCurrentPacketInfo();
    method GetTransportInfo (line 41) | string GetTransportInfo();
    method RaiseSendStatus (line 47) | void RaiseSendStatus(SendStatusEventArgs e);
    method ClearHistory (line 53) | void ClearHistory(string caption, bool createNewSession, bool syncFaul...
    method SaveConfig (line 66) | void SaveConfig();
    method LoadConfig (line 67) | TLConfig LoadConfig();
    method GetStateAsync (line 69) | void GetStateAsync(Action<TLState> callback, Action<TLRPCError> faultC...
    method GetDifferenceAsync (line 70) | void GetDifferenceAsync(TLInt pts, TLInt date, TLInt qts, Action<TLDif...
    method GetDifferenceWithoutUpdatesAsync (line 71) | void GetDifferenceWithoutUpdatesAsync(TLInt pts, TLInt date, TLInt qts...
    method RegisterDeviceAsync (line 73) | void RegisterDeviceAsync(TLInt tokenType, TLString token, Action<TLBoo...
    method UnregisterDeviceAsync (line 74) | void UnregisterDeviceAsync(TLInt tokenType, TLString token, Action<TLB...
    method MessageAcknowledgments (line 77) | void MessageAcknowledgments(TLVector<TLLong> ids);
    method BindTempAuthKeyAsync (line 80) | void BindTempAuthKeyAsync(TLLong permAuthKeyId, TLLong nonce, TLInt ex...
    method SendCodeAsync (line 81) | void SendCodeAsync(TLString phoneNumber, TLString currentNumber, Actio...
    method ResendCodeAsync (line 82) | void ResendCodeAsync(TLString phoneNumber, TLString phoneCodeHash, Act...
    method CancelCodeAsync (line 83) | void CancelCodeAsync(TLString phoneNumber, TLString phoneCodeHash, Act...
    method SignInAsync (line 84) | void SignInAsync(TLString phoneNumber, TLString phoneCodeHash, TLStrin...
    method CancelSignInAsync (line 85) | void CancelSignInAsync();
    method LogOutAsync (line 86) | void LogOutAsync(Action callback);
    method LogOutAsync (line 87) | void LogOutAsync(Action<TLBool> callback, Action<TLRPCError> faultCall...
    method LogOutTransportsAsync (line 88) | void LogOutTransportsAsync(Action callback, Action<List<TLRPCError>> f...
    method SignUpAsync (line 89) | void SignUpAsync(TLString phoneNumber, TLString phoneCodeHash, TLStrin...
    method SendCallAsync (line 90) | void SendCallAsync(TLString phoneNumber, TLString phoneCodeHash, Actio...
    method SearchAsync (line 92) | void SearchAsync(TLInputPeerBase peer, TLString query, TLInputUserBase...
    method GetDialogsAsync (line 93) | void GetDialogsAsync(Stopwatch timer, TLInt offsetDate, TLInt offsetId...
    method GetHistoryAsync (line 94) | void GetHistoryAsync(Stopwatch timer, TLInputPeerBase inputPeer, TLPee...
    method DeleteMessagesAsync (line 95) | void DeleteMessagesAsync(bool revoke, TLVector<TLInt> id, Action<TLAff...
    method DeleteHistoryAsync (line 96) | void DeleteHistoryAsync(bool justClear, TLInputPeerBase peer, TLInt of...
    method ReadHistoryAsync (line 97) | void ReadHistoryAsync(TLInputPeerBase peer, TLInt maxId, TLInt offset,...
    method ReadMentionsAsync (line 98) | void ReadMentionsAsync(TLInputPeerBase peer, Action<TLAffectedHistory2...
    method ReadMessageContentsAsync (line 99) | void ReadMessageContentsAsync(TLVector<TLInt> id, Action<TLAffectedMes...
    method GetFullChatAsync (line 100) | void GetFullChatAsync(TLInt chatId, Action<TLMessagesChatFull> callbac...
    method SetTypingAsync (line 102) | void SetTypingAsync(TLInputPeerBase peer, TLBool typing, Action<TLBool...
    method SetTypingAsync (line 103) | void SetTypingAsync(TLInputPeerBase peer, TLSendMessageActionBase acti...
    method GetContactsAsync (line 105) | void GetContactsAsync(TLInt hash, Action<TLContactsBase> callback, Act...
    method ImportContactsAsync (line 106) | void ImportContactsAsync(TLVector<TLInputContactBase> contacts, Action...
    method BlockAsync (line 108) | void BlockAsync(TLInputUserBase id, Action<TLBool> callback, Action<TL...
    method UnblockAsync (line 109) | void UnblockAsync(TLInputUserBase id, Action<TLBool> callback, Action<...
    method GetBlockedAsync (line 110) | void GetBlockedAsync(TLInt offset, TLInt limit, Action<TLContactsBlock...
    method UpdateProfileAsync (line 112) | void UpdateProfileAsync(TLString firstName, TLString lastName, TLStrin...
    method UpdateStatusAsync (line 113) | void UpdateStatusAsync(TLBool offline, Action<TLBool> callback, Action...
    method GetFileAsync (line 115) | void GetFileAsync(TLInt dcId, TLInputFileLocationBase location, TLInt ...
    method GetFileAsync (line 116) | void GetFileAsync(TLInputFileLocationBase location, TLInt offset, TLIn...
    method SaveFilePartAsync (line 117) | void SaveFilePartAsync(TLLong fileId, TLInt filePart, TLString bytes, ...
    method SaveBigFilePartAsync (line 118) | void SaveBigFilePartAsync(TLLong fileId, TLInt filePart, TLInt fileTot...
    method GetNotifySettingsAsync (line 120) | void GetNotifySettingsAsync(TLInputNotifyPeerBase peer, Action<TLPeerN...
    method UpdateNotifySettingsAsync (line 121) | void UpdateNotifySettingsAsync(TLInputNotifyPeerBase peer, TLInputPeer...
    method ResetNotifySettingsAsync (line 122) | void ResetNotifySettingsAsync(Action<TLBool> callback, Action<TLRPCErr...
    method UploadProfilePhotoAsync (line 124) | void UploadProfilePhotoAsync(TLInputFile file, Action<TLPhotosPhoto> c...
    method UpdateProfilePhotoAsync (line 125) | void UpdateProfilePhotoAsync(TLInputPhotoBase id, Action<TLPhotoBase> ...
    method GetDHConfigAsync (line 127) | void GetDHConfigAsync(TLInt version, TLInt randomLength, Action<TLDHCo...
    method RequestEncryptionAsync (line 128) | void RequestEncryptionAsync(TLInputUserBase userId, TLInt randomId, TL...
    method AcceptEncryptionAsync (line 129) | void AcceptEncryptionAsync(TLInputEncryptedChat peer, TLString gb, TLL...
    method SendEncryptedAsync (line 130) | void SendEncryptedAsync(TLInputEncryptedChat peer, TLLong randomId, TL...
    method SendEncryptedFileAsync (line 131) | void SendEncryptedFileAsync(TLInputEncryptedChat peer, TLLong randomId...
    method SendEncryptedMultiMediaAsync (line 132) | void SendEncryptedMultiMediaAsync(TLInputEncryptedChat peer, TLVector<...
    method ReadEncryptedHistoryAsync (line 133) | void ReadEncryptedHistoryAsync(TLInputEncryptedChat peer, TLInt maxDat...
    method SendEncryptedServiceAsync (line 134) | void SendEncryptedServiceAsync(TLInputEncryptedChat peer, TLLong rando...
    method DiscardEncryptionAsync (line 135) | void DiscardEncryptionAsync(TLInt chatId, Action<TLBool> callback, Act...
    method SetEncryptedTypingAsync (line 136) | void SetEncryptedTypingAsync(TLInputEncryptedChat peer, TLBool typing,...
    method GetConfigInformationAsync (line 138) | void GetConfigInformationAsync(Action<string> callback);
    method GetTransportInformationAsync (line 139) | void GetTransportInformationAsync(Action<string> callback);
    method GetUserPhotosAsync (line 140) | void GetUserPhotosAsync(TLInputUserBase userId, TLInt offset, TLLong m...
    method GetNearestDCAsync (line 141) | void GetNearestDCAsync(Action<TLNearestDC> callback, Action<TLRPCError...
    method GetSupportAsync (line 142) | void GetSupportAsync(Action<TLSupport> callback, Action<TLRPCError> fa...
    method ResetAuthorizationsAsync (line 144) | void ResetAuthorizationsAsync(Action<TLBool> callback, Action<TLRPCErr...
    method SetInitState (line 145) | void SetInitState();
    method PingAsync (line 147) | void PingAsync(TLLong pingId, Action<TLPong> callback, Action<TLRPCErr...
    method PingDelayDisconnectAsync (line 148) | void PingDelayDisconnectAsync(TLLong pingId, TLInt disconnectDelay, Ac...
    method SearchAsync (line 150) | void SearchAsync(TLString q, TLInt limit, Action<TLContactsFoundBase> ...
    method CheckUsernameAsync (line 151) | void CheckUsernameAsync(TLString username, Action<TLBool> callback, Ac...
    method UpdateUsernameAsync (line 152) | void UpdateUsernameAsync(TLString username, Action<TLUserBase> callbac...
    method GetAccountTTLAsync (line 153) | void GetAccountTTLAsync(Action<TLAccountDaysTTL> callback, Action<TLRP...
    method SetAccountTTLAsync (line 154) | void SetAccountTTLAsync(TLAccountDaysTTL ttl, Action<TLBool> callback,...
    method DeleteAccountTTLAsync (line 155) | void DeleteAccountTTLAsync(TLString reason, Action<TLBool> callback, A...
    method GetPrivacyAsync (line 156) | void GetPrivacyAsync(TLInputPrivacyKeyBase key, Action<TLPrivacyRules>...
    method SetPrivacyAsync (line 157) | void SetPrivacyAsync(TLInputPrivacyKeyBase key, TLVector<TLInputPrivac...
    method GetStatusesAsync (line 158) | void GetStatusesAsync(Action<TLVector<TLContactStatusBase>> callback, ...
    method UpdateTransportInfoAsync (line 159) | void UpdateTransportInfoAsync(TLDCOption78 dcOption, TLString ipAddres...
    method CheckAndUpdateTransportInfoAsync (line 160) | void CheckAndUpdateTransportInfoAsync(TLInt dcId, TLString host, TLInt...
    method ResolveUsernameAsync (line 162) | void ResolveUsernameAsync(TLString username, Action<TLResolvedPeer> ca...
    method SendChangePhoneCodeAsync (line 163) | void SendChangePhoneCodeAsync(TLString phoneNumber, TLString currentNu...
    method ChangePhoneAsync (line 164) | void ChangePhoneAsync(TLString phoneNumber, TLString phoneCodeHash, TL...
    method GetWallpapersAsync (line 165) | void GetWallpapersAsync(Action<TLVector<TLWallPaperBase>> callback, Ac...
    method GetAllStickersAsync (line 166) | void GetAllStickersAsync(TLString hash, Action<TLAllStickersBase> call...
    method GetMaskStickersAsync (line 167) | void GetMaskStickersAsync(TLString hash, Action<TLAllStickersBase> cal...
    method UpdateDeviceLockedAsync (line 169) | void UpdateDeviceLockedAsync(TLInt period, Action<TLBool> callback, Ac...
    method GetSendingQueueInfoAsync (line 171) | void GetSendingQueueInfoAsync(Action<string> callback);
    method GetSyncErrorsAsync (line 172) | void GetSyncErrorsAsync(Action<ExceptionInfo, IList<ExceptionInfo>> ca...
    method GetMessagesAsync (line 173) | void GetMessagesAsync(TLVector<TLInputMessageBase> id, Action<TLMessag...
    method GetFullUserAsync (line 175) | void GetFullUserAsync(TLInputUserBase id, Action<TLUserFull> callback,...
    method GetUsersAsync (line 176) | void GetUsersAsync(TLVector<TLInputUserBase> id, Action<TLVector<TLUse...
    method SetSecureValueErrorsAsync (line 177) | void SetSecureValueErrorsAsync(TLInputUserBase id, TLVector<TLSecureVa...
    method GetRecentLocationsAsync (line 180) | void GetRecentLocationsAsync(TLInputPeerBase peer, TLInt limit, TLInt ...
    method GetFeaturedStickersAsync (line 181) | void GetFeaturedStickersAsync(bool full, TLInt hash, Action<TLFeatured...
    method GetArchivedStickersAsync (line 182) | void GetArchivedStickersAsync(bool full, TLLong offsetId, TLInt limit,...
    method ReadFeaturedStickersAsync (line 183) | void ReadFeaturedStickersAsync(TLVector<TLLong> id, Action<TLBool> cal...
    method GetAllDraftsAsync (line 184) | void GetAllDraftsAsync(Action<TLUpdatesBase> callback, Action<TLRPCErr...
    method SaveDraftAsync (line 185) | void SaveDraftAsync(TLInputPeerBase peer, TLDraftMessageBase draft, Ac...
    method GetInlineBotResultsAsync (line 186) | void GetInlineBotResultsAsync(TLInputUserBase bot, TLInputPeerBase pee...
    method SetInlineBotResultsAsync (line 187) | void SetInlineBotResultsAsync(TLBool gallery, TLBool pr, TLLong queryI...
    method SendInlineBotResultAsync (line 188) | void SendInlineBotResultAsync(TLMessage45 message, Action<TLMessageCom...
    method GetDocumentByHashAsync (line 189) | void GetDocumentByHashAsync(TLString sha256, TLInt size, TLString mime...
    method SearchGifsAsync (line 190) | void SearchGifsAsync(TLString q, TLInt offset, Action<TLFoundGifs> cal...
    method GetSavedGifsAsync (line 191) | void GetSavedGifsAsync(TLInt hash, Action<TLSavedGifsBase> callback, A...
    method SaveGifAsync (line 192) | void SaveGifAsync(TLInputDocumentBase id, TLBool unsave, Action<TLBool...
    method ReorderStickerSetsAsync (line 193) | void ReorderStickerSetsAsync(bool masks, TLVector<TLLong> order, Actio...
    method SearchGlobalAsync (line 194) | void SearchGlobalAsync(TLString query, TLInt offsetDate, TLInputPeerBa...
    method ReportSpamAsync (line 195) | void ReportSpamAsync(TLInputPeerBase peer, Action<TLBool> callback, Ac...
    method SendMessageAsync (line 196) | void SendMessageAsync(TLMessage36 message, Action<TLMessageCommon> cal...
    method SendMediaAsync (line 197) | void SendMediaAsync(TLInputPeerBase inputPeer, TLInputMediaBase inputM...
    method StartBotAsync (line 198) | void StartBotAsync(TLInputUserBase bot, TLString startParam, TLMessage...
    method SendBroadcastAsync (line 199) | void SendBroadcastAsync(TLVector<TLInputUserBase> contacts, TLInputMed...
    method ForwardMessageAsync (line 200) | void ForwardMessageAsync(TLInputPeerBase peer, TLInt fwdMessageId, TLM...
    method ForwardMessagesAsync (line 201) | void ForwardMessagesAsync(TLInputPeerBase toPeer, TLVector<TLInt> id, ...
    method ForwardMessagesAsync (line 202) | void ForwardMessagesAsync(TLMessage25 commentMessage, TLInputPeerBase ...
    method CreateChatAsync (line 203) | void CreateChatAsync(TLVector<TLInputUserBase> users, TLString title, ...
    method EditChatTitleAsync (line 204) | void EditChatTitleAsync(TLInt chatId, TLString title, Action<TLUpdates...
    method EditChatPhotoAsync (line 205) | void EditChatPhotoAsync(TLInt chatId, TLInputChatPhotoBase photo, Acti...
    method AddChatUserAsync (line 206) | void AddChatUserAsync(TLInt chatId, TLInputUserBase userId, TLInt fwdL...
    method DeleteChatUserAsync (line 207) | void DeleteChatUserAsync(TLInt chatId, TLInputUserBase userId, Action<...
    method GetWebPagePreviewAsync (line 208) | void GetWebPagePreviewAsync(TLString message, Action<TLMessageMediaBas...
    method ExportChatInviteAsync (line 209) | void ExportChatInviteAsync(TLInt chatId, Action<TLExportedChatInvite> ...
    method CheckChatInviteAsync (line 210) | void CheckChatInviteAsync(TLString hash, Action<TLChatInviteBase> call...
    method ImportChatInviteAsync (line 211) | void ImportChatInviteAsync(TLString hash, Action<TLUpdatesBase> callba...
    method GetStickerSetAsync (line 212) | void GetStickerSetAsync(TLInputStickerSetBase stickerset, Action<TLMes...
    method InstallStickerSetAsync (line 213) | void InstallStickerSetAsync(TLInputStickerSetBase stickerset, TLBool a...
    method UninstallStickerSetAsync (line 214) | void UninstallStickerSetAsync(TLInputStickerSetBase stickerset, Action...
    method HideReportSpamAsync (line 215) | void HideReportSpamAsync(TLInputPeerBase peer, Action<TLBool> callback...
    method GetPeerSettingsAsync (line 216) | void GetPeerSettingsAsync(TLInputPeerBase peer, Action<TLPeerSettings>...
    method GetBotCallbackAnswerAsync (line 217) | void GetBotCallbackAnswerAsync(TLInputPeerBase peer, TLInt messageId, ...
    method GetPromoDialogAsync (line 218) | void GetPromoDialogAsync(TLInputPeerBase peer, Action<TLPeerDialogs> c...
    method GetRecentStickersAsync (line 219) | void GetRecentStickersAsync(bool attached, TLInt hash, Action<TLRecent...
    method ClearRecentStickersAsync (line 220) | void ClearRecentStickersAsync(bool attached, Action<TLBool> callback, ...
    method GetUnusedStickersAsync (line 221) | void GetUnusedStickersAsync(TLInt limit, Action<TLVector<TLStickerSetC...
    method GetAttachedStickersAsync (line 222) | void GetAttachedStickersAsync(bool full, TLInputStickeredMediaBase med...
    method GetCommonChatsAsync (line 223) | void GetCommonChatsAsync(TLInputUserBase user, TLInt maxId, TLInt limi...
    method GetWebPageAsync (line 224) | void GetWebPageAsync(TLString url, TLInt hash, Action<TLWebPageBase> c...
    method GetPinnedDialogsAsync (line 225) | void GetPinnedDialogsAsync(Action<TLPeerDialogs> callback, Action<TLRP...
    method ReorderPinnedDialogsAsync (line 226) | void ReorderPinnedDialogsAsync(bool force, TLVector<TLInputDialogPeerB...
    method ToggleDialogPinAsync (line 227) | void ToggleDialogPinAsync(bool pinned, TLPeerBase peer, Action<TLBool>...
    method GetFavedStickersAsync (line 228) | void GetFavedStickersAsync(TLInt hash, Action<TLFavedStickersBase> cal...
    method FaveStickerAsync (line 229) | void FaveStickerAsync(TLInputDocumentBase id, TLBool unfave, Action<TL...
    method GetUnreadMentionsAsync (line 230) | void GetUnreadMentionsAsync(TLInputPeerBase peer, TLInt offsetId, TLIn...
    method UploadMediaAsync (line 231) | void UploadMediaAsync(TLInputPeerBase inputPeer, TLInputMediaBase inpu...
    method SendMultiMediaAsync (line 232) | void SendMultiMediaAsync(TLInputPeerBase inputPeer, TLVector<TLInputSi...
    method GetStickersAsync (line 233) | void GetStickersAsync(TLString emoticon, TLInt hash, Action<TLStickers...
    method ReportAsync (line 234) | void ReportAsync(TLInputPeerBase peer, TLVector<TLInt> id, TLInputRepo...
    method SearchStickerSetsAsync (line 235) | void SearchStickerSetsAsync(bool full, bool excludeFeatured, TLString ...
    method GetPeerDialogsAsync (line 236) | void GetPeerDialogsAsync(TLInputPeerBase peer, Action<TLPeerDialogs> c...
    method MarkDialogUnreadAsync (line 237) | void MarkDialogUnreadAsync(bool unread, TLInputDialogPeer peer, Action...
    method GetDialogUnreadMarksAsync (line 238) | void GetDialogUnreadMarksAsync(Action<TLVector<TLDialogPeerBase>> call...
    method ToggleTopPeersAsync (line 239) | void ToggleTopPeersAsync(TLBool enabled, Action<TLBool> callback, Acti...
    method ClearAllDraftsAsync (line 240) | void ClearAllDraftsAsync(Action<TLBool> callback, Action<TLRPCError> f...
    method DeleteContactAsync (line 243) | void DeleteContactAsync(TLInputUserBase id, Action<TLLinkBase> callbac...
    method DeleteContactsAsync (line 244) | void DeleteContactsAsync(TLVector<TLInputUserBase> id, Action<TLBool> ...
    method GetTopPeersAsync (line 245) | void GetTopPeersAsync(GetTopPeersFlags flags, TLInt offset, TLInt limi...
    method ResetTopPeerRatingAsync (line 246) | void ResetTopPeerRatingAsync(TLTopPeerCategoryBase category, TLInputPe...
    method ResetSavedAsync (line 247) | void ResetSavedAsync(Action<TLBool> callback, Action<TLRPCError> fault...
    method GetSavedAsync (line 248) | void GetSavedAsync(Action<TLVector<TLSavedPhoneContact>> callback, Act...
    method GetChannelHistoryAsync (line 251) | void GetChannelHistoryAsync(string debugInfo, TLInputPeerBase inputPee...
    method GetMessagesAsync (line 252) | void GetMessagesAsync(TLInputChannelBase inputChannel, TLVector<TLInpu...
    method UpdateChannelAsync (line 253) | void UpdateChannelAsync(TLInt channelId, Action<TLMessagesChatFull> ca...
    method EditAdminAsync (line 254) | void EditAdminAsync(TLChannel channel, TLInputUserBase userId, TLChann...
    method KickFromChannelAsync (line 255) | void KickFromChannelAsync(TLChannel channel, TLInputUserBase userId, T...
    method GetParticipantAsync (line 256) | void GetParticipantAsync(TLInputChannelBase inputChannel, TLInputUserB...
    method GetParticipantsAsync (line 257) | void GetParticipantsAsync(TLInputChannelBase inputChannel, TLChannelPa...
    method EditTitleAsync (line 258) | void EditTitleAsync(TLChannel channel, TLString title, Action<TLUpdate...
    method EditAboutAsync (line 259) | void EditAboutAsync(TLChannel channel, TLString about, Action<TLBool> ...
    method EditPhotoAsync (line 260) | void EditPhotoAsync(TLChannel channel, TLInputChatPhotoBase photo, Act...
    method JoinChannelAsync (line 261) | void JoinChannelAsync(TLChannel channel, Action<TLUpdatesBase> callbac...
    method LeaveChannelAsync (line 262) | void LeaveChannelAsync(TLChannel channel, Action<TLUpdatesBase> callba...
    method DeleteChannelAsync (line 263) | void DeleteChannelAsync(TLChannel channel, Action<TLUpdatesBase> callb...
    method InviteToChannelAsync (line 264) | void InviteToChannelAsync(TLInputChannelBase channel, TLVector<TLInput...
    method GetFullChannelAsync (line 265) | void GetFullChannelAsync(TLInputChannelBase channel, Action<TLMessages...
    method CreateChannelAsync (line 266) | void CreateChannelAsync(TLInt flags, TLString title, TLString about, A...
    method ExportInviteAsync (line 267) | void ExportInviteAsync(TLInputChannelBase channel, Action<TLExportedCh...
    method CheckUsernameAsync (line 268) | void CheckUsernameAsync(TLInputChannelBase channel, TLString username,...
    method UpdateUsernameAsync (line 269) | void UpdateUsernameAsync(TLInputChannelBase channel, TLString username...
    method GetChannelDialogsAsync (line 270) | void GetChannelDialogsAsync(TLInt offset, TLInt limit, Action<TLDialog...
    method GetImportantHistoryAsync (line 271) | void GetImportantHistoryAsync(TLInputChannelBase channel, TLPeerBase p...
    method ReadHistoryAsync (line 272) | void ReadHistoryAsync(TLChannel channel, TLInt maxId, Action<TLBool> c...
    method DeleteMessagesAsync (line 273) | void DeleteMessagesAsync(TLInputChannelBase channel, TLVector<TLInt> i...
    method ToggleInvitesAsync (line 274) | void ToggleInvitesAsync(TLInputChannelBase channel, TLBool enabled, Ac...
    method ExportMessageLinkAsync (line 275) | void ExportMessageLinkAsync(TLInputChannelBase channel, TLInt id, Acti...
    method ToggleSignaturesAsync (line 276) | void ToggleSignaturesAsync(TLInputChannelBase channel, TLBool enabled,...
    method GetMessageEditDataAsync (line 277) | void GetMessageEditDataAsync(TLInputPeerBase peer, TLInt id, Action<TL...
    method EditMessageAsync (line 278) | void EditMessageAsync(TLInputPeerBase peer, TLInt id, TLString message...
    method UpdatePinnedMessageAsync (line 279) | void UpdatePinnedMessageAsync(bool silent, TLInputChannelBase channel,...
    method ReportSpamAsync (line 280) | void ReportSpamAsync(TLInputChannelBase channel, TLInt userId, TLVecto...
    method DeleteUserHistoryAsync (line 281) | void DeleteUserHistoryAsync(TLChannel channel, TLInputUserBase userId,...
    method GetAdminedPublicChannelsAsync (line 282) | void GetAdminedPublicChannelsAsync(Action<TLChatsBase> callback, Actio...
    method ReadMessageContentsAsync (line 283) | void ReadMessageContentsAsync(TLInputChannelBase channel, TLVector<TLI...
    method SetStickersAsync (line 284) | void SetStickersAsync(TLInputChannelBase channel, TLInputStickerSetBas...
    method TogglePreHistoryHiddenAsync (line 285) | void TogglePreHistoryHiddenAsync(TLInputChannelBase channel, TLBool en...
    method DeleteHistoryAsync (line 286) | void DeleteHistoryAsync(TLInputChannelBase channel, Action<TLBool> cal...
    method SetFeedBroadcastsAsync (line 287) | void SetFeedBroadcastsAsync(TLInt feedId, TLVector<TLInputChannelBase>...
    method ChangeFeedBroadcastAsync (line 288) | void ChangeFeedBroadcastAsync(TLInputChannelBase channel, TLInt feedId...
    method GetFeedAsync (line 289) | void GetFeedAsync(bool offsetToMaxReed, TLInt feedId, TLFeedPosition o...
    method ReadFeedAsync (line 290) | void ReadFeedAsync(TLInt feedId, TLFeedPosition maxPosition, Action<TL...
    method GetChannelDifferenceAsync (line 293) | void GetChannelDifferenceAsync(bool force, TLInputChannelBase inputCha...
    method ToggleChatAdminsAsync (line 296) | void ToggleChatAdminsAsync(TLInt chatId, TLBool enabled, Action<TLUpda...
    method EditChatAdminAsync (line 297) | void EditChatAdminAsync(TLInt chatId, TLInputUserBase userId, TLBool i...
    method DeactivateChatAsync (line 298) | void DeactivateChatAsync(TLInt chatId, TLBool enabled, Action<TLUpdate...
    method MigrateChatAsync (line 299) | void MigrateChatAsync(TLInt chatId, Action<TLUpdatesBase> callback, Ac...
    method ReportPeerAsync (line 302) | void ReportPeerAsync(TLInputPeerBase peer, TLInputReportReasonBase rea...
    method DeleteAccountAsync (line 303) | void DeleteAccountAsync(TLString reason, Action<TLBool> callback, Acti...
    method GetAuthorizationsAsync (line 304) | void GetAuthorizationsAsync(Action<TLAccountAuthorizations> callback, ...
    method ResetAuthorizationAsync (line 305) | void ResetAuthorizationAsync(TLLong hash, Action<TLBool> callback, Act...
    method GetPasswordAsync (line 306) | void GetPasswordAsync(Action<TLPasswordBase> callback, Action<TLRPCErr...
    method GetPasswordSettingsAsync (line 307) | void GetPasswordSettingsAsync(TLInputCheckPasswordBase password, Actio...
    method UpdatePasswordSettingsAsync (line 308) | void UpdatePasswordSettingsAsync(TLInputCheckPasswordBase password, TL...
    method CheckPasswordAsync (line 309) | void CheckPasswordAsync(TLInputCheckPasswordBase password, Action<TLAu...
    method RequestPasswordRecoveryAsync (line 310) | void RequestPasswordRecoveryAsync(Action<TLPasswordRecovery> callback,...
    method RecoverPasswordAsync (line 311) | void RecoverPasswordAsync(TLString code, Action<TLAuthorization> callb...
    method ConfirmPhoneAsync (line 312) | void ConfirmPhoneAsync(TLString phoneCodeHash, TLString phoneCode, Act...
    method SendConfirmPhoneCodeAsync (line 313) | void SendConfirmPhoneCodeAsync(TLString hash, TLBool currentNumber, Ac...
    method GetTmpPasswordAsync (line 314) | void GetTmpPasswordAsync(TLInputCheckPasswordBase password, TLInt peri...
    method GetWebAuthorizationsAsync (line 315) | void GetWebAuthorizationsAsync(Action<TLWebAuthorizations> callback, A...
    method ResetWebAuthorizationAsync (line 316) | void ResetWebAuthorizationAsync(TLLong hash, Action<TLBool> callback, ...
    method ResetWebAuthorizationsAsync (line 317) | void ResetWebAuthorizationsAsync(Action<TLBool> callback, Action<TLRPC...
    method GetAllSecureValuesAsync (line 318) | void GetAllSecureValuesAsync(Action<TLVector<TLSecureValue>> callback,...
    method GetSecureValueAsync (line 319) | void GetSecureValueAsync(TLVector<TLSecureValueTypeBase> types, Action...
    method SaveSecureValueAsync (line 320) | void SaveSecureValueAsync(TLInputSecureValue value, TLLong secureSecre...
    method DeleteSecureValueAsync (line 321) | void DeleteSecureValueAsync(TLVector<TLSecureValueTypeBase> types, Act...
    method GetAuthorizationFormAsync (line 322) | void GetAuthorizationFormAsync(TLInt botId, TLString scope, TLString p...
    method GetAuthorizationFormAndPassportConfigAsync (line 323) | void GetAuthorizationFormAndPassportConfigAsync(TLInt botId, TLString ...
    method AcceptAuthorizationAsync (line 324) | void AcceptAuthorizationAsync(TLInt botId, TLString scope, TLString pu...
    method SendVerifyPhoneCodeAsync (line 325) | void SendVerifyPhoneCodeAsync(TLString phoneNumber, TLBool currentNumb...
    method VerifyPhoneAsync (line 326) | void VerifyPhoneAsync(TLString phoneNumber, TLString phoneCodeHash, TL...
    method SendVerifyEmailCodeAsync (line 327) | void SendVerifyEmailCodeAsync(TLString email, Action<TLSentEmailCode> ...
    method VerifyEmailAsync (line 328) | void VerifyEmailAsync(TLString email, TLString code, Action<TLBool> ca...
    method InitTakeoutSessionAsync (line 329) | void InitTakeoutSessionAsync(bool contacts, bool messageUsers, bool me...
    method GetPassportDataAsync (line 330) | void GetPassportDataAsync(Action<TLPasswordBase, IList<TLSecureValue>>...
    method GetAppChangelogAsync (line 333) | void GetAppChangelogAsync(TLString deviceModel, TLString systemVersion...
    method GetTermsOfServiceAsync (line 334) | void GetTermsOfServiceAsync(TLString countryISO2, Action<TLTermsOfServ...
    method GetCdnConfigAsync (line 335) | void GetCdnConfigAsync(Action<TLCdnConfig> callback, Action<TLRPCError...
    method GetProxyDataAsync (line 336) | void GetProxyDataAsync(Action<TLProxyDataBase> callback, Action<TLRPCE...
    method GetDeepLinkInfoAsync (line 337) | void GetDeepLinkInfoAsync(TLString path, Action<TLDeepLinkInfoBase> ca...
    method GetPassportConfigAsync (line 338) | void GetPassportConfigAsync(TLInt hash, Action<TLPassportConfigBase> c...
    method GetCdnFileAsync (line 341) | void GetCdnFileAsync(TLInt dcId, TLString fileToken, TLInt offset, TLI...
    method ReuploadCdnFileAsync (line 342) | void ReuploadCdnFileAsync(TLInt dcId, TLString fileToken, TLString req...
    method RekeyAsync (line 345) | void RekeyAsync(TLEncryptedChatBase chat, Action<TLLong> callback);
    method GetCallConfigAsync (line 348) | void GetCallConfigAsync(Action<TLDataJSON> callback, Action<TLRPCError...
    method RequestCallAsync (line 349) | void RequestCallAsync(TLInputUserBase userId, TLInt randomId, TLString...
    method AcceptCallAsync (line 350) | void AcceptCallAsync(TLInputPhoneCall peer, TLString gb, TLPhoneCallPr...
    method ConfirmCallAsync (line 351) | void ConfirmCallAsync(TLInputPhoneCall peer, TLString ga, TLLong keyFi...
    method ReceivedCallAsync (line 352) | void ReceivedCallAsync(TLInputPhoneCall peer, Action<TLBool> callback,...
    method DiscardCallAsync (line 353) | void DiscardCallAsync(TLInputPhoneCall peer, TLInt duration, TLPhoneCa...
    method SetCallRatingAsync (line 354) | void SetCallRatingAsync(TLInputPhoneCall peer, TLInt rating, TLString ...
    method SaveCallDebugAsync (line 355) | void SaveCallDebugAsync(TLInputPhoneCall peer, TLDataJSON debug, Actio...
    method GetPaymentReceiptAsync (line 358) | void GetPaymentReceiptAsync(TLInt msgId, Action<TLPaymentReceipt> call...
    method GetPaymentFormAsync (line 359) | void GetPaymentFormAsync(TLInt msgId, Action<TLPaymentForm> callback, ...
    method SendPaymentFormAsync (line 360) | void SendPayment
Copy disabled (too large) Download .json
Condensed preview — 2758 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (43,061K chars).
[
  {
    "path": "Agents/AgentHost.cs",
    "chars": 2845,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/Agents.csproj",
    "chars": 5781,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Agents/CallInProgressAgentImpl.cs",
    "chars": 6315,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/ForegroundLifetimeAgentImpl.cs",
    "chars": 2391,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/MTProtoUpdater.cs",
    "chars": 2927,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Agents/Properties/AssemblyInfo.cs",
    "chars": 1717,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/PushPayload.cs",
    "chars": 2672,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/PushPayload.xml",
    "chars": 174,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<wp:Notification xmlns:wp=\"WPNotification\">\r\n  <Name>Kim Abercrombie</Name>\r\n  "
  },
  {
    "path": "Agents/PushUtils.cs",
    "chars": 29717,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Agents/RegistrationHelper.cs",
    "chars": 673,
    "preview": "//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code "
  },
  {
    "path": "Agents/ScheduledAgentImpl.cs",
    "chars": 15698,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/VideoMediaStreamSource.cs",
    "chars": 7904,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Agents/VideoRenderer.cs",
    "chars": 3309,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/ApiLock.cpp",
    "chars": 485,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/ApiLock.h",
    "chars": 502,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEnd.vcxproj",
    "chars": 14294,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "BackEnd/BackEndAudio.cpp",
    "chars": 13658,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndAudio.h",
    "chars": 2338,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndCapture.cpp",
    "chars": 10238,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndCapture.h",
    "chars": 3318,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndNativeBuffer.h",
    "chars": 3791,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndTransport.cpp",
    "chars": 2464,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackEndTransport.h",
    "chars": 1578,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/BackgroundTask.cpp",
    "chars": 1565,
    "preview": "#include \"BackgroundTask.h\"\r\n#include \"Globals.h\"\r\n#include \"CallController.h\"\r\n\r\nusing namespace PhoneVoIPApp::BackEnd;"
  },
  {
    "path": "BackEnd/BackgroundTask.h",
    "chars": 405,
    "preview": "#pragma once\r\n\r\nusing namespace Windows::ApplicationModel::Background;\r\n\r\nnamespace PhoneVoIPApp\r\n{\r\n\tnamespace BackEnd\r"
  },
  {
    "path": "BackEnd/CallController.cpp",
    "chars": 38164,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/CallController.h",
    "chars": 12513,
    "preview": "/*\r\nCopyright (c) 2012 Microsoft Corporation.  All rights reserved.\r\nUse of this sample source code is subject to the te"
  },
  {
    "path": "BackEnd/Globals.cpp",
    "chars": 11837,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/Globals.h",
    "chars": 5053,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/ICallControllerStatusListener.h",
    "chars": 5003,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/IConfig.h",
    "chars": 183,
    "preview": "#pragma once\r\n\r\nnamespace PhoneVoIPApp\r\n{\r\n\tnamespace BackEnd\r\n\t{\r\n\t\tpublic interface class IConfig\r\n\t\t{\r\n\t\t\tproperty do"
  },
  {
    "path": "BackEnd/IMTProtoUpdater.h",
    "chars": 784,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/IVideoRenderer.h",
    "chars": 638,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEnd/Server.h",
    "chars": 1400,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "BackEndProxyStub/BackEndProxyStub.def",
    "chars": 143,
    "preview": "EXPORTS\r\n    DllGetClassObject    PRIVATE\r\n    DllCanUnloadNow      PRIVATE\r\n    DllRegisterServer    PRIVATE\r\n    DllUn"
  },
  {
    "path": "BackEndProxyStub/BackEndProxyStub.vcxproj",
    "chars": 8776,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess.h",
    "chars": 9803,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\r\n\r\n\r\n /* File created by MIDL compiler "
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess_i.c",
    "chars": 1873,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */\r\n\r\n/* link this file in with the server and any client"
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd.OutOfProcess_p.c",
    "chars": 11311,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the proxy stub code */\r\n\r\n\r\n /* File created by MIDL compiler version 8.00.06"
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd.h",
    "chars": 160844,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\r\n\r\n\r\n /* File created by MIDL compiler "
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd_i.c",
    "chars": 4083,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */\r\n\r\n/* link this file in with the server and any client"
  },
  {
    "path": "BackEndProxyStub/PhoneVoIPApp.BackEnd_p.c",
    "chars": 199791,
    "preview": "\r\n\r\n/* this ALWAYS GENERATED file contains the proxy stub code */\r\n\r\n\r\n /* File created by MIDL compiler version 8.00.06"
  },
  {
    "path": "BackEndProxyStub/dlldata.c",
    "chars": 985,
    "preview": "/*********************************************************\r\n   DllData file -- generated by MIDL compiler \r\n\r\n        DO"
  },
  {
    "path": "EmojiPanel/EmojiPanel/App.xaml",
    "chars": 841,
    "preview": "<Application \r\n    x:Class=\"EmojiPanel.App\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"     "
  },
  {
    "path": "EmojiPanel/EmojiPanel/App.xaml.cs",
    "chars": 5563,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Net;\r\nusi"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Emoji/EmojiControl.xaml",
    "chars": 5753,
    "preview": "<UserControl x:Class=\"EmojiPanel.Controls.Emoji.EmojiControl\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Emoji/EmojiControl.xaml.cs",
    "chars": 23368,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.IO.Isola"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Emoji/EmojiData.cs",
    "chars": 28371,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.IO.IsolatedStorage;\r\nusing System.Linq"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Emoji/EmojiSpriteItem.cs",
    "chars": 8902,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nus"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/DelayedExecutor.cs",
    "chars": 2670,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nus"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/Helpers.cs",
    "chars": 943,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/MyListItemBase.cs",
    "chars": 618,
    "preview": "using System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing Telegram.Controls.VirtualizedView;\r\n\r\n"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/MyVirtualizingPanel.cs",
    "chars": 19931,
    "preview": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/VListItemBase.cs",
    "chars": 1513,
    "preview": "using System.Collections.Generic;\r\nusing System.Windows;\r\nusing Rectangle = System.Windows.Shapes.Rectangle;\r\n\r\nnamespa"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Controls/Utilites/VirtSegment.cs",
    "chars": 3031,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;"
  },
  {
    "path": "EmojiPanel/EmojiPanel/EmojiPanel.csproj",
    "chars": 64446,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "EmojiPanel/EmojiPanel/MainPage.xaml",
    "chars": 2499,
    "preview": "<phone:PhoneApplicationPage \r\n    x:Class=\"EmojiPanel.MainPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xam"
  },
  {
    "path": "EmojiPanel/EmojiPanel/MainPage.xaml.cs",
    "chars": 1433,
    "preview": "using System;\r\nusing System.ComponentModel;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Window"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Properties/AppManifest.xml",
    "chars": 205,
    "preview": "<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\r\n        xmlns:x=\"http://schemas.microsoft.com/"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Properties/AssemblyInfo.cs",
    "chars": 1460,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.R"
  },
  {
    "path": "EmojiPanel/EmojiPanel/Properties/WMAppManifest.xml",
    "chars": 2429,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2012/deployment\" A"
  },
  {
    "path": "ExifLib/ExifIO.cs",
    "chars": 3806,
    "preview": "using System;\r\n\r\nnamespace ExifLib\r\n{\r\n    /// <summary>\r\n    /// Utility to handle multi-byte primitives in both big a"
  },
  {
    "path": "ExifLib/ExifIds.cs",
    "chars": 2859,
    "preview": "using System;\r\n\r\nnamespace ExifLib\r\n{\r\n    public static class JpegId\r\n    {\r\n        public const int START = 0xFF;\r\n "
  },
  {
    "path": "ExifLib/ExifLib.csproj",
    "chars": 3299,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "ExifLib/ExifReader.cs",
    "chars": 8834,
    "preview": "using System;\r\nusing System.IO;\r\n\r\nnamespace ExifLib\r\n{\r\n    /// <summary>\r\n    /// Based on http://www.media.mit.edu/p"
  },
  {
    "path": "ExifLib/ExifTag.cs",
    "chars": 10296,
    "preview": "using System;\r\nusing System.Text;\r\n\r\nnamespace ExifLib\r\n{\r\n    /// <summary>\r\n    /// As per: http://www.media.mit.edu/"
  },
  {
    "path": "ExifLib/JpegInfo.cs",
    "chars": 3722,
    "preview": "using System;\r\n\r\nnamespace ExifLib\r\n{\r\n    public class JpegInfo\r\n    {\r\n        /// <summary>\r\n        /// The Jpeg fi"
  },
  {
    "path": "ExifLib/Properties/AssemblyInfo.cs",
    "chars": 1463,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.R"
  },
  {
    "path": "ExifLib.WP8/ExifLib.WP8.csproj",
    "chars": 5127,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "ExifLib.WP8/Properties/AssemblyInfo.cs",
    "chars": 1471,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.R"
  },
  {
    "path": "FFmpegInterop/Source/FFmpegInteropMSS.cpp",
    "chars": 18876,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporat"
  },
  {
    "path": "FFmpegInterop/Source/FFmpegInteropMSS.h",
    "chars": 3210,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporat"
  },
  {
    "path": "FFmpegInterop/Source/FFmpegReader.cpp",
    "chars": 2396,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/FFmpegReader.h",
    "chars": 1348,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/H264AVCSampleProvider.cpp",
    "chars": 4046,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/H264AVCSampleProvider.h",
    "chars": 1305,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/H264SampleProvider.cpp",
    "chars": 1984,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/H264SampleProvider.h",
    "chars": 1226,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/MediaSampleProvider.cpp",
    "chars": 3990,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/MediaSampleProvider.h",
    "chars": 1916,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/UncompressedAudioSampleProvider.cpp",
    "chars": 4349,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/UncompressedAudioSampleProvider.h",
    "chars": 1439,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/UncompressedVideoSampleProvider.cpp",
    "chars": 3538,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Source/UncompressedVideoSampleProvider.h",
    "chars": 1503,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporati"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegGifDecoder.cpp",
    "chars": 15492,
    "preview": "#include \"pch.h\"\r\n#include \"FFmpegGifDecoder.h\"\r\n#include <cstdint>\n#include <limits>\r\n#include <ctime>\r\n\r\n#ifndef NOMIN"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegGifDecoder.h",
    "chars": 390,
    "preview": "#pragma once\r\n\r\nnamespace FFmpegInterop\n{\r\n\tpublic ref class FFmpegGifDecoder sealed\r\n\t{\r\n\tpublic:\r\n\t\tstatic int FFmpegG"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegInterop.Shared.vcxitems",
    "chars": 2627,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Prope"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/FFmpegInterop.Shared.vcxitems.filters",
    "chars": 1869,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbu"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/pch.cpp",
    "chars": 780,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporat"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.Shared/pch.h",
    "chars": 967,
    "preview": "//*****************************************************************************\n//\n//\tCopyright 2015 Microsoft Corporat"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.WindowsPhone/FFmpegInterop.WindowsPhone.vcxproj",
    "chars": 9660,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "FFmpegInterop/Win8.1/FFmpegInterop.WindowsPhone/FFmpegInterop.WindowsPhone.vcxproj.filters",
    "chars": 242,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbu"
  },
  {
    "path": "LICENSE",
    "chars": 18324,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\r\n\t\t       Version 2, June 1991\r\n\r\n Copyright (C) 1989, 1991 Free Software Foundation, I"
  },
  {
    "path": "OpenCVComponent/Assets/haarcascade_eye.xml",
    "chars": 341406,
    "preview": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 frontal eye detector.\n    Created by Shameem Hameed (http://umich.edu/~"
  },
  {
    "path": "OpenCVComponent/Assets/haarcascade_frontalface_alt.xml",
    "chars": 676709,
    "preview": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 gentle adaboost frontal face detector.\n    Created by Rainer Lienhart.\n"
  },
  {
    "path": "OpenCVComponent/Assets/haarcascade_mouth.xml",
    "chars": 741941,
    "preview": "<?xml version=\"1.0\"?>\r\n<!----------------------------------------------------------------------------\r\n  25x15 Mouth det"
  },
  {
    "path": "OpenCVComponent/OpenCVComponent.cpp",
    "chars": 8767,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "OpenCVComponent/OpenCVComponent.h",
    "chars": 1425,
    "preview": "// \n// This is the source code of Telegram for Windows Phone v. 3.x.x.\n// It is licensed under GNU GPL v. 2 or later.\n/"
  },
  {
    "path": "OpenCVComponent/OpenCVComponent.vcxproj",
    "chars": 8038,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "OpenCVComponent/OpenCVComponent.vcxproj.filters",
    "chars": 1645,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "OpenCVComponent/opencv.props",
    "chars": 2586,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "OpenCVComponent/pch.cpp",
    "chars": 276,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "OpenCVComponent/pch.h",
    "chars": 272,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "README.md",
    "chars": 13,
    "preview": "# telegram-wp"
  },
  {
    "path": "Telegram.Api/Aggregator/EventAggregator.cs",
    "chars": 10516,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Aggregator/ExtensionMethods.cs",
    "chars": 5751,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Compression/GZipDeflateStream.cs",
    "chars": 11938,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Compression/GZipWebClient.cs",
    "chars": 5154,
    "preview": "// (c) Copyright Morten Nielsen.\r\n// This source is subject to the Microsoft Public License (Ms-PL).\r\n// Please see htt"
  },
  {
    "path": "Telegram.Api/Constants.cs",
    "chars": 5385,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Extensions/ActionExtensions.cs",
    "chars": 1527,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Extensions/HttpWebRequestExtensions.cs",
    "chars": 3691,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Extensions/StreamExtensions.cs",
    "chars": 519,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Extensions/TLObjectExtensions.cs",
    "chars": 983,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Hash/CRC32/CRC.cs",
    "chars": 5633,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Hash/MD5/MD5.cs",
    "chars": 11494,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Hash/MD5/MD5CryptoServiceProvider.cs",
    "chars": 19177,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Hash/MD5/MD5Managed.cs",
    "chars": 2310,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Helpers/AuthorizationHelper.cs",
    "chars": 36431,
    "preview": "using System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Numerics;\r\nusing System.Se"
  },
  {
    "path": "Telegram.Api/Helpers/Execute.cs",
    "chars": 4733,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Helpers/FileUtils.cs",
    "chars": 30952,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Helpers/IAuthorizationHelper.cs",
    "chars": 462,
    "preview": "using System;\r\nusing Telegram.Api.TL;\r\n\r\nnamespace Telegram.Api.Helpers\r\n{\r\n    //public interface IAuthorizationHelper"
  },
  {
    "path": "Telegram.Api/Helpers/Notifications.cs",
    "chars": 1080,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Helpers/PhoneHelper.cs",
    "chars": 6093,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Xml;\r\n#if WINDOWS_PHONE\r\nusing Microsoft.Phone.Info;\r\n#e"
  },
  {
    "path": "Telegram.Api/Helpers/RequestHelper.cs",
    "chars": 3211,
    "preview": "using System;\r\nusing System.Linq;\r\nusing System.Security.Cryptography;\r\nusing Telegram.Api.Services;\r\nusing Telegram.Ap"
  },
  {
    "path": "Telegram.Api/Helpers/SettingsHelper.cs",
    "chars": 11433,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Helpers/Utils.cs",
    "chars": 26237,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Logs/Log.cs",
    "chars": 3644,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Properties/AssemblyInfo.cs",
    "chars": 1470,
    "preview": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.R"
  },
  {
    "path": "Telegram.Api/Services/Cache/Context.cs",
    "chars": 982,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Cache/EventArgs/DialogAddedEventArgs.cs",
    "chars": 2043,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Cache/EventArgs/TopMessageUpdatedEventArgs.cs",
    "chars": 1203,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Cache/ICacheService.cs",
    "chars": 8627,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Cache/InMemoryCacheService.cs",
    "chars": 143684,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Cache/InMemoryDatabase.cs",
    "chars": 115163,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Connection/ConnectionService.cs",
    "chars": 17134,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Connection/PublicConfigService.cs",
    "chars": 14498,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/DCOptionItem.cs",
    "chars": 762,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/DelayedItem.cs",
    "chars": 1223,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/DeviceInfo/EmptyDeviceInfoService.cs",
    "chars": 1698,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/DeviceInfo/IDeviceInfo.cs",
    "chars": 588,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/AudioFileManager.cs",
    "chars": 7890,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/DocumentFileManager.cs",
    "chars": 11740,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/DownloadableItem.cs",
    "chars": 1697,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/DownloadablePart.cs",
    "chars": 1325,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/DownloadingCanceledEventArgs.cs",
    "chars": 547,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/EncryptedFileManager.cs",
    "chars": 8370,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/FileManager.cs",
    "chars": 9550,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/FileManagerBase.cs",
    "chars": 12547,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IAudioFileManager.cs",
    "chars": 588,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IDocumentFileManager.cs",
    "chars": 657,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/IEncryptedFileManager.cs",
    "chars": 566,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IFileManager.cs",
    "chars": 638,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IUploadAudioFileManager.cs",
    "chars": 652,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IUploadFileManager.cs",
    "chars": 1018,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IUploadVideoFileManager.cs",
    "chars": 801,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/IVideoFileManager.cs",
    "chars": 591,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/ProgressChangedEventArgs.cs",
    "chars": 648,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/UploadAudioFileManager.cs",
    "chars": 10484,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/FileManager/UploadFileManager.cs",
    "chars": 23823,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/UploadVideoFileManager.cs",
    "chars": 12845,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/VideoFileManager.cs",
    "chars": 8514,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/FileManager/Worker.cs",
    "chars": 3224,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later.\r"
  },
  {
    "path": "Telegram.Api/Services/HistoryItem.cs",
    "chars": 1674,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/IMTProtoService.cs",
    "chars": 40571,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Account.cs",
    "chars": 26961,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Auth.cs",
    "chars": 6998,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.ByTransport.cs",
    "chars": 108694,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Channel.cs",
    "chars": 29490,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Config.cs",
    "chars": 15935,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Contacts.cs",
    "chars": 6981,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.DHKeyExchange.cs",
    "chars": 26665,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Help.cs",
    "chars": 6550,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Helpers.cs",
    "chars": 23206,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.HttpLongPoll.cs",
    "chars": 1886,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Langpack.cs",
    "chars": 1741,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Messages.cs",
    "chars": 130133,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Payments.cs",
    "chars": 4437,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Phone.cs",
    "chars": 4521,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Photos.cs",
    "chars": 1479,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.SecretChats.cs",
    "chars": 2461,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.SendingQueue.cs",
    "chars": 25589,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Stuff.cs",
    "chars": 6952,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Updates.cs",
    "chars": 1822,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Upload.cs",
    "chars": 1955,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.Users.cs",
    "chars": 1630,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/MTProtoService.cs",
    "chars": 120121,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Messages/ISenderService.cs",
    "chars": 243,
    "preview": "using Telegram.Api.TL;\r\n\r\nnamespace Telegram.Api.Services.Messages\r\n{\r\n    public interface ISenderService\r\n    {\r\n    "
  },
  {
    "path": "Telegram.Api/Services/Messages/SenderService.cs",
    "chars": 762,
    "preview": "using System.Collections.Generic;\r\nusing Telegram.Api.TL;\r\n\r\nnamespace Telegram.Api.Services.Messages\r\n{\r\n    public cl"
  },
  {
    "path": "Telegram.Api/Services/ServiceBase.cs",
    "chars": 4965,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Updates/IUpdatesService.cs",
    "chars": 4396,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Updates/ReceiveUpdatesEventArgs.cs",
    "chars": 585,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Updates/UpdatesBySeqComparer.cs",
    "chars": 1255,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/Updates/UpdatesService.cs",
    "chars": 185808,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/Services/VoIP/IVoIPService.cs",
    "chars": 177,
    "preview": "using Telegram.Api.TL;\r\n\r\nnamespace Telegram.Api.Services.VoIP\r\n{\r\n    public interface IVoIPService\r\n    {\r\n        vo"
  },
  {
    "path": "Telegram.Api/Services/VoIP/VoIPService.cs",
    "chars": 11523,
    "preview": "using System;\r\nusing System.Text;\r\nusing Windows.Storage;\r\n#if WINDOWS_PHONE\r\nusing libtgvoip;\r\n#endif\r\nusing Org.Bounc"
  },
  {
    "path": "Telegram.Api/TL/Account/TLChangePhone.cs",
    "chars": 848,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/TL/Account/TLCheckPassword.cs",
    "chars": 1036,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/TL/Account/TLConfirmPhone.cs",
    "chars": 753,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/TL/Account/TLGetAuthorizations.cs",
    "chars": 564,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  },
  {
    "path": "Telegram.Api/TL/Account/TLGetPassword.cs",
    "chars": 571,
    "preview": "// \r\n// This is the source code of Telegram for Windows Phone v. 3.x.x.\r\n// It is licensed under GNU GPL v. 2 or later."
  }
]

// ... and 2558 more files (download for full content)

About this extraction

This page contains the full source code of the evgeny-nadymov/telegram-wp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2758 files (38.9 MB), approximately 10.4M tokens, and a symbol index with 22381 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!