Перейти к публикации

Vesta Finance оверколатеризованый стейбл - форк Liquity на Arbitrum


Рекомендованные сообщения

Vesta Finance 

 

 5ncgcz.jpg.f4fc5089cdef7f316de823e5f6666a2f.jpg

 

Twitter: https://twitter.com/vestafinance
docs: https://docs.vestafinance.xyz/
introduction: https://medium.com/@VestaFinance/introducing-vault-finance-v1-high-capital-efficiency-lending-protocol-37245b8488ce

 

Протокол оверколатеризованого стейблкоина VST (Vesta Stable) привязанного с USD. Форк Liquity. https://github.com/liquity/dev .

 

Пользователи протокола размещают свои активы в качестве залога в протоколе и получают соответствующее количество VST (Vesta Stable).

 

В качестве залога для выпуска VST могут выступать ETH, renBTC, gOHM. Разработчики планируют расширить набор доступных залоговых активов.

 

Низкий порог сверхобеспечения для займа. Намного ниже чем у конкурентов. Так например для заема под ETH размер обеcпечения составляет 110% от суммы кредита, 110% для renBTC и 150% для кредита под залог gOHM.

 

Моментальное погашение займа. Держатели могут в любое время обменять свои VST на залог. Механизм выкупа наряду с алгоритмически регулируемыми комиссиями гарантирует минимальную стоимость стейблкоина в 1 доллар США.

 

Комьюнити-ориентированная токономика.  Половина объема токена управления governance token (VSTA) будет распределено среди комьюнити.

 

Управляемость. Параметры протокола, такие как плата за минт, комиссия за ликвидацию и ликвидационные инициативы, будут управляться руководством .

 

Поддержка L2. Стоимость взаимодействия с протоком на сети Arbitrum будет стоить в разы меньше, чем в Etherium mainnet, без ущерба для децентрализации, насколько это возможно.

 

Протокол всегда поддерживает избыточное обеспечение - долларовая стоимость заблокированных в протоколе активов превышает долларовую стоимость выпущенных стейблкоинов $VST.

$VST полностью выкупаем – холдеры токена всегда могут обменять $VST обшей стоимостью $x на базовое обеспечение стоимостью $x (за вычетом комиссии) непосредственно в самом протоколе.

Протокол алгоритмически контролирует объем создания $VST с помощью переменной платы за эмиссию.

После размещения обеспечения в  хранилище протокола, пользователи могут выпускать ("заимствовать") токены VST таким образом, чтобы коэффициент обеспечения их хранилища оставался выше 110%. Например пользователь с базовым обеспечением в хранилище на сумму $1000 может выпустить до 909,09 $VST.

Vesta регулярно обновляет цену залога по отношению к доллару США через децентрализованный канал данных. Если стоимость активов в хранилище пользователя опускается ниже минимального коэффициента обеспечения (MCR) в 110%,  заем считается недостаточно обеспеченным и залог может быть ликвидирован.

Протокол использует двухступенчатый механизм ликвидации в следующем порядке

Погашение долга хранилищ с недостаточным обеспечением из стабилизационного пула, содержащего токены VST

Перераспределения хранилищ с недостаточным обеспечением другим заемщикам если стабилизационный пула пуст.

 

Vesta использует в первую очередь токены VST в своем стабилизационном пуле для погошения долга хранилищ с недостаточным обеспечением.

 

Любой пользователь может внести токены VST в стабилизационный пул. Это позволяет им заработать ликвидациях. Когда происходит ликвидация, ликвидированный долг аннулируется таким же количеством VST (который в результате сжигается) в пуле, а ликвидированный залог пропорционально распределяется между вкладчиками VST в стабилизационный пул.

 

Вкладчики пула могут рассчитывать на прибыль от ликвидации, поскольку в большинстве случаев стоимость ликвидированных активов будет больше стоимости списанного долга, поскольку ликвидированное хранилище, скорее всего, будет иметь коэффициент индивидуального обеспечения (ICR) чуть ниже 110%.

 

Если ликвидированный долг превышает количество VST в Пуле стабильности, система пытается списать как можно больше долга с помощью токенов в Пуле стабильности, а затем перераспределяет оставшееся ликвидированное обеспечение и долг между всеми активными хранилищами.

 

Любой может вызвать публичную функцию  liquidateVaults() смарт-контракта, которая проверит хранилища с недостаточным обеспечением и ликвидирует их. В качестве альтернативы можно вызвать функцию batchLiquidateVaults() с пользовательским списком адресов хранилищ, которые нужно попытаться ликвидировать.

В настоящее время массовая ликвидация, осуществляемая с помощью вышеуказанных функций, обходится в 60-65 тыс. газа на хранилище. Таким образом, система может ликвидировать максимум 95-105 хранилищ за одну транзакцию.

Точное проведение ликвидации зависит от коэффициента индивидуального обеспечения (ICR) ликвидируемого хранилища и глобальных условий системы: общего коэффициента обеспечения (TCR) системы, размера Пула стабильности и т.д.

Ниже представлена логика ликвидации одного хранилища в нормальном режиме и режиме восстановления.

ICR - индивидуальный коэффициент обеспечения

MCR  - минимальный коэффициент обеспечения

TCR - общий коэффициент обеспечения

SP.USDV - стоимость $VST в стабилизационном пуле

 

Ликвидация в нормальном режиме: TCR >= 150%

ICR < MCR  &  SP.USDV >= vault.debt

Объем VST в StabilityPool, не меньше задолженности ликвидируемого хранилища, компенсируется задолженностью хранилища. Залог хранилища распределяется между вкладчиками.

ICR < MCR  &  SP.USDV < vault.debt

Общий объем StabilityPool VST компенсирует равную сумму долга из ликвидируемого хранилища. Часть залога хранилища (равная отношению его зачтенного долга ко всему долгу) распределяется между вкладчиками. Оставшийся долг и залог (за вычетом компенсации за газ ETH) перераспределяется между активными хранилищами.

ICR < MCR  & S P.USDV = 0

Перераспределение всех долгов и залогов (за вычетом компенсации за газ) в активные хранилища.

ICR >= MCR

Do nothing.

 

Ликвидация в режиме восстановления: TCR < 150%

ICR <=100%

Перераспределение всех долгов и залогов (за вычетом компенсации за газ) в активные хранилища.

100% < ICR < MCR & SP.USDV > vault.debt

Соответствующий объем VST в StabilityPool, равный долгу хранилища, компенсирует долг хранилища. Залог хранилища (за вычетом компенсации за газ) распределяется между вкладчиками пула.

100% < ICR < MCR & SP.USDV < vault.debt

Текущий объем VST StabilityPool компенсирует соответствующую сумму долга из хранилища. Часть залога хранилища (равная отношению его зачтенного долга ко всему долгу) распределяется между вкладчиками пула. Оставшийся долг и залог (за вычетом компенсации за газ) перераспределяется между активными хранилищами

MCR <= ICR < TCR & SP.USDV < vault.debt

Пул VST компенсируется равной суммой долга из хранилища. Часть залога с долларовой стоимостью, равной 1,1 * долг, распределяется между вкладчиками. Ничего не перераспределяется между другими активными хранилищами. Поскольку ICR был > 1,1, у хранилища остается остаток залога, который отправляется в CollSurplusPool и может быть востребован заемщиком. Хранилище закрывается.

MCR <= ICR < TCR & SP.USDV < vault.debt

Do nothing.

ICR >= TCR

Do nothing.

 

Вкладчики пула со временем наращивают свое депонированное обеспечение, поскольку ликвидированный долг аннулируется вместе с их депозитом в пуле стабильности. Когда они снимают все или часть вложенных токенов или пополняют свой депозит, система отправляет им накопленный доход от ликвидаций.

Аналогично, накопленная прибыль от ликвидаций автоматически применяется к хранилищу, когда владелец выполняет любую операцию - например, добавляет/выводит залог или выпускает/выплачивает VST.

Vesta стараются максимизировать производительность процесса ликвидаций и обеспечить, чтобы хранилища с недостаточным обеспечением быстро ликвидировались "агентами"  которые также могут владеть депозитами пула стабильности и которые рассчитывают получить прибыль от ликвидации.

Однако затраты на газ могут быть значительными. Если стоимость газа формальных функций ликвидации будет слишком высокой, это может отбить у ликвидаторов желание работать, и протокол будет держать слишком много хранилищ с недостаточным обеспечением слишком долго.

По этому протокол напрямую компенсирует ликвидаторам их расходы на газ, чтобы стимулировать оперативную ликвидацию как в обычные, так и в экстремальные периоды высоких цен на газ. Ликвидаторы должны быть уверены, что они, по крайней мере, выйдут на безубыточность, совершая ликвидационные операции.

Компенсация за газ выплачивается в виде VST и ликвидируемого залога. В то время как залог берется из ликвидируемого хранилища, VST предоставляется самим заемщиком. Когда заемщик впервые выпускает долговые обязательства, часть VST резервируется в качестве ликвидационного резерва. Таким образом, ликвидационная операция забирает обеспечение из ликвидируемого хранилища (хранилищ), отправляет зарезервированное VST и полагающуюся часть компенсации в хранилище обеспечения ликвидатора, а оставшуюся часть уничтожает.

Когда ликвидационная операция ликвидирует несколько хранилищ, каждое хранилище вносит VST и залог в общую сумму компенсации за операцию.

Компенсация за ликвидированное хранилище определяется по формуле:

Gas compensation = 50 VST + 0.5% of vault's collateral

Эта формула преследует следующие цели:

Обеспечить своевременную ликвидацию небольших хранилищ, по крайне мере в нормальные времена.

Обеспечить своевременную ликвидацию крупных хранилищ даже в периоды экстремально высоких цен на газ. Чем больше хранилище, тем сильнее стимул к его ликвидации.

Когда заемщик открывает хранилище, ему начисляют в заем 50 дополнительных VST, а сами 50 VST минтяться и отправляются в специальный контракт (GasPool) для потенциальной компенсации за газ ликвидатору.

Когда заемщик успешно закрывает свое активное хранилище, возвращает заем и забирает залог, эта газовая компенсация возвращается: 50 VST сгорают с баланса газового пула, а соответствующий долг в 50 VST на хранилище заемщика аннулируется.

Цель ликвидационного резерва 50 VST - обеспечить минимальный уровень газовой компенсации, независимо от размера залога хранилища или текущей цены залога.

Когда хранилище ликвидируется, 0,5% его залога отправляется ликвидатору вместе с ликвидационным резервом в размере 50 VST. Таким образом, ликвидатор всегда получает {50 VST + 0,5% залога} за ликвидируемое хранилище. Остаток обеспечения хранилища затем либо компенсируется, либо перераспределяется, либо используется комбинация обоих способов, в зависимости от суммы VST в Пуле стабильности.

В случае когда хранилище выкупается, выкуп производится без учета дополнительной компенсации 50 VST за газ.

 

Но если в результате погашения аннулируется сумма, то хранилище закрывается: ликвидационный резерв 50 VST аннулируется вместе с оставшимися 50 VST долга. То есть, газовая компенсация сжигается из газового пула, а долг 50 VST обнуляется.

 

Залоговый излишек из хранилища остается в протоколе, чтобы позже быть востребованным его владельцем.

 

Существуют вспомогательные функции контракта для компенсации газа. Функции компенсации за газ находятся в родительском контракте LiquityBase.sol:

_getCollGasCompensation(uint _entireColl) возвращает сумму залога, которая будет взята из залога хранилища и отправлена в качестве газовой компенсации.

_getCompositeDebt(uint _debt) возвращает составной долг (привлеченный долг + газовая компенсация) хранилища для расчета ICR.

Любой держатель VST может внести депозит VST в Пул стабильности. Пул предназначен для поглощения задолженности в результате ликвидаций и вознаграждения вкладчиков пула ликвидированным обеспечением, которое распределяется между всеми вкладчиками пропорционально размеру их вкладов.

Поскольку ликвидация ожидается при ICR чуть ниже 110%, и даже в самых крайних случаях – чуть выше 100%, вкладчик пула может рассчитывать на получение чистой прибыли от большинства ликвидаций. Если это так, то долларовая стоимость прибыли по обеспечению от ликвидации превышает долларовую стоимость потерь по VST (при условии, что цена VST составляет 1 доллар).

Излишек залога при ликвидации определяется как  $(залог) -  $(долг), где $(...) представляет собой долларовую стоимость.

При цене VST, равной $1, хранилища с ICR > 100% имеет положительный залоговый излишек.

После одной или нескольких ликвидаций депозит ликвидатора будет поглощать убытки VST и получать прибыль от ликвидированного залога. Оставшийся уменьшенный депозит - это компаундированный депозит.

Поставщики пула стабильности ожидают положительного ROI на свой первоначальный депозит. То есть:

$( прибыль от ликвидированного залога + компаундированный депозит) > $(начальный депозит в пуле)

Смешанные ликвидации: зачет и перераспределение

Когда ликвидация попадает в Пул стабильности, это называется взаимозачетом: долг ликвидуруемого хранилища зачитывается против количества VST в Пуле. Когда x долга VST зачтены, долг аннулируется, и x VST в Пуле сгорают. Если объем Пула стабильности больше, чем долг ликвидируемого хранилища,  долг аннулируется полностью, а все его обеспечение распределяется между вкладчиками пула. Это чистый взаимозачет.

Может случиться так, что объем VST в Пуле стабильности меньше, чем долг ликвидируемого хранилища. В этом случае весь Пул стабильности будет использован для компенсации только части долга хранилища, а соответствующая часть залога ликвидируемого хранилища будет передана поставщикам стабильности. Оставшаяся часть долга и залога хранилища перераспределяется между активными хранилищами. Это смешанный зачет и перераспределение.

Поскольку доля залога совпадает с долей зачитываемого долга, эффективный ICR залога и зачитываемого долга равен ICR ликвидируемого хранилища.  Таким образом, для вкладчиков пула доходность  ликвидации зависит только от ICR ликвидируемого хранилища.

 

Убытки по депозитам и прибыль от залога в Фонде стабильности – реализация.

Функциональность депозита описана в StabilityPool.sol (provideToSP, withdrawFromSP и т.д.). StabilityPool также обрабатывает расчет ликвидации и хранит остатки VST и обеспечения.

Когда ликвидация компенсируется с помощью Stability Pool, долг от ликвидации аннулируется сжиганием равного количества VST в пуле.

Отдельные депозиты участников пула гасят задолженность ликвидированного хранилища пропорционально доле их депозитов в общем объеме пула.

Аналогично залог ликвидированного хранилища распределяется между вкладчиками пула в той же пропорции.

Например: ликвидация, в результате которой опустошается 30% Пула стабильности, уменьшает каждый вклад на 30%, независимо от размера вклада.

Вот пример того, как Стабильный пул выполняет ликвидацию. В Пуле стабильности находятся 3 вкладчика, A, B и C, XYZ является обеспечением, а цена XYZ составляет 100 USD.

Есть два ликвидируемых хранилища, T1 и T2:

Хранилище

Обеспечение(XYZ)

Долг (VST)

 

ICR

$(XYZ) ($)

Излишек залога ($)

Т1

1.6

150

1.066666667

 

160

10

T2

2.45

225

1.088888889

245

20

 

Вот депозиты в пуле, до того как произойдет ликвидация:

Участник

Депозит

Доля в пуле

А

100

0.1667

В

200

0.3333

С

300

0.5

Всего

600

1

 

Теперь T1 поглощается Пулом: 150 долга аннулируется сжиганием 150 VST из Пула, а его 1,6 XYZ делится между вкладчиками. Мы видим, что прибыль, полученная A, B, C, пропорциональна их доле в общем объеме VST в Пуле стабильности:

Участник

Часть долга Т1

Депозит в пуле после

Прирост XYZ

$(деп + XYZ прирост) ($)

ROI

A

25

75

0.2666666667

 

101.6666667

0.01666666667

 

B

50

150

0.5333333333

203.3333333

0.01666666667

C

75

225

0.8

305

0.01666666667

Всего

150

450

1.6

610

0.01666666667

 

Теперь происходит вторая ликвидация, Т2: 225 долга аннулируется сжиганием 225 VST из пула, а 2,45 XYZ делится между вкладчиками. Накопленная прибыль XYZ включает всю прибыль XYZ от T1 и T2.

Участник

Часть долга Т2

Депозит в пуле после

Прирост XYZ

$(деп + XYZ прирост) ($)

ROI

A

37.5

37.5

0.675

105

0.05

B

75

75

1.35

210

0.05

C

112.5

112.5

2.025

315

0.05

Всего

225

225

4.05

640

0.05

 

Каждый вкладчик пула получает одинаковую доходность от данной ликвидации

Доходность вкладчиков увеличивается со временем, поскольку депозиты поглощают ликвидации с положительным избытком обеспечения.

В конце концов, депозит может быть полностью "израсходован" на поглощение долга и уменьшен до 0. Это происходит всякий раз, когда происходит ликвидация, опустошающая пул стабильности. Депозит перестает получать прибыль от ликвидируемого обеспечения, когда его значение снижается до 0.

Вкладчики пула получают свои скомпаундированные депозиты и соответствующий залоговый выигрыш по принципу "pull-based". Протокол рассчитывает компаундированный депозит вкладчика и накопленный залоговый выигрыш, когда вкладчик совершает операцию, изменяющую его залоговый депозит в хранилище.

Вкладчики вносят VST в пул посредством вызова функции provideToSP, а снимают с помощью withdrawFromSP. Накопленный ими залоговый выигрыш выплачивается каждый раз, когда они совершают операцию пополнения хранилища - таким образом, выплата залога происходит как при снятии, так и при пополнении .

Протокол использует хорошо масштабируемый метод отслеживания депозитов и прибыли от залога, который имеет сложность O(1).

Когда происходит ликвидация, вместо того, чтобы обновлять данные о депозитах и прибыли от залога каждого вкладчика, мы просто обновляем две промежуточные переменные: продукт P и сумму S.

Математические расчеты позволяют нам учесть первоначальный депозит и точно отследить все депозиты вкладчиков и накопленный залоговый доход с течением времени, по мере ликвидации, используя только эти две переменные. Когда вкладчики присоединяются к Пулу, они получают моментальный снепшот P и S.

Каждая ликвидация обновляет P и S. После серии ликвидаций можно рассчитать суммированный депозит и соответствующий залоговый выигрыш, используя начальный депозит, снепшот вкладчика и текущие значения P и S.

Каждый раз, когда вкладчик обновляет свой депозит (снятие, пополнение), его залоговая прибыль выплачивается, и он получает новые снепшоты P и S.

По духу это похоже на более простую схему Scalable Reward Distribution on the Ethereum Network Богдана Батога http://batog.info/papers/scalable-reward-distribution.pdf и других, однако математика здесь более сложная, поскольку выполняется расчет с компаундированием, уменьшением ставки и соответствующим залоговым вознаграждением.

 «Поставщики спокойствия» зарабатывают токены VSTA непрерывно с течением времени, пропорционально размеру своего вклада в пул. Это известно как "эмиссия сообщества", и это описано в CommunityIssuance.sol.

После развертывания и активации протокола CommunityIssuance будет располагать первоначальным запасом VSTA, который в настоящее время (предварительно) составляет 1,2 миллиона токенов VSTA.

Общий график эмиссии сообществ для VSTA является сублинейным и монотонным. В настоящее время (предварительно) мы реализуем ежегодный график "уменьшения вдвое", описываемый кумулятивной функцией эмиссии:

supplyCap * (1 - 0.5^t)

где t - год, а SupplyCap (предварительно) установлен на уровне 1,2 миллиона токенов VSTA.

В результате получается следующий график кумулятивной эмиссии для предложения VSTA сообщества:

Год

Выдано сообществу VSTA issued

0

0%

1

50%

2

75%

 

Кривая эмиссии VSTA призвана стимулировать как ранних вкладчиков, так и долгосрочные вклады.  Хотя кривая следует годовому графику уменьшения вдвое, на практике в контракте CommunityIssuance используются временные интервалы в одну минуту для более точного расчета вознаграждения.

Любой держатель VST (независимо от того, есть ли у него активное хранилище или нет) может погасить свой VST непосредственно в протоколе. Их VST обмениваются на базовое обеспечение по номинальной стоимости: Выкуп токенов VST возвращает стоимость базового обеспечения в размере $ (за вычетом комиссии за выкуп).

Когда VST выкупается за базовое обеспечение, система аннулирует VST за счет долга хранилищ, а базовое обеспечение берется из их залога.

Для того чтобы выполнить запрос на выкуп, хранилища выбираются в порядке возрастания коэффициента обеспечения.

Последовательность погашения из n шагов полностью погашает до n-1 хранилищ, и, и частично погашает до 1 хранилища, которое всегда является последним хранилищем в последовательности погашения.

Выкупы блокируются, когда TCR < 110% (нет необходимости ограничивать ICR < TCR). При таком TCR выкупы, скорее всего, будут невыгодны, так как VST, вероятно, торгуется выше $1, если система потерпела такой серьезный крах, но это может быть способом для злоумышленника с большим количеством VST снизить TCR еще больше.

Обратите внимание, что выкупы отключены в течение первых 14 дней работы с момента развертывания протокола Vesta для защиты денежной системы в период ее становления.

Большинство операций по выкупу включают частичный выкуп, так как выкупленная сумма вряд ли будет полностью соответствовать общей задолженности серии хранилищ.

Частично выкупленное хранилище снова вставляется в отсортированный список хранилищ и остается активным, но с уменьшенным залогом и долгом.

Хранилище определяется как "полностью погашенное", когда в результате погашения (долг - 50) его долга поглощает (долг - 50) VST. Затем его Ликвидационный резерв 50 VST аннулируется с оставшимися 50 долгами: Ликвидационный резерв сжигается с газового адреса, а долг 50 обнуляется.

Перед закрытием мы должны обработать избыток обеспечения хранилища: то есть избыток обеспечения, оставшийся после погашения, в связи с его первоначальным избыточным обеспечением.

Этот избыток залога отправляется в CollSurplusPool, и заемщик может получить его позже. Затем хранилище полностью закрывается.

 С экономической точки зрения, механизм выкупа создает жесткое ценовое дно для VST, гарантируя, что рыночная цена останется на уровне или близком к 1 доллару США.

Режим восстановления включается, когда общий коэффициент обеспечения (TCR) системы падает ниже критического коэффициента обеспечения (CCR) для данного типа обеспечения.

В режиме восстановления условия ликвидации смягчаются, и система блокирует операции заемщика, которые могут привести к дальнейшему снижению TCR.

Новые VST могут быть выданы только путем корректировки существующих хранилищ таким образом, чтобы улучшить их ICR, или путем открытия нового хранилища с ICR, превышающим CCR залога.

В целом, если корректировка существующего хранилища снижает его ICR, операция выполняется только в том случае, если полученный TCR выше CCR залога.

Режим восстановления структурирован таким образом, чтобы стимулировать заемщиков вести себя так, чтобы быстро поднять TCR обратно выше CCR залога, стимулировать держателей VST пополнять Пул стабильности.

С экономической точки зрения, режим восстановления призван стимулировать пополнение залога и погашение долга, а также сам по себе действует как самоотрицающий сдерживающий фактор: возможность его наступления фактически направляет систему от его достижения.

 

В отличие от отсутствия управления в Liquity, в Vesta будет внедрено управление, позволяющее пользователям голосовать за параметры в рамках протокола кредитования Vesta.

Пользователи смогут голосовать по таким параметрам, как процентные ставки, размер комиссии за минтинг и новые виды обеспечения.

Первоначально будет использоваться сервис Snapshot для проведения всех голосований.

Выбрана модель управления Genesis DAO, аналогичной модели BarnBridge, чтобы не позволить злоумышленникам, обладающим значительным количеством токенов, нанести ущерб протоколу.

DAO существует исключительно для выполнения решений, принятых в рамках предложений по управлению.

Голосование будут проводить на Snapshot.org.  Для инициализации голосования потребуется определенное количество токенов, и голосование будет проходить только при достижении кворума. Конкретное количество голосов, необходимое для этих пунктов, еще не известно, но будет определено в ближайшее время.

 

 Если дочитал – молодец! Если что-то осталось непонятым, попробуй посмотреть еще документацию по liquity https://docs.liquity.org/

 

Ссылка на комментарий

Заявлена возможность депозита gOHM, что уменьшает давление на на его стакан. Кроме того, спросил у разрабов напрямую о возможном бондинге VST в Olimpus, те  не стали отрицать.  Если так пойдет, может получится очень красиво. 

Ссылка на комментарий

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...