Firefox скрытые файлы cookie не в файлах cookie.sql?

Вы не имеете права читать каталог, поэтому вы не можете видеть, что внутри. С вашего терминала вы можете использовать инструменты chmod:

chmod -R +r android-sdk-linux

Это даст вам право на чтение (+ r) во всей директории внутри SDK (-R), и вы быть в состоянии войти в папку.

2
задан 17 April 2011 в 03:22

16 ответов

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.

Обходной путь доступен с использованием сценария Greasemonkey.

Установите дополнение Greasemonkey , Перезапустите Firefox. Между тем сохраните следующий текст как «jsessionid.user.js».
// ==UserScript==
// @name           JSESSIONID to localStorage
// @namespace      lekensteyn@gmail.com
// @description    Saves the JSESSIONID cookie in localStorage
// @include        https://demo.nadex.com/dealing/pd/cfd/security*
// ==/UserScript==
(function() {
    var sessid = document.cookie.match(/JSESSIONID=([^;]+)/);
    if (sessid) {
        var oldSID = localStorage.JSESSIONID;
        if (sessid != oldSID) localStorage.JSESSIONID = sessid[1];
    }
})();
Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно сделать сценарий ранее сохраненным идентификатором сеанса, вам необходимо изменить строку @include на что-то вроде https://demo.nadex.com/*. Я заметил, что никакой идентификатор сеанса не передается через HTTP, а только HTTPS. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Принять это. В Bash используйте что-то вроде:
sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \
 value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \
 AND host LIKE 'moc.xedan.%' LIMIT 1;")
moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);

Он отобразит null, если такого идентификатора не найдено. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com. Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 25 May 2018 в 22:04
  • 1
    В этом есть смысл. Я видел, что sqlite делает это с другими dbs, когда он что-то обновляет, но не закончил (обычно это транзакция). Какая волшебная команда sqlite, которая склеивает foo.db и foo-journal.db, поэтому я могу увидеть ее текущее содержимое? Как вы знаете, foo-journal.db не является sqlite db. – barrycarter 16 April 2011 в 18:10
  • 2
    @barrycarter: Я только что проверил это сам, и похоже, что Firefox хранит файл cookie сеанса в памяти, где изменения в данных хранилища HTML5 будут сразу видны в webappsstore.sqlite. Вы можете создать сценарий GreaseMonkey, который хранит содержимое cookie в localStorage (или только нужные вам данные, JSESSIONID?). Затем вместо доступа к файлу cookies.sqlite вам придется искать в webappsstore.sqlite. – Lekensteyn 16 April 2011 в 18:36
  • 3
    Я надеялся добавить cookie.sqlite в roaming.default.files, чтобы заставить Firefox обновлять его, но не уйти. Я не хорошо с JS, но если у него есть функция get_cookies (), и вы можете писать в хранилище HTML5, это может сработать. – barrycarter 16 April 2011 в 20:11
  • 4
    @barrycarter: добавлен скрипт Greasemonkey. Пожалуйста, сообщите, если это сработает. – Lekensteyn 16 April 2011 в 21:05

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.

Обходной путь доступен с использованием сценария Greasemonkey.

Установите дополнение Greasemonkey , Перезапустите Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // ==UserScript== // @name JSESSIONID to localStorage // @namespace lekensteyn@gmail.com // @description Saves the JSESSIONID cookie in localStorage // @include https://demo.nadex.com/dealing/pd/cfd/security* // ==/UserScript== (function() { var sessid = document.cookie.match(/JSESSIONID=([^;]+)/); if (sessid) { var oldSID = localStorage.JSESSIONID; if (sessid != oldSID) localStorage.JSESSIONID = sessid[1]; } })(); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно сделать сценарий ранее сохраненным идентификатором сеанса, вам необходимо изменить строку @include на что-то вроде https://demo.nadex.com/*. Я заметил, что никакой идентификатор сеанса не передается через HTTP, а только HTTPS. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Принять это. В Bash используйте что-то вроде: sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \ AND host LIKE 'moc.xedan.%' LIMIT 1;") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);

Он отобразит null, если такого идентификатора не найдено. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com. Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 25 July 2018 в 22:12

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.

Обходной путь доступен с использованием сценария Greasemonkey.

Установите дополнение Greasemonkey , Перезапустите Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // ==UserScript== // @name JSESSIONID to localStorage // @namespace lekensteyn@gmail.com // @description Saves the JSESSIONID cookie in localStorage // @include https://demo.nadex.com/dealing/pd/cfd/security* // ==/UserScript== (function() { var sessid = document.cookie.match(/JSESSIONID=([^;]+)/); if (sessid) { var oldSID = localStorage.JSESSIONID; if (sessid != oldSID) localStorage.JSESSIONID = sessid[1]; } })(); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно сделать сценарий ранее сохраненным идентификатором сеанса, вам необходимо изменить строку @include на что-то вроде https://demo.nadex.com/*. Я заметил, что никакой идентификатор сеанса не передается через HTTP, а только HTTPS. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Принять это. В Bash используйте что-то вроде: sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \ AND host LIKE 'moc.xedan.%' LIMIT 1;") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);

Он отобразит null, если такого идентификатора не найдено. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com. Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 2 August 2018 в 03:41

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.

Обходной путь доступен с использованием сценария Greasemonkey.

Установите дополнение Greasemonkey , Перезапустите Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // ==UserScript== // @name JSESSIONID to localStorage // @namespace lekensteyn@gmail.com // @description Saves the JSESSIONID cookie in localStorage // @include https://demo.nadex.com/dealing/pd/cfd/security* // ==/UserScript== (function() { var sessid = document.cookie.match(/JSESSIONID=([^;]+)/); if (sessid) { var oldSID = localStorage.JSESSIONID; if (sessid != oldSID) localStorage.JSESSIONID = sessid[1]; } })(); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно сделать сценарий ранее сохраненным идентификатором сеанса, вам необходимо изменить строку @include на что-то вроде https://demo.nadex.com/*. Я заметил, что никакой идентификатор сеанса не передается через HTTP, а только HTTPS. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Принять это. В Bash используйте что-то вроде: sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \ AND host LIKE 'moc.xedan.%' LIMIT 1;") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);

Он отобразит null, если такого идентификатора не найдено. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com. Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 4 August 2018 в 19:44

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.


Обходной путь доступен с использованием сценария Greasemonkey.

  1. Установите Greasemonkey add -on .
  2. Перезапустить Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // == UserScript == // @name JSESSIONID для localStorage // @namespace lekensteyn@gmail.com // @description Сохраняет файл cookie JSESSIONID в localStorage // @include https://demo.nadex.com/ / var / cfd / security * // == / UserScript == (function () {var sessid = document.cookie.match (/ JSESSIONID = ([^;] +) /); if (sessid) {var oldSID = localStorage.JSESSIONID; if (sessid! = oldSID) localStorage.JSESSIONID = sessid [1];}}) (); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно, чтобы скрипт сохранял идентификатор сеанса раньше, вам нужно изменить строку @include на что-то вроде https://demo.nadex.com/* . Я заметил, что идентификатор сеанса не передается через HTTP, а только HTTPS.
  3. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Примите это.
  4. В Bash используйте что-то вроде: sessid = $ (sqlite3 ~ / .mozilla / firefox / xxx.xxx / webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key = 'JSESSIONID 'И secure =' 1 '\ И host LIKE' moc.xedan.% 'LIMIT 1; ") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

  javascript: alert ("JSESSIONID =" + localStorage.JSESSIONID);   

Он не отображает null , если такого идентификатора нет. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com . Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 6 August 2018 в 03:48

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.


Обходной путь доступен с использованием сценария Greasemonkey.

  1. Установите Greasemonkey add -on .
  2. Перезапустить Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // == UserScript == // @name JSESSIONID для localStorage // @namespace lekensteyn@gmail.com // @description Сохраняет файл cookie JSESSIONID в localStorage // @include https://demo.nadex.com/ / var / cfd / security * // == / UserScript == (function () {var sessid = document.cookie.match (/ JSESSIONID = ([^;] +) /); if (sessid) {var oldSID = localStorage.JSESSIONID; if (sessid! = oldSID) localStorage.JSESSIONID = sessid [1];}}) (); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно, чтобы скрипт сохранял идентификатор сеанса раньше, вам нужно изменить строку @include на что-то вроде https://demo.nadex.com/* . Я заметил, что идентификатор сеанса не передается через HTTP, а только HTTPS.
  3. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Примите это.
  4. В Bash используйте что-то вроде: sessid = $ (sqlite3 ~ / .mozilla / firefox / xxx.xxx / webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key = 'JSESSIONID 'И secure =' 1 '\ И host LIKE' moc.xedan.% 'LIMIT 1; ") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

  javascript: alert ("JSESSIONID =" + localStorage.JSESSIONID);   

Он не отображает null , если такого идентификатора нет. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com . Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 7 August 2018 в 21:44

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.


Обходной путь доступен с использованием сценария Greasemonkey.

  1. Установите Greasemonkey add -on .
  2. Перезапустить Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // == UserScript == // @name JSESSIONID для localStorage // @namespace lekensteyn@gmail.com // @description Сохраняет файл cookie JSESSIONID в localStorage // @include https://demo.nadex.com/ / var / cfd / security * // == / UserScript == (function () {var sessid = document.cookie.match (/ JSESSIONID = ([^;] +) /); if (sessid) {var oldSID = localStorage.JSESSIONID; if (sessid! = oldSID) localStorage.JSESSIONID = sessid [1];}}) (); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно, чтобы скрипт сохранял идентификатор сеанса раньше, вам нужно изменить строку @include на что-то вроде https://demo.nadex.com/* . Я заметил, что идентификатор сеанса не передается через HTTP, а только HTTPS.
  3. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Примите это.
  4. В Bash используйте что-то вроде: sessid = $ (sqlite3 ~ / .mozilla / firefox / xxx.xxx / webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key = 'JSESSIONID 'И secure =' 1 '\ И host LIKE' moc.xedan.% 'LIMIT 1; ") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

  javascript: alert ("JSESSIONID =" + localStorage.JSESSIONID);   

Он не отображает null , если такого идентификатора нет. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com . Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 10 August 2018 в 09:58

Я подозреваю, что Firefox не обновляет файл cookie.sqlite напрямую для обеспечения целостности данных и производительности. Скорее, он временно хранит данные в файле cookie.sqlite-journal (Firefox 3.x). Поскольку cookie сеанса часто изменяется, разумно, что файлы cookie не присутствуют в файле cookie.sqlite. Когда Firefox закрыт, применяются изменения в cookie.sqlite.


Обходной путь доступен с использованием сценария Greasemonkey.

  1. Установите Greasemonkey add -on .
  2. Перезапустить Firefox. Между тем сохраните следующий текст как «jsessionid.user.js». // == UserScript == // @name JSESSIONID для localStorage // @namespace lekensteyn@gmail.com // @description Сохраняет файл cookie JSESSIONID в localStorage // @include https://demo.nadex.com/ / var / cfd / security * // == / UserScript == (function () {var sessid = document.cookie.match (/ JSESSIONID = ([^;] +) /); if (sessid) {var oldSID = localStorage.JSESSIONID; if (sessid! = oldSID) localStorage.JSESSIONID = sessid [1];}}) (); Это должно получить куки-файлы сеанса сразу после входа в систему и хранить с использованием хранилища HTML5, если идентификатор сеанса отличается от ранее сохраненного. Если вам нужно, чтобы скрипт сохранял идентификатор сеанса раньше, вам нужно изменить строку @include на что-то вроде https://demo.nadex.com/* . Я заметил, что идентификатор сеанса не передается через HTTP, а только HTTPS.
  3. Откройте файл jsessionid.user.js в Firefox (или перейдите в Firefox). Вам будет предложено установить его. Примите это.
  4. В Bash используйте что-то вроде: sessid = $ (sqlite3 ~ / .mozilla / firefox / xxx.xxx / webappsstore.sqlite "SELECT \ value FROM webappsstore2 WHERE key = 'JSESSIONID 'И secure =' 1 '\ И host LIKE' moc.xedan.% 'LIMIT 1; ") moc.xedan. является частью домена в обратном порядке.

Для отладки вы можете использовать следующий букмарклет:

  javascript: alert ("JSESSIONID =" + localStorage.JSESSIONID);   

Он не отображает null , если такого идентификатора нет. Обратите внимание, что это важно, выполняете ли вы его на https://demo.nadex.com или http://demo.nadex.com . Этот букмарклет можно вставить прямо в панель местоположения.

2
ответ дан 13 August 2018 в 16:17
  • 1
    В этом есть смысл. Я видел, что sqlite делает это с другими dbs, когда он что-то обновляет, но не закончил (обычно это транзакция). Какая волшебная команда sqlite, которая склеивает foo.db и foo-journal.db, поэтому я могу увидеть ее текущее содержимое? Как вы знаете, foo-journal.db не является sqlite db. – barrycarter 16 April 2011 в 18:10
  • 2
    – Lekensteyn 16 April 2011 в 18:36
  • 3
    Я надеялся добавить cookie.sqlite в roaming.default.files, чтобы заставить Firefox обновлять его, но не уйти. Я не хорошо с JS, но если у него есть функция get_cookies (), и вы можете писать в хранилище HTML5, это может сработать. – barrycarter 16 April 2011 в 20:11
  • 4
    @barrycarter: добавлен скрипт Greasemonkey. Пожалуйста, сообщите, если это сработает. – Lekensteyn 16 April 2011 в 21:05

вы можете найти свой идентификатор сеанса в файле sessionstore.js в своем профиле. grep для:

{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 25 May 2018 в 22:04

вы можете найти свой идентификатор сеанса в файле sessionstore.js в своем профиле. grep для:

{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 25 July 2018 в 22:12

вы можете найти свой идентификатор сеанса в файле sessionstore.js в своем профиле. grep для:

{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 2 August 2018 в 03:41

вы можете найти свой идентификатор сеанса в файле sessionstore.js в своем профиле. grep для:

{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 4 August 2018 в 19:44

вы можете найти свой идентификатор сеанса в sessionstore.js в своем профиле. grep для:

  {"host": "& lt; ваш сайт & gt;", "value": "(. +)", "path": "/", "name": "  JSESSIONID "," httponly ": true}  

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 6 August 2018 в 03:48

вы можете найти свой идентификатор сеанса в sessionstore.js в своем профиле. grep для:

  {"host": "& lt; ваш сайт & gt;", "value": "(. +)", "path": "/", "name": "  JSESSIONID "," httponly ": true}  

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 7 August 2018 в 21:44

вы можете найти свой идентификатор сеанса в sessionstore.js в своем профиле. grep для:

  {"host": "& lt; ваш сайт & gt;", "value": "(. +)", "path": "/", "name": "  JSESSIONID "," httponly ": true}  

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 10 August 2018 в 09:58

вы можете найти свой идентификатор сеанса в sessionstore.js в своем профиле. grep для:

  {"host": "& lt; ваш сайт & gt;", "value": "(. +)", "path": "/", "name": "  JSESSIONID "," httponly ": true}  

с соответствующим значением, как показано в окне управления файлами FF.

Вполне возможно, что это работает только если вы активировали механизм восстановления сеанса в свойствах.

0
ответ дан 13 August 2018 в 16:17

Другие вопросы по тегам:

Похожие вопросы: