Commit 5cfa2b88 authored by Ahmad Nemati's avatar Ahmad Nemati

cc

parents
Pipeline #103 failed with stages

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

.DS_Store
.idea
.publish
*.sublime-workspace
*.*~
*.swp
# Node.js package manager
node_modules
npm-debug.log
dist
dist_package
releases
webogram*.zip
app/js/templates.js
app/css
cldr
coverage/
[main]
host = https://www.transifex.com
[telegram-web.en-usjson]
file_filter = app/js/locales/<lang>.json
lang_map = de:de-de, es:es-es, it:it-it, ru:ru-ru, nl:nl-nl, pt_BR:pt-br
source_file = app/js/locales/en-us.json
source_lang = en_US
type = KEYVALUEJSON
### 0.7
* Improved chats search
* Pinned messages in supergroups and channels
* Saved messages
* Improved chat history filters: added audio, links and mentions. Click on message date opens found message in context.
* Added ability to clean history in private supergroups
* Supported unread status for video messages
* Admin badges in supergroups
* Improved PUSH handling in Chrome
* [Safari] Voice record is now available
* [Safari] Improved downloads (files now have names and download automatically)
### 0.6.1
* Fixed networking problems
* Supported [MTProto v2](https://core.telegram.org/mtproto)
### 0.6.0
* Voice messages record button
* Added support for voice messages playback in Safari
### 0.5.7
* Video messages and Telescope
* Notifications about new logins
* Changelog is now received as a message
### 0.5.6
* Edit the text of your messages after sending them. This works across all Telegram chats, including groups and one-on-one conversations. Select a message and click 'Edit' or just press the up arrow button to edit your last message.
* Unsend Messages: retract any messages within 48 hours of sending them. Check out the [Telegram Blog](https://telegram.org/blog/unsend-and-usage) for more info.
* Pinned chats. Check out the [Telegram Blog](https://telegram.org/blog/pin-and-ifttt) for more info.
* Sticker suggestions by emoji.
* Search for messages in specific chats.
* Background notifications in Chrome and Firefox (can be disabled in Settings)
### 0.5.5
* Introducing Drafts: Seamless syncing for unsent messages on all your devices. Drafts are now visible in your chats list.
* Mention people in groups by typing @ and selecting them from the list — even if they don't have a username.
* Share links to specific posts in channels via quick forwarding menu (click on the date in a message to try this out).
### 0.5.4
* Introducing Bot API 2.0, the biggest update to our bot platform since June 2015.
* New inline keyboards with callback, 'open URL' or 'switch to inline mode' buttons help create seamless interfaces.
* Bots can now update existing messages on the fly as you interact with them.
* Prepare for the rise of location-based bots: all bots can now ask users to share their location.
* Inline bots can now send all attachments supported in Telegram (videos, music, stickers, files, etc.).
* Try out these sample bots to see what's coming your way soon: @music, @sticker, @youtube, @foursquare
* Check out the [Telegram Blog](https://telegram.org/blog/bots-2-0) for more info.
* New quick forwarding in channels (click on the date in a message to try this out).
* Improved performance.
### 0.5.3
* Inline bots: A new way to add bot content to any chat. Type a bot's username and your query in the text field to get instant results and send them to your chat partner. Try typing `@gif dog` in your next chat. Sample bots: @gif, @wiki, @bing, @vid, @bold.
* Check out the [Telegram Blog](https://telegram.org/blog/inline-bots) for more info.
* Improved GIFs: 20x faster sending and downloading, nice animated progress
* Click on message date to reply (or to forward from channels).
* Preview images before sending when pasting from clipboard.
* Improved formatting for copy-pasted history fragments (date, time and sender names inserted automatically).
### 0.5.2
* Unread counters for muted chats now colored in gray.
* Improved previews for sticker sets: Click on a sticker to view the whole set, click on stickers in a set to send right away, added a 'Share' button.
* Improved performance.
### 0.5.1
* Groups that have reached their capacity of 200 users can be upgraded to supergroups of up to 1,000 members.
* Check out the [Telegram Blog](https://telegram.org/blog/supergroups) for more info
### 0.5.0
* Removed annoying "multiple tabs open" error.
* Improved message forwarding.
* Added view counter to messages from channels.
* Improved image loading in Safari and Firefox.
### 0.4.9
* New emoji and sticker menu, tabs for sticker packs.
### 0.4.8
* Introducing Channels – a great new way to broadcast your messages to unlimited audiences.
* Check out the [Telegram Blog](https://telegram.org/blog/channels) for more info
* Improved performance in Safari on OS X El Capitan.
* Added formatting for fixed-width code, surround text with `single backticks` for inline text and ```triple backticks``` for blocks of pre-formatted text.
### 0.4.7
* New bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations.
* Check out [Telegram Blog](https://telegram.org/blog/bot-revolution) for more info
* Improved Stickers support: now stickers are loading much faster.
* Click on any custom stickers in chats to view and add sticker sets.
* [Mobile] Reply to a message easily: tap on any message and select "Reply".
### 0.4.6
* Install and share custom sticker sets like this one: telegram.me/addstickers/Animals
* If you're an artist, create custom sticker sets using our @Stickers bot.
* Check out [Telegram Blog](https://telegram.org/blog/stickers-revolution) for more info
### 0.4.5
* Invite links for group chats:
Check out [Telegram Blog](https://telegram.org/blog/invite-links) for more info
* Smart notifications
* 'Listened' status for voice messages
* Places in locations (venues, landmarks)
### 0.4.4
* Link Previews:
Get rich link summaries for tweets, YouTube videos, Instagram photos and other content.
* Check out [Telegram Blog](https://telegram.org/blog/link-preview) for more info.
### 0.4.3
* Sessions List:
View your active Telegram sessions (on desktop, tablet and mobile devices) and close specific sessions remotely.
* Two-step verification:
Set up an additional password that will be required to log into your Telegram account.
* Check out [Telegram Blog](https://telegram.org/blog/sessions-and-2-step-verification) for more info.
### 0.4.2
* Optimization for screens with smaller Y-resolutions.
* Supported Spotify URL embeds.
* Mentions of the current user in group chats are now highlighted.
### 0.4.1
* Reply to specific messages in groups.
* Mention @usernames in groups to notify multiple users.
* Revised notifications in groups: mentioned users and people you reply to will be notified (private chat notification settings apply in this case instead of group settings). Check out <a href="https://telegram.org/blog/replies-mentions-hashtags" target="_blank">Telegram Blog</a> for more info.
* Setting to disable message preview
### 0.4.0
* Full stickers support
* Multisearch box: instantly find chats, usernames and messages
* Emoji autocomplete: e.g., type **:kiss<** in the message field to see the list. [Full cheat sheet](http://www.emoji-cheat-sheet.com/)
* Added 'typing' notification in chats list
* Online members counter in group headers
### 0.3.9
* [Desktop] Material design completed
### 0.3.8
* Telegram.me links open right in Telegram Web when authorized
* @username mentions in messages are clickable and open a conversation with the user
### 0.3.7
* [Desktop] New material design for modal windows
* [Desktop] Forward messages to multiple recipients
### 0.3.6
* New viewer for photos, videos, documents.
* [FirefoxOS] Improved media downloads.
### 0.3.5
* Added embedded Soundcloud tracks and playlists.
* Added global user search to contacts list.
* Added switch to mobile version on window resize.
* Migrate to HTTPS notification
* Bugfixes.
### 0.3.4
* Added embedded Facebook posts and Vimeo videos.
* Improved IE10+ support: downloading files and style fixes.
* Added unsupported media playback warning.
* Bugfixes.
### 0.3.3
* Added Native Client module: dramatically improved encryption speed; Download and upload speed is now as high as in native applications.
* HTTPS. We recommend you to use https://web.telegram.org.
* Added multiple open tabs warning. Please note, that only one tab with Telegram Web will work.
* Added embedded Instagram, Twitter, Vine, YouTube links.
* Jump to selected spot when playing back audio.
* Bugfixes
### 0.3.2
* Usernames support.
* Search can now find public users by username.
* Most popular emoticons shown in 'recent' when empty
* [ChromeApp] Added saving window position and size
* Bugfixes
### 0.3.1
* New languages: Spanish, German and Italian are now available
* New custom-made audio player
* Bad browser page for IE 6-9
* Perfomance improvements and bugfixes
### 0.3.0
* Log in codes may be received in other Telegram apps
* Partner's online status updates automatically
* Added support for non-english hashtags in messages
* Fixed invalid scrollbar width bug
* [Desktop] Added automatic country code detection
* [FirefoxOS] Improved PUSH-notifications for <= 1.1
* [FirefoxOS] Fixed emoji in notifications
* [FirefoxOS] Fixed attachment bug for <= 1.1
* [FirefoxOS] Added phonebook permissions handling
* [FirefoxOS] Added ability to share Gallery photos in Telegram
## Contribute
You can help this project by reporting problems, suggestions, localizing it or contributing to the code.
### Report a problem or suggestion
Go to our [issue tracker](https://github.com/zhukov/webogram/issues) and check if your problem/suggestion is already reported. If not, create a new issue with a descriptive title and detail your suggestion or steps to reproduce the problem.
### Localization
If you don't see your native language available for Webogram and you can help with translation, please consult the [Telegram Translations Manual](https://core.telegram.org/translating_telegram).
To test your translation live, use [Localization guide](/app/js/locales/README.md).
### Contribute to the code
If you know how to code, we welcome you to send fixes and new features, but in order to be efficient we ask you to follow the following procedure:
* Fork this repo using the button at the top.
* Clone your forked repo locally.
``$ git clone git@github.com:yourname/webogram.git``
* Don't modify or work on the master branch, we'll use it to always be in sync with webogram upstream.
```
$ git remote add upstream git@github.com:zhukov/webogram.git
$ git fetch upstream
```
* Always create a new issue when you plan to work on a bug or new feature and wait for other devs input before start coding.
* Once the new feature is approved or the problem confirmed, go to your local copy and create a new branch to work on it. Use a descriptive name for it, include the issue number for reference.
``$ git checkout -b improve-contacts-99``
* Do your coding and push it to your fork. Include as few commits as possible (one should be enough) and a good description. Always include a reference to the issue with "Fix #number".
```
$ git add .
$ git commit -m "Improved contact list. Fix #99"
$ git push origin improve-contacts-99
```
* Do a new pull request from your "improve-contacts-99" branch to webogram "master".
#### How to implement changes suggested on a pull request
Sometimes when you submit a PR, you will be asked to correct some code. You can make the changes on your work branch and commit normally and the PR will be automatically updated.
``$ git commit -am "Ops, fixing typo"``
Once everything is OK, you will be asked to merge all commit messages into one to keep history clean.
``$ git rebase -i master``
Edit the file and mark as fixup (f) all commits you want to merge with the first one:
```
pick 1c85e07 Improved contact list. Fix #99
f c595f79 Ops, fixing typo
```
Once rebased you can force a push to your fork branch and the PR will be automatically updated.
``$ git push origin improve-contacts-99 --force``
#### How to keep your local branches updated
To keep your local master branch updated with upstream master, regularly do:
```
$ git fetch upstream
$ git checkout master
$ git pull --rebase upstream master
```
To update the branch you are coding in:
```
$ git checkout improve-contacts-99
$ git rebase master
```
FROM node
ADD . /opt/webogram
WORKDIR /opt/webogram
RUN npm install -g gulp && npm install
EXPOSE 8000
CMD ["gulp", "watch"]
This diff is collapsed.
package:
rm -rf dist_package
./node_modules/gulp/bin/gulp.js clean
./node_modules/gulp/bin/gulp.js package
cp -r dist dist_package
find dist_package | grep "\.git\|DS_Store\|.swp" | xargs rm -rf
cd dist_package && zip -r ../releases/webogram_v$(version).zip .
ghdist:
rm -rf dist
mkdir dist
cp -r .git dist/
cd dist && git checkout gh-pages
publish:
./node_modules/gulp/bin/gulp.js clean
cd dist && git pull origin gh-pages
./node_modules/gulp/bin/gulp.js publish
echo -n "Please open http://localhost:8000/dist/index.html and check if everything works fine." && read -e
cd dist && git add --all . && git commit -am "merged with master" && git push origin gh-pages
bump:
./node_modules/gulp/bin/gulp.js bump
txinstall:
curl -O https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py
sudo python get-pip.py
sudo pip install transifex-client
txupdate:
tx pull -f
txupload:
tx pull -f
tx push -s
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## [Webogram](https://web.telegram.org) — Telegram Web App
Telegram offers great [apps for mobile communication](https://www.telegram.org). It is based on the [MTProto protocol](https://core.telegram.org/mtproto) and has an [Open API](https://core.telegram.org/api). I personally like Telegram for its speed and cloud-support (that makes a web app possible, unlike in the case of WA and others).
MTProto data can be carried over HTTP (SSL is also supported), so this project is my take at creating one.
That said, I'm using this app myself and I'd like to share its sources, so anyone can contribute to the development. Any help is welcome!
### Interface
Here are some screenshots of the interface:
![Sample screenshot 1](/app/img/screenshot1.png)
![Mobile screenshot 2](/app/img/screenshot2.png)
![Mobile screenshot 3](/app/img/screenshot3.png)
### Unsupported at the moment
* Secret chats
* Black list
* ...
### Maintained locations
| Description | URL | Type |
| ------------- |-------------| -----:|
| Online Web-version (hosted on Telegram servers) | https://web.telegram.org/ | hosted
| Online Web-version (hosted on GitHub pages) | https://zhukov.github.io/webogram | hosted
| Chrome Web Store | [https://chrome.google.com/webstore/detail/telegram/ clhhggbfdinjmjhajaheehoeibfljjno](https://chrome.google.com/webstore/detail/telegram/clhhggbfdinjmjhajaheehoeibfljjno) | packed
| Firefox & FirefoxOS Marketplace | https://marketplace.firefox.com/app/telegram | packed
**Hosted version**: the app is downloaded via HTTPS as a usual website. Will be available offline due to application cache.
**Packed version**: the app is downloaded at once in a package via HTTPS. The package is updated less frequently than the Web-version.
All of the apps above are submitted and maintained by [@zhukov](https://github.com/zhukov), so feel free to use them and report bugs [here](https://github.com/zhukov/webogram/issues). Please do not report bugs which are only reproducible in different locations.
## Technical details
The app is based on the AngularJS JavaScript framework, and written in pure JavaScript. jQuery is used for DOM manipulations, and Bootstrap as the CSS-framework.
### Running locally
The project repository is based on angularjs-seed and includes gulp tasks, so it's easy to launch the app locally on your desktop.
Install [node.js](http://nodejs.org/).
Install dependencies with:
```lang=bash
npm install
```
Optionally, run the following commands in the project directory to install gulp globally:
```lang=bash
sudo npm install -g gulp
```
This will install all the needed dependencies.
#### Running web-server
Just run `npm start` (`gulp watch`) to start the web server and the livereload task.
Open http://localhost:8000/app/index.html in your browser.
#### Running as Chrome Packaged App
To run this application in Google Chrome as a packaged app, open this URL (in Chrome): `chrome://extensions/`, then tick "Developer mode" and press "Load unpacked extension...". Select the downloaded `app` folder and Webogram should appear in the list.
Run `npm start` (`gulp watch`) to watch for file changes and automatically rebuild the app.
#### Running as Firefox OS App
To run this application in Firefox as a packaged app, open "Menu" -> "Developer" -> "WebIDE" (or hit `Shift + F8`). Choose "Open packaged app" from the Project menu and select the `app` folder.
Run `npm start` (`gulp watch`) to watch for file changes and automatically rebuild the app.
#### Running in production
Run `npm run clean` (`gulp clean`), then `npm run build` (`gulp publish`) to build the minimized production version of the app. Copy `dist` folder contents to your web server. Don't forget to set `X-Frame-Options SAMEORIGIN` header ([docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options)).
### Third party libraries
Besides the frameworks mentioned above, other libraries are used for protocol and UI needs. Here is the short list:
* [JSBN](http://www-cs-students.stanford.edu/~tjw/jsbn/)
* [CryptoJS](https://code.google.com/p/crypto-js/)
* [zlib.js](https://github.com/imaya/zlib.js)
* [UI Bootstrap](http://angular-ui.github.io/bootstrap/)
* [jQuery Emojiarea](https://github.com/diy/jquery-emojiarea)
* [nanoScrollerJS](https://github.com/jamesflorentino/nanoScrollerJS)
* [gemoji](https://github.com/github/gemoji)
* [emoji-data](https://github.com/iamcal/emoji-data)
Many thanks to all these libraries' authors and contributors. A detailed list with descriptions and licenses is available [here](/app/vendor).
### Licensing
The source code is licensed under GPL v3. License is available [here](/LICENSE).
### [Contribute](CONTRIBUTING.md)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" style="display:block; overflow: auto; background: #f8f8f8;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Telegram Web</title>
<!-- build:css css/badbrowser.css -->
<link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.css"/>
<link rel="stylesheet" href="css/app.css"/>
<!-- endbuild -->
<link rel="icon" href="favicon.ico" type="image/x-icon" />
</head>
<body class="non_osx is_1x">
<div class="welcome_form" style="padding-bottom: 50px; clear: both;">
<div class="bad_browser_wrap">
<h2>Your browser is outdated!</h2>
<div class="bad_browser_text">
<p>
Don't take this personally, but your browser is too old to run <strong>Telegram Web</strong>.<br/>
We require HTML5 support for the MTProto secure messaging protocol to work.
</p>
<p>
Unfortunately, your current browser doesn't support HTML5.<br/>
Please download a modern browser and come back soon!
</p>
</div>
<a class="btn btn-primary btn-lg pull-right" href="//firefox.com" target="_blank">Download Mozilla Firefox</a>
<a class="btn btn-primary btn-lg" href="//google.com/chrome" target="_blank">Download Google Chrome</a>
</div>
</div>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 62 14"><g transform="translate(-32.463-118.67)" fill="#fff"><path d="m32.463 118.67h8.656v1.617h-3.4v9.08h-1.872v-9.08h-3.385v-1.617"/><path d="m45.783 124.81c-.02-.27-.08-.529-.18-.779-.09-.25-.22-.464-.389-.644-.16-.19-.359-.339-.599-.449-.23-.12-.489-.18-.779-.18-.3 0-.574.055-.824.165-.24.1-.449.245-.629.434-.17.18-.31.394-.419.644-.1.25-.155.519-.165.809h3.984m-3.984 1.123c0 .3.04.589.12.869.09.28.22.524.389.734s.384.379.644.509c.26.12.569.18.929.18.499 0 .899-.105 1.198-.314.309-.22.539-.544.689-.973h1.617c-.09.419-.245.794-.464 1.123-.22.329-.484.609-.794.839-.31.22-.659.384-1.048.494-.379.12-.779.18-1.198.18-.609 0-1.148-.1-1.617-.3-.469-.2-.869-.479-1.198-.839-.319-.359-.564-.789-.734-1.288-.16-.499-.24-1.048-.24-1.647 0-.549.085-1.068.255-1.558.18-.499.429-.934.749-1.303.329-.379.724-.679 1.183-.899.459-.22.978-.329 1.557-.329.609 0 1.153.13 1.632.389.489.25.894.584 1.213 1 .319.419.549.904.689 1.453.15.539.19 1.098.12 1.677h-5.691"/><path d="m48.848 118.67h1.707v10.693h-1.707v-10.693"/><path d="m57.717 124.81c-.02-.27-.08-.529-.18-.779-.09-.25-.22-.464-.389-.644-.16-.19-.359-.339-.599-.449-.23-.12-.489-.18-.779-.18-.3 0-.574.055-.824.165-.24.1-.449.245-.629.434-.17.18-.31.394-.419.644-.1.25-.155.519-.165.809h3.984m-3.984 1.123c0 .3.04.589.12.869.09.28.22.524.389.734s.384.379.644.509c.26.12.569.18.929.18.499 0 .899-.105 1.198-.314.309-.22.539-.544.689-.973h1.617c-.09.419-.245.794-.464 1.123-.22.329-.484.609-.794.839-.31.22-.659.384-1.048.494-.379.12-.779.18-1.198.18-.609 0-1.148-.1-1.617-.3-.469-.2-.869-.479-1.198-.839-.319-.359-.564-.789-.734-1.288-.16-.499-.24-1.048-.24-1.647 0-.549.085-1.068.255-1.558.18-.499.429-.934.749-1.303.329-.379.724-.679 1.183-.899.459-.22.978-.329 1.557-.329.609 0 1.153.13 1.632.389.489.25.894.584 1.213 1 .319.419.549.904.689 1.453.15.539.19 1.098.12 1.677h-5.691"/><path d="m67.896 128.96c0 1.168-.329 2.037-.988 2.606-.649.579-1.588.869-2.816.869-.389 0-.784-.04-1.183-.12-.389-.08-.749-.215-1.078-.404-.319-.19-.589-.439-.809-.749-.22-.31-.349-.689-.389-1.138h1.707c.05.24.135.434.255.584.12.15.26.265.419.344.17.09.354.145.554.165.2.03.409.045.629.045.689 0 1.193-.17 1.513-.509.319-.339.479-.829.479-1.468v-1.183h-.03c-.24.429-.569.764-.988 1-.409.24-.854.359-1.333.359-.619 0-1.148-.105-1.587-.315-.429-.22-.789-.514-1.078-.884-.28-.379-.484-.814-.614-1.303-.13-.489-.195-1.013-.195-1.573 0-.519.08-1.013.24-1.483.16-.469.389-.879.689-1.228.3-.359.664-.644 1.093-.854.439-.21.934-.314 1.483-.314.489 0 .939.105 1.348.314.409.2.724.519.944.958h.03v-1.063h1.707v7.338m-3.789-.944c.379 0 .699-.075.958-.225.27-.16.484-.364.644-.614.17-.26.29-.549.359-.869.08-.329.12-.659.12-.988 0-.329-.04-.649-.12-.958-.08-.309-.205-.584-.374-.824-.16-.24-.374-.429-.644-.569-.26-.14-.574-.21-.944-.21-.379 0-.699.08-.958.24-.26.16-.469.369-.629.629-.16.25-.275.539-.344.869-.07.32-.105.639-.105.958 0 .32.04.634.12.944.08.3.2.569.359.809.17.24.379.434.629.584.26.15.569.225.929.225"/><path d="m69.63 121.62h1.603v1.498h.03c.05-.21.145-.414.285-.614.15-.2.324-.379.524-.539.21-.17.439-.305.689-.404.25-.1.504-.15.764-.15.2 0 .334.005.404.015.08.01.16.02.24.03v1.647c-.12-.02-.245-.035-.374-.045-.12-.02-.24-.03-.359-.03-.29 0-.564.06-.824.18-.25.11-.469.28-.659.509-.19.22-.339.494-.449.824-.11.329-.165.709-.165 1.138v3.684h-1.707v-7.743"/><path d="m81.38 127.65c0 .21.025.359.075.449.06.09.17.135.329.135h.18c.07 0 .15-.01.24-.03v1.183c-.06.02-.14.04-.24.06-.09.03-.185.055-.285.075-.1.02-.2.035-.3.045-.1.01-.185.015-.255.015-.349 0-.639-.07-.869-.21-.23-.14-.379-.384-.449-.734-.339.329-.759.569-1.258.719-.489.15-.963.225-1.423.225-.349 0-.684-.05-1-.15-.32-.09-.604-.225-.854-.404-.24-.19-.434-.424-.584-.704-.14-.29-.21-.624-.21-1 0-.479.085-.869.255-1.168.18-.3.409-.534.689-.704.29-.17.609-.29.958-.359.359-.08.719-.14 1.078-.18.309-.06.604-.1.884-.12.28-.03.524-.075.734-.135.22-.06.389-.15.509-.27.13-.13.195-.319.195-.569 0-.22-.055-.399-.165-.539-.1-.14-.23-.245-.389-.314-.15-.08-.32-.13-.509-.15-.19-.03-.369-.045-.539-.045-.479 0-.874.1-1.183.3-.31.2-.484.509-.524.929h-1.707c.03-.499.15-.914.359-1.243.21-.329.474-.594.794-.794.329-.2.699-.339 1.108-.419.409-.08.829-.12 1.258-.12.379 0 .754.04 1.123.12.369.08.699.21.988.389.3.18.539.414.719.704.18.28.27.624.27 1.033v3.984m-1.707-2.157c-.26.17-.579.275-.958.314-.379.03-.759.08-1.138.15-.18.03-.354.075-.524.135-.17.05-.32.125-.449.225-.13.09-.235.215-.314.374-.07.15-.105.334-.105.554 0 .19.055.349.165.479.11.13.24.235.389.315.16.07.329.12.509.15.19.03.359.045.509.045.19 0 .394-.025.614-.075s.424-.135.614-.255c.2-.12.364-.27.494-.449.13-.19.195-.419.195-.689v-1.273"/><path d="m83.23 121.62h1.617v1.078h.045c.13-.19.27-.364.419-.524.15-.16.314-.295.494-.404.19-.11.404-.195.644-.255.24-.07.514-.105.824-.105.469 0 .904.105 1.303.314.409.21.699.534.869.973.29-.399.624-.714 1-.944.379-.23.854-.344 1.423-.344.819 0 1.453.2 1.902.599.459.399.689 1.068.689 2.01v5.346h-1.707v-4.523c0-.309-.01-.589-.03-.839-.02-.26-.08-.479-.18-.659-.09-.19-.23-.334-.419-.434-.19-.1-.449-.15-.779-.15-.579 0-.998.18-1.258.539-.26.359-.389.869-.389 1.528v4.538h-1.707v-4.972c0-.539-.1-.944-.3-1.213-.19-.28-.544-.419-1.063-.419-.22 0-.434.045-.644.135-.2.09-.379.22-.539.389-.15.17-.275.379-.374.629-.09.25-.135.534-.135.854v4.598h-1.707v-7.743"/></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="IFTTT_Applet_Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" width="620px" height="620px" viewBox="0 0 620 620" enable-background="new 0 0 620 620" xml:space="preserve">
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="311.1667" y1="603.3333" x2="311.1667" y2="19">
<stop offset="0" style="stop-color:#1D93D2"/>
<stop offset="1" style="stop-color:#38B0E3"/>
</linearGradient>
<circle fill="url(#SVGID_1_)" stroke="#FFFFFF" stroke-width="28" stroke-miterlimit="10" cx="311.167" cy="311.167" r="292.167"/>
<path fill="#C8DAEA" d="M220.759,338.848l35.363,97.88c0,0,4.42,9.157,9.157,9.157s75.147-73.252,75.147-73.252l78.304-151.24
l-196.707,92.197L220.759,338.848z"/>
<path fill="#A9C6D8" d="M267.646,363.949l-6.788,72.147c0,0-2.842,22.102,19.26,0c22.102-22.102,43.257-39.152,43.257-39.152"/>
<g>
<path fill="#FFFFFF" d="M221.398,342.34l-72.734-23.7c0,0-8.683-3.526-5.894-11.525c0.575-1.65,1.736-3.052,5.21-5.473
c16.119-11.234,298.324-112.667,298.324-112.667s7.969-2.683,12.677-0.898c2.152,0.816,3.526,1.737,4.684,5.104
c0.421,1.225,0.663,3.83,0.631,6.42c-0.023,1.868-0.253,3.599-0.421,6.315c-1.719,27.732-53.145,234.705-53.145,234.705
s-3.076,12.112-14.103,12.524c-4.02,0.15-8.9-0.664-14.734-5.683c-21.635-18.612-96.42-68.87-112.944-79.924
c-0.93-0.622-1.197-1.433-1.354-2.222c-0.233-1.165,1.034-2.61,1.034-2.61S398.847,246.957,402.31,234.811
c0.268-0.941-0.739-1.406-2.105-1c-8.65,3.182-158.58,97.857-175.126,108.312C224.112,342.734,221.398,342.34,221.398,342.34z"/>
</g>
</svg>
<!doctype html>
<html lang="en" manifest="webogram.appcache" ng-csp="" xmlns:ng="http://angularjs.org" id="ng-app" style="display: none;">
<head>
<!--[if lte IE 9]>
<meta HTTP-EQUIV="REFRESH" content="0; url=badbrowser.html">
<![endif]-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Telegram Web</title>
<!-- build:css css/app.css -->
<link rel="stylesheet" href="vendor/angular/angular-csp.css"/>
<link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.css"/>
<link rel="stylesheet" href="vendor/angularjs-toaster/toaster.css"/>
<link rel="stylesheet" href="css/app.css"/>
<!-- endbuild -->
<link rel="manifest" href="manifest.webapp.json"/>
<!-- <link rel="stylesheet" href="css/font.css"/> -->
<!-- <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600&amp;subset=cyrillic,cyrillic-ext,latin,latin-ext" rel="stylesheet" type="text/css"> -->
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="img/iphone_home120.png">
<link rel="apple-touch-icon" sizes="120x120" href="img/iphone_home120.png">
<link rel="apple-touch-startup-image" media="(device-width: 320px)" href="img/iphone_startup.png">
<meta name="apple-mobile-web-app-title" content="Telegram Web">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="theme-color" content="#497495">
<meta name="google" content="notranslate">
<meta property="og:title" content="Telegram Web">
<meta property="og:url" content="https://web.telegram.org/">
<meta property="og:image:width" content="236">
<meta property="og:image:height" content="236">
<meta property="og:image" content="https://web.telegram.org/img/logo_share.png">
<meta property="og:site_name" content="Telegram Web">
<meta property="description" content="Welcome to the Web application of Telegram messenger. See https://github.com/zhukov/webogram for more info.">
<meta property="og:description" content="Welcome to the Web application of Telegram messenger. See https://github.com/zhukov/webogram for more info.">
</head>
<body>
<div class="page_wrap" ng-view></div>
<div id="notify_sound"></div>
<!-- build:js js/app.js -->
<script type="text/javascript" src="js/lib/polyfill.js"></script>
<script type="text/javascript" src="vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="js/lib/config.js"></script>
<script type="text/javascript" src="js/init.js"></script>
<script type="text/javascript" src="js/offline_manager.js"></script>
<script type="text/javascript" src="vendor/jquery.nanoscroller/nanoscroller.js"></script>
<script type="text/javascript" src="vendor/angular/angular.js"></script>
<script type="text/javascript" src="vendor/angular/angular-route.js"></script>
<script type="text/javascript" src="vendor/angular/angular-animate.js"></script>
<script type="text/javascript" src="vendor/angular/angular-sanitize.js"></script>
<script type="text/javascript" src="vendor/angular/angular-touch.js"></script>
<script type="text/javascript" src="vendor/ui-bootstrap/ui-bootstrap-custom-tpls-0.12.0.js"></script>
<script type="text/javascript" src="vendor/angular-media-player/angular-media-player.js"></script>
<script type="text/javascript" src="vendor/jsbn/jsbn_combined.js"></script>
<script type="text/javascript" src="vendor/cryptoJS/crypto.js"></script>
<script type="text/javascript" src="vendor/rusha/rusha.js"></script>
<script type="text/javascript" src="vendor/zlib/gunzip.min.js"></script>
<script type="text/javascript" src="vendor/closure/long.js"></script>
<script type="text/javascript" src="vendor/leemon_bigint/bigint.js"></script>
<script type="text/javascript" src="vendor/libwebpjs/libwebp-0.2.0.js"></script>
<script type="text/javascript" src="vendor/angularjs-toaster/toaster.js"></script>
<script type="text/javascript" src="vendor/clipboard/clipboard.js"></script>
<script type="text/javascript" src="vendor/ogv.js/ogv.js"></script>
<script type="text/javascript" src="vendor/ogv.js/ogv-demuxer-ogg.js"></script>
<script type="text/javascript" src="vendor/ogv.js/ogv-decoder-audio-opus.js"></script>
<script type="text/javascript" src="vendor/ogv.js/ogv-decoder-audio-vorbis.js"></script>
<script type="text/javascript" src="vendor/ogv.js/ogv-support.js"></script>
<script type="text/javascript" src="vendor/recorderjs/recorder.min.js"></script>
<script type="text/javascript" src="js/lib/utils.js"></script>
<script type="text/javascript" src="js/lib/bin_utils.js"></script>
<script type="text/javascript" src="js/lib/tl_utils.js"></script>
<script type="text/javascript" src="js/lib/ng_utils.js"></script>
<script type="text/javascript" src="js/lib/i18n.js"></script>
<script type="text/javascript" src="js/lib/mtproto.js"></script>
<script type="text/javascript" src="js/lib/mtproto_wrapper.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/services.js"></script>
<script type="text/javascript" src="js/controllers.js"></script>
<script type="text/javascript" src="js/filters.js"></script>
<script type="text/javascript" src="js/messages_manager.js"></script>
<!--PRODUCTION_ONLY_BEGIN
<script type="text/javascript" src="js/templates.js"></script>
PRODUCTION_ONLY_END-->
<script type="text/javascript" src="js/message_composer.js"></script>
<script type="text/javascript" src="js/directives.js"></script>
<script type="text/javascript" src="js/directives_mobile.js"></script>
<!-- endbuild -->
</body>
</html>
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
'use strict'
/* global Config, templateUrl */
var extraModules = []
if (Config.Modes.animations) {
extraModules.push('ngAnimate')
}
// Declare app level module which depends on filters, and services
angular.module('myApp', [
'ngRoute',
'ngSanitize',
'ngTouch',
'ui.bootstrap',
'mediaPlayer',
'toaster',
'izhukov.utils',
'izhukov.mtproto',
'izhukov.mtproto.wrapper',
'myApp.filters',
'myApp.services',
/*PRODUCTION_ONLY_BEGIN
'myApp.templates',
PRODUCTION_ONLY_END*/
'myApp.directives',
'myApp.controllers'
].concat(extraModules)).config(['$locationProvider', '$routeProvider', '$compileProvider', 'StorageProvider', function ($locationProvider, $routeProvider, $compileProvider, StorageProvider) {
$locationProvider.hashPrefix('');
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|blob|filesystem|chrome-extension|app):|data:image\//)
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|file|tg|mailto|blob|filesystem|chrome-extension|app):|data:/)
/*PRODUCTION_ONLY_BEGIN
$compileProvider.debugInfoEnabled(false)
PRODUCTION_ONLY_END*/
if (Config.Modes.test) {
StorageProvider.setPrefix('t_')
}
$routeProvider.when('/', {template: '', controller: 'AppWelcomeController'})
$routeProvider.when('/login', {templateUrl: templateUrl('login'), controller: 'AppLoginController'})
$routeProvider.when('/im', {templateUrl: templateUrl('im'), controller: 'AppIMController', reloadOnSearch: false})
$routeProvider.otherwise({redirectTo: '/'})
}])
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
chrome.app.runtime.onLaunched.addListener(function (launchData) {
var isWindows = typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.match(/windows/i) ? true : false
chrome.app.window.create('../index.html', {
id: 'webogram-chat',
innerBounds: {
width: 1000,
height: 700
},
minWidth: 320,
minHeight: 400,
frame: isWindows ? { color: '#5682a3' } : 'chrome'
})
})
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
'use strict'
/* global Config, tsNow */
/* Filters */
angular.module('myApp.filters', ['myApp.i18n'])
.filter('userName', function (_) {
return function (user) {
if (!user || !user.first_name && !user.last_name) {
return _('user_name_deleted')
}
return user.first_name ? (user.first_name + (user.last_name ? ' ' + user.last_name : '')) : user.last_name
}
})
.filter('userFirstName', function (_) {
return function (user) {
if (!user || !user.first_name && !user.last_name) {
return _('user_first_name_deleted')
}
return user.first_name || user.last_name
}
})
.filter('userStatus', function ($filter, _) {
var relativeTimeFilter = $filter('relativeTime')
return function (user, botChatPrivacy) {
if (user && !(user.id % 1000)) {
if (user.id === 777000) {
return _('user_status_service_notifications')
}
return _('user_status_support')
}
var statusType = user && user.status && user.status._
if (!statusType) {
statusType = user && user.pFlags && user.pFlags.bot ? 'userStatusBot' : 'userStatusEmpty'
}
switch (statusType) {
case 'userStatusOnline':
return _('user_status_online')
case 'userStatusOffline':
return _('user_status_last_seen', relativeTimeFilter(user.status.was_online))
case 'userStatusRecently':
return _('user_status_recently')
case 'userStatusLastWeek':
return _('user_status_last_week')
case 'userStatusLastMonth':
return _('user_status_last_month')
case 'userStatusBot':
if (botChatPrivacy) {
if (user.pFlags.bot_chat_history) {
return _('user_status_bot_noprivacy')
} else {
return _('user_status_bot_privacy')
}
}
return _('user_status_bot')
case 'userStatusEmpty':
default:
return _('user_status_long_ago')
}
}
})
.filter('chatTitle', function (_) {
return function (chat) {
if (!chat || !chat.title) {
return _('chat_title_deleted')
}
return chat.title
}
})
.filter('dateOrTime', function ($filter) {
var dateFilter = $filter('date')
return function (timestamp, extended) {
if (!timestamp) {
return ''
}
var ticks = timestamp * 1000
var diff = Math.abs(tsNow() - ticks)
var format = 'shortTime'
if (diff > 518400000) { // 6 days
format = extended ? 'mediumDate' : 'shortDate'
} else if (diff > 43200000) { // 12 hours
format = extended ? 'EEEE' : 'EEE'
}
return dateFilter(ticks, format)
}
})
.filter('dateMedium', function ($filter) {
var dateFilter = $filter('date')
return function (timestamp, extended) {
var ticks = timestamp * 1000
return dateFilter(ticks, 'medium')
}
})
.filter('time', function ($filter) {
var cachedDates = {}
var dateFilter = $filter('date')
var format = Config.Mobile ? 'shortTime' : 'mediumTime'
return function (timestamp) {
if (cachedDates[timestamp]) {
return cachedDates[timestamp]
}
return cachedDates[timestamp] = dateFilter(timestamp * 1000, format)
}
})
.filter('myDate', function ($filter) {
var cachedDates = {}
var dateFilter = $filter('date')
return function (timestamp) {
if (cachedDates[timestamp]) {
return cachedDates[timestamp]
}
return cachedDates[timestamp] = dateFilter(timestamp * 1000, 'fullDate')
}
})
.filter('duration', [function () {
return function (duration) {
duration = parseInt(duration)
if (isNaN(duration)) {
duration = 0
}
var hours = Math.floor(duration / 3600)
var mins = Math.floor((duration % 3600) / 60)
var secs = duration % 60
var durationStr = (hours ? hours + ':' : '') + mins + ':' + secs
durationStr = durationStr.replace(/:(\d(?::|$))/g, ':0$1')
return durationStr
}
}])
.filter('durationRemains', function ($filter) {
var durationFilter = $filter('duration')
return function (done, total) {
return '-' + durationFilter(total - done)
}
})
.filter('phoneNumber', [function () {
return function (phoneRaw) {
var nbsp = ' '
phoneRaw = (phoneRaw || '').replace(/\D/g, '')
if (phoneRaw.charAt(0) === '7' && phoneRaw.length === 11) {
return '+' + phoneRaw.charAt(0) + nbsp + '(' + phoneRaw.substr(1, 3) + ')' + nbsp + phoneRaw.substr(4, 3) + '-' + phoneRaw.substr(7, 2) + '-' + phoneRaw.substr(9, 2)
}
return '+' + phoneRaw
}
}])
.filter('formatSize', [function () {
return function (size, progressing) {
if (!size) {
return '0'
} else if (size < 1024) {
return size + ' b'
} else if (size < 1048576) {
return Math.round(size / 1024) + ' KB'
}
var mbs = size / 1048576
if (progressing) {
mbs = mbs.toFixed(1)
} else {
mbs = (Math.round(mbs * 10) / 10)
}
return mbs + ' MB'
}
}])
.filter('formatSizeProgress', function ($filter, _) {
var formatSizeFilter = $filter('formatSize')
return function (progress) {
if (!progress.total) {
return ''
}
var done = formatSizeFilter(progress.done, true)
var doneParts = done.split(' ')
var total = formatSizeFilter(progress.total)
var totalParts = total.split(' ')
if (totalParts[1] === doneParts[1]) {
return _('format_size_progress_mulitple', {done: doneParts[0], total: totalParts[0], parts: doneParts[1]})
}
return _('format_size_progress', {done: done, total: total})
}
})
.filter('formatShortNumber', [function () {
return function (num) {
var mult
if (!num) {
return '0'
} else if (num < 1000) {
return num.toString()
} else if (num < 900000) {
mult = num > 10000 ? 1 : 10
return (Math.round(num / 1000 * mult) / mult) + 'K'
}
mult = num > 10000000 ? 1 : 10
return (Math.round(num / 1000000 * mult) / mult) + 'M'
}
}])
.filter('nl2br', [function () {
return function (text) {
return text.replace(/\n/g, '<br/>')
}
}])
.filter('shortUrl', [function () {
return function (text) {
if (typeof text !== 'string') {
return text
}
return text.replace(/^https?:\/\//, '').replace(/^www\./, '')
}
}])
.filter('richText', function ($filter) {
var linkyFilter = $filter('linky')
return function (text) {
return linkyFilter(text, '_blank').replace(/\n|&#10;/g, '<br/>')
}
})
.filter('relativeTime', function ($filter, _) {
var langMinutesPluralize = _.pluralize('relative_time_pluralize_minutes_ago')
var langHoursPluralize = _.pluralize('relative_time_pluralize_hours_ago')
var dateOrTimeFilter = $filter('dateOrTime')
return function (timestamp) {
var diff = Math.abs(tsNow(true) - timestamp)
if (diff < 60) {
return _('relative_time_just_now')
}
if (diff < 3600) {
var minutes = Math.floor(diff / 60)
return langMinutesPluralize(minutes)
}
if (diff < 86400) {
var hours = Math.floor(diff / 3600)
return langHoursPluralize(hours)
}
return dateOrTimeFilter(timestamp, true)
}
})
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment