From 5e1b972f3382d40c390e1159d2ac0f147d4e9524 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Thu, 24 Jun 2021 16:07:21 -0400 Subject: [PATCH 01/13] new celo branch & celo nodes in env & hardhat conf --- env | 2 + hardhat.config.js | 12 +- yarn.lock | 9441 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 9449 insertions(+), 6 deletions(-) create mode 100644 yarn.lock diff --git a/env b/env index c74eb84..2120835 100644 --- a/env +++ b/env @@ -1,4 +1,6 @@ API_KEY='API_KEY' +FORNO_CELO_MAINNET='https://forno.celo.org' +FORNO_CELO_TESTNET='https://alfajores-forno.celo-testnet.org' PRIVATE_KEY='KEY' ROUTER='ROUTER' UNISWAP_PAIR='PAIR' diff --git a/hardhat.config.js b/hardhat.config.js index 6f8a812..012aa6e 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -2,7 +2,7 @@ require("@nomiclabs/hardhat-waffle"); require("@nomiclabs/hardhat-etherscan"); require('dotenv').config() -const {API_KEY, PRIVATE_KEY, PRIVATE_KEY_MAINNET, ETHERSCAN_API_KEY} = process.env; +const {FORNO_CELO_MAINNET, FORNO_CELO_TESTNET, PRIVATE_KEY, ETHERSCAN_API_KEY} = process.env; // This is a sample Hardhat task. To learn how to create your own go to // https://hardhat.org/guides/create-task.html @@ -22,13 +22,13 @@ task("accounts", "Prints the list of accounts", async () => { */ module.exports = { networks: { - kovan: { - url: `https://kovan.infura.io/v3/${API_KEY}`, + alfajores: { + url: FORNO_CELO_TESTNET, accounts: [PRIVATE_KEY] }, - mainnet: { - url: `https://mainnet.infura.io/v3/${API_KEY}`, - accounts: [PRIVATE_KEY_MAINNET] + celo_mainnet: { + url: FORNO_CELO_MAINNET, + accounts: [PRIVATE_KEY] } }, solidity: { diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..8a7799d --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9441 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.4.4": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== + dependencies: + regenerator-runtime "^0.13.4" + +"@ensdomains/address-encoder@^0.1.7": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" + integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== + dependencies: + bech32 "^1.1.3" + blakejs "^1.1.0" + bn.js "^4.11.8" + bs58 "^4.0.1" + crypto-addr-codec "^0.1.7" + nano-base32 "^1.0.1" + ripemd160 "^2.0.2" + +"@ensdomains/ens@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.3.tgz#f4a6b55146fe526c9a50e13f373bf90d36ca94dc" + integrity sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + ethereumjs-testrpc "^6.0.3" + ganache-cli "^6.1.0" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/ens@^0.4.4": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" + integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/ensjs@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.0.1.tgz#c27438f9ca074825ddb08430988c7decf2062a91" + integrity sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg== + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.3" + "@ensdomains/resolver" "0.2.4" + content-hash "^2.5.2" + eth-ens-namehash "^2.0.8" + ethers "^5.0.13" + js-sha3 "^0.8.0" + +"@ensdomains/resolver@0.2.4", "@ensdomains/resolver@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@ethereum-waffle/chai@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.0.tgz#2477877410a96bf370edd64df905b04fb9aba9d5" + integrity sha512-GVaFKuFbFUclMkhHtQTDnWBnBQMJc/pAbfbFj/nnIK237WPLsO3KDDslA7m+MNEyTAOFrcc0CyfruAGGXAQw3g== + dependencies: + "@ethereum-waffle/provider" "^3.4.0" + ethers "^5.0.0" + +"@ethereum-waffle/compiler@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.0.tgz#68917321212563544913de33e408327745cb1284" + integrity sha512-a2wxGOoB9F1QFRE+Om7Cz2wn+pxM/o7a0a6cbwhaS2lECJgFzeN9xEkVrKahRkF4gEfXGcuORg4msP0Asxezlw== + dependencies: + "@resolver-engine/imports" "^0.3.3" + "@resolver-engine/imports-fs" "^0.3.3" + "@typechain/ethers-v5" "^2.0.0" + "@types/mkdirp" "^0.5.2" + "@types/node-fetch" "^2.5.5" + ethers "^5.0.1" + mkdirp "^0.5.1" + node-fetch "^2.6.1" + solc "^0.6.3" + ts-generator "^0.1.1" + typechain "^3.0.0" + +"@ethereum-waffle/ens@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.3.0.tgz#d54f4c8e6b7bcafdc13ab294433f45416b2b2791" + integrity sha512-zVIH/5cQnIEgJPg1aV8+ehYicpcfuAisfrtzYh1pN3UbfeqPylFBeBaIZ7xj/xYzlJjkrek/h9VfULl6EX9Aqw== + dependencies: + "@ensdomains/ens" "^0.4.4" + "@ensdomains/resolver" "^0.2.4" + ethers "^5.0.1" + +"@ethereum-waffle/mock-contract@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.3.0.tgz#7b331f1c95c5d46ee9478f7a6be2869f707d307a" + integrity sha512-apwq0d+2nQxaNwsyLkE+BNMBhZ1MKGV28BtI9WjD3QD2Ztdt1q9II4sKA4VrLTUneYSmkYbJZJxw89f+OpJGyw== + dependencies: + "@ethersproject/abi" "^5.0.1" + ethers "^5.0.1" + +"@ethereum-waffle/provider@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.0.tgz#a36a0890d4fbc230e807870c8d3b683594efef00" + integrity sha512-QgseGzpwlzmaHXhqfdzthCGu5a6P1SBF955jQHf/rBkK1Y7gGo2ukt3rXgxgfg/O5eHqRU+r8xw5MzVyVaBscQ== + dependencies: + "@ethereum-waffle/ens" "^3.3.0" + ethers "^5.0.1" + ganache-core "^2.13.2" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + +"@ethereumjs/block@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.3.0.tgz#a1b3baec831c71c0d9e7f6145f25e919cff4939c" + integrity sha512-WoefY9Rs4W8vZTxG9qwntAlV61xsSv0NPoXmHO7x3SH16dwJQtU15YvahPCz4HEEXbu7GgGgNgu0pv8JY7VauA== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.0" + ethereumjs-util "^7.0.10" + merkle-patricia-tree "^4.2.0" + +"@ethereumjs/blockchain@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.3.0.tgz#206936e30a4320d87a26e58d157eadef21ef6ff1" + integrity sha512-B0Y5QDZcRDQISPilv3m8nzk97QmC98DnSE9WxzGpCxfef22Mw7xhwGipci5Iy0dVC2Np2Cr5d3F6bHAR7+yVmQ== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/ethash" "^1.0.0" + debug "^2.2.0" + ethereumjs-util "^7.0.10" + level-mem "^5.0.1" + lru-cache "^5.1.1" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.3.1.tgz#d692e3aff5adb35dd587dd1e6caab69e0ed2fa0b" + integrity sha512-V8hrULExoq0H4HFs3cCmdRGbgmipmlNzak6Xg34nHYfQyqkSdrCuflvYjyWmsNpI8GtrcZhzifAbgX/1C1Cjwg== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.0.10" + +"@ethereumjs/ethash@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.0.0.tgz#4e77f85b37be1ade5393e8719bdabac3e796ddaa" + integrity sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw== + dependencies: + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.7" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.2.0", "@ethereumjs/tx@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.2.1.tgz#65f5f1c11541764f08377a94ba4b0dcbbd67739e" + integrity sha512-i9V39OtKvwWos1uVNZxdVhd7zFOyzFLjgt69CoiOY0EmXugS0HjO3uxpLBSglDKFMRriuGqw6ddKEv+RP1UNEw== + dependencies: + "@ethereumjs/common" "^2.3.1" + ethereumjs-util "^7.0.10" + +"@ethereumjs/vm@^5.3.2": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.4.1.tgz#62d9f64aa5a2fb334ad630418683c9654f683a5a" + integrity sha512-cpQcg5CtjzXJBn8QNiobaiWckeN/ZQwsDHLYa9df2wBEUvzuEZgFWK48YEXSpx3CnUY9fNT/lgA9CzKdq8HTzQ== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/blockchain" "^5.3.0" + "@ethereumjs/common" "^2.3.1" + "@ethereumjs/tx" "^3.2.1" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.0.10" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.0" + rustbn.js "~0.2.0" + util.promisify "^1.0.1" + +"@ethersproject/abi@5.0.0-beta.153": + version "5.0.0-beta.153" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" + integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" + +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abi@5.3.1", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.2", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.1.tgz#69a1a496729d3a83521675a57cbe21f3cc27241c" + integrity sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" + integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + +"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" + integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + +"@ethersproject/address@5.3.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" + integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + +"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" + integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + +"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" + integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + +"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" + integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + bn.js "^4.11.9" + +"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" + integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/constants@5.3.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" + integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + +"@ethersproject/contracts@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" + integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== + dependencies: + "@ethersproject/abi" "^5.3.0" + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + +"@ethersproject/hash@5.3.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" + integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" + integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" + integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" + integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@5.3.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" + integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== + +"@ethersproject/networks@5.3.1", "@ethersproject/networks@^5.3.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61" + integrity sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" + integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + +"@ethersproject/properties@5.3.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" + integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/providers@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.1.tgz#a12c6370e8cbc0968c9744641b8ef90b0dd5ec2b" + integrity sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" + integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" + integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" + integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" + integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" + integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/strings@5.3.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" + integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" + integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + +"@ethersproject/units@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" + integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/wallet@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" + integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/json-wallets" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" + integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== + dependencies: + "@ethersproject/base64" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" + integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@nomiclabs/hardhat-ethers@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" + integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== + +"@nomiclabs/hardhat-etherscan@^2.1.1": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.3.tgz#ba52e5cb526f6c477e5e97e07c72a42232773c92" + integrity sha512-0Ic5dLBWASeX3e8tR5cdfoSQw8fTp2Bw49RGUN1pSJuxKIQAOWq5MI9qC1Bd51xK/AsdRSnHDxoVYK1+FC1s1w== + dependencies: + "@ethersproject/abi" "^5.0.2" + "@ethersproject/address" "^5.0.2" + cbor "^5.0.2" + debug "^4.1.1" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + semver "^6.3.0" + +"@nomiclabs/hardhat-waffle@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz#5d43654fba780720c5033dea240fe14f70ef4bd2" + integrity sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" + +"@openzeppelin/contract-loader@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz#f0c08f14d5dfeaeb44952ba777ec9ce1c9ff9759" + integrity sha512-/P8v8ZFVwK+Z7rHQH2N3hqzEmTzLFjhMtvNK4FeIak6DEeONZ92vdFaFb10CCCQtp390Rp/Y57Rtfrm50bUdMQ== + dependencies: + find-up "^4.1.0" + fs-extra "^8.1.0" + +"@openzeppelin/contracts@^3.2.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" + integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== + +"@openzeppelin/test-helpers@^0.5.9": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz#67a4d28b1c3b15f98c56ed64680f988c8e882bf0" + integrity sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw== + dependencies: + "@openzeppelin/contract-loader" "^0.6.2" + "@truffle/contract" "^4.0.35" + ansi-colors "^3.2.3" + chai "^4.2.0" + chai-bn "^0.2.1" + ethjs-abi "^0.2.1" + lodash.flatten "^4.4.0" + semver "^5.6.0" + web3 "^1.2.5" + web3-utils "^1.2.5" + +"@resolver-engine/core@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" + integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== + dependencies: + debug "^3.1.0" + is-url "^1.2.4" + request "^2.85.0" + +"@resolver-engine/fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" + integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports-fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" + integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== + dependencies: + "@resolver-engine/fs" "^0.3.3" + "@resolver-engine/imports" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" + integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + hosted-git-info "^2.6.0" + path-browserify "^1.0.0" + url "^0.11.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^7.1.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@solidity-parser/parser@^0.11.0": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" + integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@truffle/blockchain-utils@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.31.tgz#0503d9fb2ce3e05c167c27294927f2f88d70a24d" + integrity sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw== + +"@truffle/codec@^0.11.1": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.11.1.tgz#fbe54d7635bc896b3f746b87e15b8125242bc820" + integrity sha512-7Z+BStlCKws+mdpQUb3XGCYCkv80QUtmaLVTbl7/Abzimr63lsCTC/37GLWXeRJ1Vam9JYiZEmzaXUHCqJWsTg== + dependencies: + big.js "^5.2.2" + bn.js "^5.1.3" + cbor "^5.1.0" + debug "^4.3.1" + lodash.clonedeep "^4.5.0" + lodash.escaperegexp "^4.1.2" + lodash.partition "^4.6.0" + lodash.sum "^4.0.2" + semver "^7.3.4" + utf8 "^3.0.0" + web3-utils "1.3.6" + +"@truffle/contract-schema@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.1.tgz#13b404383d438b48960862022a20102970323666" + integrity sha512-2gvu6gxJtbbI67H2Bwh2rBuej+1uCV3z4zKFzQZP00hjNoL+QfybrmBcOVB88PflBeEB+oUXuwQfDoKX3TXlnQ== + dependencies: + ajv "^6.10.0" + crypto-js "^3.1.9-1" + debug "^4.3.1" + +"@truffle/contract@^4.0.35": + version "4.3.21" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.21.tgz#a90a363564ea63ff3a42550cb0b97ffdd4972880" + integrity sha512-J4nYQVoOL29G7Rg2rmbHbsyQUx/Oj41HBHQOafjltnxppYuFk8OPW0EBm1o7gOAkfgFy4oJPhOVFucZ6JqY+GQ== + dependencies: + "@ensdomains/ensjs" "^2.0.1" + "@truffle/blockchain-utils" "^0.0.31" + "@truffle/contract-schema" "^3.4.1" + "@truffle/debug-utils" "^5.1.1" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.1" + bignumber.js "^7.2.1" + ethers "^4.0.32" + web3 "1.3.6" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-eth-abi "1.3.6" + web3-utils "1.3.6" + +"@truffle/debug-utils@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.1.1.tgz#7dd5960a4042bad0588074ebb95b73a44fe1f859" + integrity sha512-vp/rutosfUV0kdHPfXO+OdzmfmSq/phgXhwjCXn53ePivCemd2WCP4YNo8wO9erhgnYPy5z+tU4tLtIEx9YU0Q== + dependencies: + "@truffle/codec" "^0.11.1" + "@trufflesuite/chromafi" "^2.2.2" + bn.js "^5.1.3" + chalk "^2.4.2" + debug "^4.3.1" + highlight.js "^10.4.0" + highlightjs-solidity "^1.1.1" + +"@truffle/error@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" + integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== + +"@truffle/interface-adapter@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.1.tgz#14c16e59dab5babc3860e9ccaeb350ffa76a8cba" + integrity sha512-Uvd7em/9DKb0PAMSklvlvbfHNNm9CiXKxXJT5VUmV9SlAe+C/vbUIiuIv8lStdX1PdF4KkO/K5rBJDvmDmXOyw== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.3.6" + +"@trufflesuite/chromafi@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz#d3fc507aa8504faffc50fb892cedcfe98ff57f77" + integrity sha512-mItQwVBsb8qP/vaYHQ1kDt2vJLhjoEXJptT6y6fJGvFophMFhOI/NsTVUa0nJL1nyMeFiS6hSYuNVdpQZzB1gA== + dependencies: + ansi-mark "^1.0.0" + ansi-regex "^3.0.0" + array-uniq "^1.0.3" + camelcase "^4.1.0" + chalk "^2.3.2" + cheerio "^1.0.0-rc.2" + detect-indent "^5.0.0" + he "^1.1.1" + highlight.js "^10.4.1" + lodash.merge "^4.6.2" + min-indent "^1.0.0" + strip-ansi "^4.0.0" + strip-indent "^2.0.0" + super-split "^1.1.0" + +"@typechain/ethers-v5@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz#cd3ca1590240d587ca301f4c029b67bfccd08810" + integrity sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw== + dependencies: + ethers "^5.0.2" + +"@types/abstract-leveldown@*": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" + integrity sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ== + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/chai@*": + version "4.2.19" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.19.tgz#80f286b515897413c7a35bdda069cc80f2344233" + integrity sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ== + +"@types/levelup@^4.3.0": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.1.tgz#7a53b9fd510716e11b2065332790fdf5f9b950b9" + integrity sha512-n//PeTpbHLjMLTIgW5B/g06W/6iuTBHuvUka2nFL9APMSVMNe2r4enADfu3CIE9IyV9E+uquf9OEQQqrDeg24A== + dependencies: + "@types/abstract-leveldown" "*" + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" + integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/node-fetch@^2.5.5": + version "2.5.10" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" + integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "15.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" + integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== + +"@types/node@^12.12.6": + version "12.20.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.15.tgz#10ee6a6a3f971966fddfa3f6e89ef7a73ec622df" + integrity sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb" + integrity sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw== + +"@types/resolve@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" + +"@types/sinon-chai@^3.2.3": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.5.tgz#df21ae57b10757da0b26f512145c065f2ad45c48" + integrity sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.2.tgz#f360d2f189c0fd433d14aeb97b9d705d7e4cc0e4" + integrity sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw== + dependencies: + "@sinonjs/fake-timers" "^7.1.0" + +"@types/underscore@*": + version "1.11.2" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.2.tgz#9441e0f6402bbcb72dbee771582fa57c5a1dedd3" + integrity sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@uniswap/lib@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-1.1.1.tgz#0afd29601846c16e5d082866cbb24a9e0758e6bc" + integrity sha512-2yK7sLpKIT91TiS5sewHtOa7YuM8IuBXVl4GZv2jZFys4D2sY7K5vZh6MqD25TPA95Od+0YzCVq6cTF2IKrOmg== + +"@uniswap/v2-core@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.0.tgz#e0fab91a7d53e8cafb5326ae4ca18351116b0844" + integrity sha512-BJiXrBGnN8mti7saW49MXwxDBRFiWemGetE58q8zgfnPPzQKq55ADltEILqOt6VFZ22kVeVKbF8gVd8aY3l7pA== + +"@uniswap/v2-core@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.1.tgz#af8f508bf183204779938969e2e54043e147d425" + integrity sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q== + +"@uniswap/v2-periphery@^1.1.0-beta.0": + version "1.1.0-beta.0" + resolved "https://registry.yarnpkg.com/@uniswap/v2-periphery/-/v2-periphery-1.1.0-beta.0.tgz#20a4ccfca22f1a45402303aedb5717b6918ebe6d" + integrity sha512-6dkwAMKza8nzqYiXEr2D86dgW3TTavUvCR0w2Tu33bAbM8Ah43LKAzH7oKKPRT5VJQaMi1jtkGs1E8JPor1n5g== + dependencies: + "@uniswap/lib" "1.1.1" + "@uniswap/v2-core" "1.0.0" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-leveldown@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" + integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" + integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +aes-js@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-mark@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ansi-mark/-/ansi-mark-1.0.4.tgz#1cd4ba8d57f15f109d6aaf6ec9ca9786c8a4ee6c" + integrity sha1-HNS6jVfxXxCdaq9uycqXhsik7mw= + dependencies: + ansi-regex "^3.0.0" + array-uniq "^1.0.3" + chalk "^2.3.2" + strip-ansi "^4.0.0" + super-split "^1.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-back@^1.0.3, array-back@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" + integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= + dependencies: + typical "^2.6.0" + +array-back@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" + integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== + dependencies: + typical "^2.6.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-uniq@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9" + integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.14, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babelify@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" + integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + dependencies: + babel-core "^6.0.14" + object-assign "^4.0.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4, bech32@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + +bignumber.js@^9.0.0, bignumber.js@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip39@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" + integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + +blakejs@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + +bluebird@^3.5.0, bluebird@^3.5.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" + integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + dependencies: + node-gyp-build "^4.2.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + dependencies: + typewise-core "^1.2" + +bytewise@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cachedown@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" + integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + dependencies: + abstract-leveldown "^2.4.1" + lru-cache "^3.2.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30000844: + version "1.0.30001239" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz#66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8" + integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +cbor@^5.0.2, cbor@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai-bn@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" + integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== + +chai@^4.2.0, chai@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" + integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= + dependencies: + functional-red-black-tree "^1.0.1" + +cheerio-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" + integrity sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg== + dependencies: + css-select "^4.1.3" + css-what "^5.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.7.0" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" + integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== + dependencies: + cheerio-select "^1.5.0" + dom-serializer "^1.3.2" + domhandler "^4.2.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + tslib "^2.2.0" + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.0, chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@2.1.2, clone@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.7.tgz#f8d1916ecb90e9e121eda6428e41300bfb64cc46" + integrity sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA== + dependencies: + array-back "^2.0.0" + find-replace "^1.0.3" + typical "^2.6.1" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-pure@^3.0.1: + version "3.15.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.1.tgz#8356f6576fa2aa8e54ca6fe02620968ff010eed7" + integrity sha512-OZuWHDlYcIda8sJLY4Ec6nWq2hRjlyCqCZ+jCflyleMkVt3tPedDVErvHslyS2nbO+SlBFMSBJYvtLMwxnrzjA== + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" + integrity sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw== + dependencies: + node-fetch "2.1.2" + whatwg-fetch "2.0.4" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-addr-codec@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" + integrity sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg== + dependencies: + base-x "^3.0.8" + big-integer "1.6.36" + blakejs "^1.1.0" + bs58 "^4.0.1" + ripemd160-min "0.0.6" + safe-buffer "^5.2.0" + sha3 "^2.1.1" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + +css-what@^5.0.0, css-what@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@^4.1.1, debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +deferred-leveldown@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" + integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== + dependencies: + abstract-leveldown "~5.0.0" + inherits "^2.0.3" + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-serializer@^1.0.1, dom-serializer@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.47: + version "1.3.756" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.756.tgz#942cee59cd64d19f576d8d5804eef09cb423740c" + integrity sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA== + +elliptic@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding-down@5.0.4, encoding-down@~5.0.0: + version "5.0.4" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" + integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== + dependencies: + abstract-leveldown "^5.0.0" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + xtend "^4.0.1" + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +enquirer@^2.3.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@^0.1.3, errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-block-tracker@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1" + integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug== + dependencies: + eth-query "^2.1.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.3" + ethjs-util "^0.1.3" + json-rpc-engine "^3.6.0" + pify "^2.3.0" + tape "^4.6.3" + +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-json-rpc-infura@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz#26702a821067862b72d979c016fd611502c6057f" + integrity sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw== + dependencies: + cross-fetch "^2.1.1" + eth-json-rpc-middleware "^1.5.0" + json-rpc-engine "^3.4.0" + json-rpc-error "^2.0.0" + +eth-json-rpc-middleware@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" + integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q== + dependencies: + async "^2.5.0" + eth-query "^2.1.2" + eth-tx-summary "^3.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.1.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^3.6.0" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + tape "^4.6.3" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-sig-util@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" + integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== + dependencies: + buffer "^5.2.1" + elliptic "^6.4.0" + ethereumjs-abi "0.6.5" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.0" + tweetnacl-util "^0.15.0" + +eth-sig-util@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" + integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +eth-sig-util@^2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5" + integrity sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A== + dependencies: + ethereumjs-abi "0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + +eth-tx-summary@^3.1.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" + integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg== + dependencies: + async "^2.1.2" + clone "^2.0.0" + concat-stream "^1.5.1" + end-of-stream "^1.1.0" + eth-query "^2.0.2" + ethereumjs-block "^1.4.1" + ethereumjs-tx "^1.1.1" + ethereumjs-util "^5.0.1" + ethereumjs-vm "^2.6.0" + through2 "^2.0.3" + +ethashjs@~0.0.7: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" + integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== + dependencies: + async "^2.1.2" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.2" + miller-rabin "^4.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" + integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= + +ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-waffle@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz#990b3c6c26db9c2dd943bf26750a496f60c04720" + integrity sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ== + dependencies: + "@ethereum-waffle/chai" "^3.4.0" + "@ethereum-waffle/compiler" "^3.4.0" + "@ethereum-waffle/mock-contract" "^3.3.0" + "@ethereum-waffle/provider" "^3.4.0" + ethers "^5.0.1" + +ethereumjs-abi@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" + integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + dependencies: + bn.js "^4.10.0" + ethereumjs-util "^4.3.0" + +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + version "0.6.8" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@3.0.0, ethereumjs-account@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" + integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== + dependencies: + ethereumjs-util "^6.0.0" + rlp "^2.2.1" + safe-buffer "^5.1.1" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@2.2.2, ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.0, ethereumjs-block@~2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-blockchain@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" + integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== + dependencies: + async "^2.6.1" + ethashjs "~0.0.7" + ethereumjs-block "~2.2.2" + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.1.0" + flow-stoplight "^1.0.0" + level-mem "^3.0.1" + lru-cache "^5.1.1" + rlp "^2.2.2" + semaphore "^1.1.0" + +ethereumjs-common@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" + integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-testrpc@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz#7a0b87bf3670f92f607f98fa6a78801d9741b124" + integrity sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA== + dependencies: + webpack "^3.0.0" + +ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^4.3.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz#f4bf9b3b515a484e3cc8781d61d9d980f7c83bd0" + integrity sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w== + dependencies: + bn.js "^4.8.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + rlp "^2.0.0" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5, ethereumjs-util@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7: + version "7.0.10" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" + integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + +ethereumjs-vm@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" + integrity sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + core-js-pure "^3.0.1" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.2" + ethereumjs-blockchain "^4.0.3" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.2" + ethereumjs-util "^6.2.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + util.promisify "^1.0.0" + +ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" + integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== + dependencies: + aes-js "^3.1.1" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^6.0.0" + randombytes "^2.0.6" + safe-buffer "^5.1.2" + scryptsy "^1.2.1" + utf8 "^3.0.0" + uuid "^3.3.2" + +ethers@^4.0.32: + version "4.0.48" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" + integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== + dependencies: + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.5.3" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.13, ethers@^5.0.2, ethers@^5.1.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.1.tgz#1f018f0aeb651576cd84fd987a45f0b99646d761" + integrity sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw== + dependencies: + "@ethersproject/abi" "5.3.1" + "@ethersproject/abstract-provider" "5.3.0" + "@ethersproject/abstract-signer" "5.3.0" + "@ethersproject/address" "5.3.0" + "@ethersproject/base64" "5.3.0" + "@ethersproject/basex" "5.3.0" + "@ethersproject/bignumber" "5.3.0" + "@ethersproject/bytes" "5.3.0" + "@ethersproject/constants" "5.3.0" + "@ethersproject/contracts" "5.3.0" + "@ethersproject/hash" "5.3.0" + "@ethersproject/hdnode" "5.3.0" + "@ethersproject/json-wallets" "5.3.0" + "@ethersproject/keccak256" "5.3.0" + "@ethersproject/logger" "5.3.0" + "@ethersproject/networks" "5.3.1" + "@ethersproject/pbkdf2" "5.3.0" + "@ethersproject/properties" "5.3.0" + "@ethersproject/providers" "5.3.1" + "@ethersproject/random" "5.3.0" + "@ethersproject/rlp" "5.3.0" + "@ethersproject/sha2" "5.3.0" + "@ethersproject/signing-key" "5.3.0" + "@ethersproject/solidity" "5.3.0" + "@ethersproject/strings" "5.3.0" + "@ethersproject/transactions" "5.3.0" + "@ethersproject/units" "5.3.0" + "@ethersproject/wallet" "5.3.0" + "@ethersproject/web" "5.3.0" + "@ethersproject/wordlists" "5.3.0" + +ethjs-abi@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.1.tgz#e0a7a93a7e81163a94477bad56ede524ab6de533" + integrity sha1-4KepOn6BFjqUR3utVu3lJKtt5TM= + dependencies: + bn.js "4.11.6" + js-sha3 "0.5.5" + number-to-bn "1.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.3: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" + integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= + dependencies: + checkpoint-store "^1.1.0" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" + integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + dependencies: + node-fetch "~1.7.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-replace@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" + integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= + dependencies: + array-back "^1.0.4" + test-value "^2.1.0" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flow-stoplight@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" + integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= + +follow-redirects@^1.12.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +for-each@^0.3.3, for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^4.0.2, fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1, function-bind@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +ganache-cli@^6.1.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + +ganache-core@^2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" + integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== + dependencies: + abstract-leveldown "3.0.0" + async "2.6.2" + bip39 "2.5.0" + cachedown "1.0.0" + clone "2.1.2" + debug "3.2.6" + encoding-down "5.0.4" + eth-sig-util "3.0.0" + ethereumjs-abi "0.6.8" + ethereumjs-account "3.0.0" + ethereumjs-block "2.2.2" + ethereumjs-common "1.5.0" + ethereumjs-tx "2.1.2" + ethereumjs-util "6.2.1" + ethereumjs-vm "4.2.0" + heap "0.2.6" + keccak "3.0.1" + level-sublevel "6.6.4" + levelup "3.1.1" + lodash "4.17.20" + lru-cache "5.1.1" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" + seedrandom "3.0.1" + source-map-support "0.5.12" + tmp "0.1.0" + web3-provider-engine "14.2.1" + websocket "1.0.32" + optionalDependencies: + ethereumjs-wallet "0.6.5" + web3 "1.2.11" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hardhat@^2.1.2: + version "2.4.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.4.1.tgz#2cd1e86ee6ca3a6a473eeb0f55bd3124c8c59250" + integrity sha512-vwllrFypukeE/Q+4ZfWj7j7nUo4ncUhRpsAYUM0Ruuuk6pQlKmRa0A6c0kxRSvvVgQsMud6j+/weYhbMX1wPmQ== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/blockchain" "^5.3.0" + "@ethereumjs/common" "^2.3.1" + "@ethereumjs/tx" "^3.2.1" + "@ethereumjs/vm" "^5.3.2" + "@ethersproject/abi" "^5.1.2" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.11.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + eth-sig-util "^2.5.2" + ethereum-cryptography "^0.1.2" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.0.10" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "^7.1.3" + https-proxy-agent "^5.0.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.2.0" + mnemonist "^0.38.0" + mocha "^7.1.2" + node-fetch "^2.6.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + uuid "^3.3.2" + ws "^7.4.6" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3, has@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0, he@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +heap@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + +highlight.js@^10.4.0, highlight.js@^10.4.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +highlightjs-solidity@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.1.1.tgz#ed0f246d0f8cba647291baff68fb131252067424" + integrity sha512-NNcuj6GC0OP8qIrXVaqUA33d/nQoGvwRPS3FR2juIT+I1LAcNkebLbEp1AxzH0TiQ9InPxG62P/FnON8Ns15sQ== + +hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@1.7.3, http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +immutable@^4.0.0-rc.12: + version "4.0.0-rc.12" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" + integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" + integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + +is-regex@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +js-sha3@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" + integrity sha1-uvDA6MVK1ZA0R9+Wreekobynmko= + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9" + integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA== + dependencies: + async "^2.0.1" + babel-preset-env "^1.7.0" + babelify "^7.3.0" + json-rpc-error "^2.0.0" + promise-to-callback "^1.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-error@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" + integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + dependencies: + inherits "^2.0.1" + +json-rpc-random-id@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +keccak@3.0.1, keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" + integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + xtend "^4.0.0" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" + integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-iterator-stream@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" + integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.3.6" + xtend "^4.0.0" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" + integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== + dependencies: + level-packager "~4.0.0" + memdown "~3.0.0" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-packager@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" + integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== + dependencies: + encoding-down "~5.0.0" + levelup "^3.0.0" + +level-post@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" + integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== + dependencies: + ltgt "^2.1.2" + +level-sublevel@6.6.4: + version "6.6.4" + resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba" + integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA== + dependencies: + bytewise "~1.1.0" + level-codec "^9.0.0" + level-errors "^2.0.0" + level-iterator-stream "^2.0.3" + ltgt "~2.1.1" + pull-defer "^0.2.2" + pull-level "^2.0.3" + pull-stream "^3.6.8" + typewiselite "~1.0.0" + xtend "~4.0.0" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" + integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + +level-ws@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" + integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.8" + xtend "^4.0.1" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + +levelup@3.1.1, levelup@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" + integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== + dependencies: + deferred-leveldown "~4.0.0" + level-errors "~2.0.0" + level-iterator-stream "~3.0.0" + xtend "~4.0.0" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.partition@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.partition/-/lodash.partition-4.6.0.tgz#a38e46b73469e0420b0da1212e66d414be364ba4" + integrity sha1-o45GtzRp4EILDaEhLmbUFL42S6Q= + +lodash.sum@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lodash.sum/-/lodash.sum-4.0.2.tgz#ad90e397965d803d4f1ff7aa5b2d0197f3b4637b" + integrity sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s= + +lodash@4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +looper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" + integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + +looper@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" + integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@5.1.1, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" + integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + dependencies: + pseudomap "^1.0.1" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + +ltgt@^2.1.2, ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + +ltgt@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" + integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mcl-wasm@^0.7.1: + version "0.7.8" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.8.tgz#4d0dc5a92f7bd20892fd3fcd41764acf86fd1e6e" + integrity sha512-qNHlYO6wuEtSoH5A8TcZfCEHtw8gGPqF6hLZpQn2SVd/Mck0ELIKOkmj072D98S9B9CI/jZybTUC96q1P2/ZDw== + dependencies: + typescript "^4.3.4" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memdown@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" + integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== + dependencies: + abstract-leveldown "~5.0.0" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merkle-patricia-tree@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" + integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== + dependencies: + async "^2.6.1" + ethereumjs-util "^5.2.0" + level-mem "^3.0.1" + level-ws "^1.0.0" + readable-stream "^3.0.6" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz#a204b9041be5c25e8d14f0ff47021de090e811a1" + integrity sha512-0sBVXs7z1Q1/kxzWZ3nPnxSPiaHKF/f497UQzt9O7isRcS10tel9jM/4TivF6Jv7V1yFq4bWyoATxbDUOen5vQ== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.0.10" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mnemonist@^0.38.0: + version "0.38.3" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" + integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + dependencies: + obliterator "^1.6.1" + +mocha@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nano-base32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" + integrity sha1-ulSMh578+5DaHE2eCX20pGySVe8= + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + +object-inspect@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +obliterator@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" + integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + +oboe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + dependencies: + http-https "^1.0.0" + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +patch-package@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +patch-package@^6.2.2: + version "6.4.7" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier@^2.1.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" + integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.1, pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pull-cat@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" + integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + +pull-defer@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" + integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== + +pull-level@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" + integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== + dependencies: + level-post "^1.0.7" + pull-cat "^1.1.9" + pull-live "^1.0.1" + pull-pushable "^2.0.0" + pull-stream "^3.4.0" + pull-window "^2.1.4" + stream-to-pull-stream "^1.7.1" + +pull-live@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" + integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + dependencies: + pull-cat "^1.1.9" + pull-stream "^3.4.0" + +pull-pushable@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" + integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + +pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: + version "3.6.14" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" + integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + +pull-window@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" + integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + dependencies: + looper "^2.0.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.7.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerate@^1.2.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + +require-from-string@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.17.0, resolve@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +rimraf@^2.2.8, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160-min@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +scryptsy@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" + integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= + dependencies: + pbkdf2 "^3.0.3" + +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +seedrandom@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" + integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= + +semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha3@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" + integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== + dependencies: + buffer "6.0.3" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + +solc@^0.6.3: + version "0.6.12" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.12.tgz#48ac854e0c729361b22a7483645077f58cba080e" + integrity sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.13: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-to-pull-stream@^1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" + integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== + dependencies: + looper "^3.0.0" + pull-stream "^3.2.3" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trim@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" + integrity sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +super-split@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/super-split/-/super-split-1.1.0.tgz#43b3ba719155f4d43891a32729d59b213d9155fc" + integrity sha512-I4bA5mgcb6Fw5UJ+EkpzqXfiuvVGS/7MuND+oBxNFmxu3ugLNrdIatzBLfhFRMVMLxgSsRy+TjIktgkF9RFSNQ== + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + +tape@^4.6.3: + version "4.13.3" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" + integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.5" + object-inspect "~1.7.0" + resolve "~1.17.0" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-value@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" + integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= + dependencies: + array-back "^1.0.3" + typical "^2.6.0" + +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== + +through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-essentials@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" + integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== + +ts-essentials@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.7.tgz#5f4880911b7581a873783740ce8b94da163d18a6" + integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + dependencies: + "@types/mkdirp" "^0.5.2" + "@types/prettier" "^2.1.1" + "@types/resolve" "^0.0.8" + chalk "^2.4.1" + glob "^7.1.2" + mkdirp "^0.5.1" + prettier "^2.1.2" + resolve "^1.8.1" + ts-essentials "^1.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.0: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +tweetnacl@^1.0.0, tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typechain@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-3.0.0.tgz#d5a47700831f238e43f7429b987b4bb54849b92e" + integrity sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg== + dependencies: + command-line-args "^4.0.7" + debug "^4.1.1" + fs-extra "^7.0.0" + js-sha3 "^0.8.0" + lodash "^4.17.15" + ts-essentials "^6.0.3" + ts-generator "^0.1.1" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" + integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== + +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + dependencies: + typewise-core "^1.2.0" + +typewiselite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" + integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + +typical@^2.6.0, typical@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" + integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unorm@^1.3.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utf-8-validate@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" + integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== + dependencies: + node-gyp-build "^4.2.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0, util.promisify@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +web3-bzz@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" + integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +web3-bzz@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.6.tgz#95f370aecc3ff6ad07f057e6c0c916ef09b04dde" + integrity sha512-ibHdx1wkseujFejrtY7ZyC0QxQ4ATXjzcNUpaLrvM6AEae8prUiyT/OloG9FWDgFD2CPLwzKwfSQezYQlANNlw== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.12.1" + +web3-core-helpers@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" + integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.11" + web3-utils "1.2.11" + +web3-core-helpers@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz#c478246a9abe4e5456acf42657dac2f7c330be74" + integrity sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA== + dependencies: + underscore "1.12.1" + web3-eth-iban "1.3.6" + web3-utils "1.3.6" + +web3-core-method@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" + integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" + +web3-core-method@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.6.tgz#4b0334edd94b03dfec729d113c69a4eb6ebc68ae" + integrity sha512-RyegqVGxn0cyYW5yzAwkPlsSEynkdPiegd7RxgB4ak1eKk2Cv1q2x4C7D2sZjeeCEF+q6fOkVmo2OZNqS2iQxg== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.12.1" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-utils "1.3.6" + +web3-core-promievent@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" + integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz#6c27dc79de8f71b74f5d17acaf9aaf593d3cb0c9" + integrity sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" + integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" + +web3-core-requestmanager@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.6.tgz#4fea269fe913fd4fca464b4f7c65cb94857b5b2a" + integrity sha512-2rIaeuqeo7QN1Eex7aXP0ZqeteJEPWXYFS/M3r3LXMiV8R4STQBKE+//dnHJXoo2ctzEB5cgd+7NaJM8S3gPyA== + dependencies: + underscore "1.12.1" + util "^0.12.0" + web3-core-helpers "1.3.6" + web3-providers-http "1.3.6" + web3-providers-ipc "1.3.6" + web3-providers-ws "1.3.6" + +web3-core-subscriptions@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" + integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + +web3-core-subscriptions@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.6.tgz#ee24e7974d1d72ff6c992c599deba4ef9b308415" + integrity sha512-wi9Z9X5X75OKvxAg42GGIf81ttbNR2TxzkAsp1g+nnp5K8mBwgZvXrIsDuj7Z7gx72Y45mWJADCWjk/2vqNu8g== + dependencies: + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" + +web3-core@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" + integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-requestmanager "1.2.11" + web3-utils "1.2.11" + +web3-core@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.6.tgz#a6a761d1ff2f3ee462b8dab679229d2f8e267504" + integrity sha512-gkLDM4T1Sc0T+HZIwxrNrwPg0IfWI0oABSglP2X5ZbBAYVUeEATA0o92LWV8BeF+okvKXLK1Fek/p6axwM/h3Q== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-requestmanager "1.3.6" + web3-utils "1.3.6" + +web3-eth-abi@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" + integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== + dependencies: + "@ethersproject/abi" "5.0.0-beta.153" + underscore "1.9.1" + web3-utils "1.2.11" + +web3-eth-abi@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz#4272ca48d817aa651bbf97b269f5ff10abc2b8a9" + integrity sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.12.1" + web3-utils "1.3.6" + +web3-eth-accounts@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" + integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-eth-accounts@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.6.tgz#f9fcb50b28ee58090ab292a10d996155caa2b474" + integrity sha512-Ilr0hG6ONbCdSlVKffasCmNwftD5HsNpwyQASevocIQwHdTlvlwO0tb3oGYuajbKOaDzNTwXfz25bttAEoFCGA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.12.1" + uuid "3.3.2" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" + +web3-eth-contract@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" + integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" + +web3-eth-contract@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.6.tgz#cccf4d32dc56917fb6923e778498a9ba2a5ba866" + integrity sha512-8gDaRrLF2HCg+YEZN1ov0zN35vmtPnGf3h1DxmJQK5Wm2lRMLomz9rsWsuvig3UJMHqZAQKD7tOl3ocJocQsmA== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-utils "1.3.6" + +web3-eth-ens@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" + integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" + +web3-eth-ens@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.6.tgz#0d28c5d4ea7b4462ef6c077545a77956a6cdf175" + integrity sha512-n27HNj7lpSkRxTgSx+Zo7cmKAgyg2ElFilaFlUu/X2CNH23lXfcPm2bWssivH9z0ndhg0OyR4AYFZqPaqDHkJA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-contract "1.3.6" + web3-utils "1.3.6" + +web3-eth-iban@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" + integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== + dependencies: + bn.js "^4.11.9" + web3-utils "1.2.11" + +web3-eth-iban@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz#0d6ba21fe78f190af8919e9cd5453882457209e0" + integrity sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.6" + +web3-eth-personal@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" + integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth-personal@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.6.tgz#226137916754c498f0284f22c55924c87a2efcf0" + integrity sha512-pOHU0+/h1RFRYoh1ehYBehRbcKWP4OSzd4F7mDljhHngv6W8ewMHrAN8O1ol9uysN2MuCdRE19qkRg5eNgvzFQ== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" + +web3-eth@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" + integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== + dependencies: + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-accounts "1.2.11" + web3-eth-contract "1.2.11" + web3-eth-ens "1.2.11" + web3-eth-iban "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.6.tgz#2c650893d540a7a0eb1365dd5b2dca24ac919b7c" + integrity sha512-9+rnywRRpyX3C4hfsAQXPQh6vHh9XzQkgLxo3gyeXfbhbShUoq2gFVuy42vsRs//6JlsKdyZS7Z3hHPHz2wreA== + dependencies: + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-accounts "1.3.6" + web3-eth-contract "1.3.6" + web3-eth-ens "1.3.6" + web3-eth-iban "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" + +web3-net@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" + integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== + dependencies: + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-net@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.6.tgz#a56492e2227475e38db29394f8bac305a2446e41" + integrity sha512-KhzU3wMQY/YYjyMiQzbaLPt2kut88Ncx2iqjy3nw28vRux3gVX0WOCk9EL/KVJBiAA/fK7VklTXvgy9dZnnipw== + dependencies: + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" + +web3-provider-engine@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" + integrity sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^3.0.0" + eth-json-rpc-infura "^3.1.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +web3-providers-http@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" + integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== + dependencies: + web3-core-helpers "1.2.11" + xhr2-cookies "1.1.0" + +web3-providers-http@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.6.tgz#36e8724a7424d52827819d53fd75dbf31f5422c2" + integrity sha512-OQkT32O1A06dISIdazpGLveZcOXhEo5cEX6QyiSQkiPk/cjzDrXMw4SKZOGQbbS1+0Vjizm1Hrp7O8Vp2D1M5Q== + dependencies: + web3-core-helpers "1.3.6" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" + integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + +web3-providers-ipc@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.6.tgz#cef8d12c1ebb47adce5ebf597f553c623362cb4a" + integrity sha512-+TVsSd2sSVvVgHG4s6FXwwYPPT91boKKcRuEFXqEfAbUC5t52XOgmyc2LNiD9LzPhed65FbV4LqICpeYGUvSwA== + dependencies: + oboe "2.1.5" + underscore "1.12.1" + web3-core-helpers "1.3.6" + +web3-providers-ws@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" + integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + websocket "^1.0.31" + +web3-providers-ws@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.6.tgz#e1df617bc89d66165abdf2191da0014c505bfaac" + integrity sha512-bk7MnJf5or0Re2zKyhR3L3CjGululLCHXx4vlbc/drnaTARUVvi559OI5uLytc/1k5HKUUyENAxLvetz2G1dnQ== + dependencies: + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" + websocket "^1.0.32" + +web3-shh@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" + integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== + dependencies: + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" + +web3-shh@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.6.tgz#4e3486c7eca5cbdb87f88910948223a5b7ea6c20" + integrity sha512-9zRo415O0iBslxBnmu9OzYjNErzLnzOsy+IOvSpIreLYbbAw0XkDWxv3SfcpKnTIWIACBR4AYMIxmmyi5iB3jw== + dependencies: + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-net "1.3.6" + +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3-utils@1.3.6, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" + integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.12.1" + utf8 "3.0.0" + +web3@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" + integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== + dependencies: + web3-bzz "1.2.11" + web3-core "1.2.11" + web3-eth "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-shh "1.2.11" + web3-utils "1.2.11" + +web3@1.3.6, web3@^1.2.5: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.6.tgz#599425461c3f9a8cbbefa70616438995f4a064cc" + integrity sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA== + dependencies: + web3-bzz "1.3.6" + web3-core "1.3.6" + web3-eth "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-shh "1.3.6" + web3-utils "1.3.6" + +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket@1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +websocket@^1.0.31, websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-fetch@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +which@1.3.1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691" + integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + dependencies: + object-keys "~0.4.0" + +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 16ed4324b15914b0c80c9fbd0eed08a079d30307 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sat, 26 Jun 2021 16:12:46 -0400 Subject: [PATCH 02/13] deploy scripts updated for celo networks --- package.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 403b66b..878962b 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,13 @@ "scripts": { "test": "npx hardhat test", "compile": "npx hardhat compile", - "deploy:kovan": "npx hardhat run scripts/infinity-deploy.js --network kovan", - "powerDeploy:kovan": "npx hardhat run scripts/power-vault-deploy.js --network kovan" + "deploy:alfajores": "npx hardhat run scripts/infinity-deploy.js --network alfajores", + "deploy:alfajoresOracle": "npx hardhat run scripts/oracle-deploy.js --network alfajores", + "deploy:celoMainnet": "npx hardhat run scripts/infinity-deploy.js --network celo_mainnet", + "deploy:celoMainnetOracle": "npx hardhat run scripts/oracle-deploy.js --network celo_mainnet", + "deploy:celoMainnetSpace": "npx hardhat run scripts/dual-vaults-space-deploy.js --network celo_mainnet", + "deploy:celoPower": "npx hardhat run scripts/power-vault-deploy.js --network celo_mainnet", + "deploy:alfajoresPower": "npx hardhat run scripts/power-vault-deploy.js --network alfajores" }, "keywords": [], "author": "", From c351805dcb09606cdfcc35f2bbec8174a42ef3aa Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sat, 26 Jun 2021 16:30:08 -0400 Subject: [PATCH 03/13] added Oracle deploy script --- scripts/oracle-deploy.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 scripts/oracle-deploy.js diff --git a/scripts/oracle-deploy.js b/scripts/oracle-deploy.js new file mode 100644 index 0000000..2bf570a --- /dev/null +++ b/scripts/oracle-deploy.js @@ -0,0 +1,20 @@ +const hardhat = require('hardhat'); +require('dotenv').config() + +const { PAIR, TOKENA, TOKENB } = process.env; + +async function main() { + const PriceOracle = await hardhat.ethers.getContractFactory("PriceOracle"); + const priceOracle = await PriceOracle.deploy(PAIR, TOKENA, TOKENB); + await priceOracle.deployed(); + + console.log("PriceOracle deployed to:", priceOracle.address); + +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); \ No newline at end of file From e972f8d12ec458050f4d3b3c7059a74857c5140d Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sat, 26 Jun 2021 16:32:50 -0400 Subject: [PATCH 04/13] updated env with bsc alike settings --- env | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/env b/env index 2120835..8385195 100644 --- a/env +++ b/env @@ -5,4 +5,8 @@ PRIVATE_KEY='KEY' ROUTER='ROUTER' UNISWAP_PAIR='PAIR' FEE_RECEIVER='address' -ETHERSCAN_API_KEY= \ No newline at end of file +ETHERSCAN_API_KEY= +PAIR='' +TOKENA='' +TOKENB='' +PRICE_ORACLE='' \ No newline at end of file From db083e2dcf8f4a5f992a1389064b892b52188f70 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sat, 26 Jun 2021 16:43:24 -0400 Subject: [PATCH 05/13] added Price Oracle and updated IERC20 --- contracts/InfinityProtocol.sol | 2 +- contracts/PriceOracle.sol | 89 +++++++++++++++++++++++++++ contracts/interfaces/IERC20.sol | 2 + contracts/interfaces/IPriceOracle.sol | 6 ++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 contracts/PriceOracle.sol create mode 100644 contracts/interfaces/IPriceOracle.sol diff --git a/contracts/InfinityProtocol.sol b/contracts/InfinityProtocol.sol index 48f66d9..922f7fe 100644 --- a/contracts/InfinityProtocol.sol +++ b/contracts/InfinityProtocol.sol @@ -60,7 +60,7 @@ contract InfinityProtocol is IInfinityProtocol, Context, Ownable { return _SYMBOL; } - function decimals() public pure returns (uint8) { + function decimals() public pure override returns (uint8) { return _DECIMALS; } diff --git a/contracts/PriceOracle.sol b/contracts/PriceOracle.sol new file mode 100644 index 0000000..464eae2 --- /dev/null +++ b/contracts/PriceOracle.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.7.4; +import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol'; +import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; +import '@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol'; +import "./interfaces/IERC20.sol"; + + +contract PriceOracle { + using FixedPoint for *; + IUniswapV2Pair public immutable pair; + uint public multiplier; + uint private priceLast; + uint public priceCumulativeLast; + uint32 public blockTimestampLast; + + address public tokenA; + address public tokenB; + address public token0; + + constructor(IUniswapV2Pair _pair, address _tokenA, address _tokenB) public { + pair = _pair; + tokenA = _tokenA; + tokenB = _tokenB; + (token0, ) = _tokenA < _tokenB + ? (_tokenA, _tokenB) + : (_tokenB, _tokenA); + + if(token0 == _tokenA) { + priceCumulativeLast = _pair.price0CumulativeLast(); + multiplier = uint(10)**(IERC20(_pair.token0()).decimals()); + } else { + priceCumulativeLast = _pair.price1CumulativeLast(); + multiplier = uint(10)**(IERC20(_pair.token1()).decimals()); + } + } + function update() public returns(uint) { + uint112 reserve0; + uint112 reserve1; + (reserve0, reserve1, blockTimestampLast) = pair.getReserves(); + require(reserve0 != 0 && reserve1 != 0, 'PriceOracle: NO_RESERVES'); + + uint _priceCumulative; + (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) = + UniswapV2OracleLibrary.currentCumulativePrices(address(pair)); + if(token0 == tokenA) { + _priceCumulative = _price0Cumulative; + } else { + _priceCumulative = _price1Cumulative; + } + uint _priceCumulativeLast = priceCumulativeLast; + uint _blockTimestampLast = blockTimestampLast; + uint _price; + if (_blockTimestamp != _blockTimestampLast) { + _price = FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / + (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144(); + priceLast = _price; + priceCumulativeLast = _priceCumulative; + blockTimestampLast = _blockTimestamp; + } else { + _price = priceLast; + } + return _price; + } + // note this will always return 0 before update has been called successfully for the first time. + function consult() external view returns (uint) { + uint _priceCumulative; + + (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) = + UniswapV2OracleLibrary.currentCumulativePrices(address(pair)); + + if(token0 == tokenA) { + _priceCumulative = _price0Cumulative; + } else { + _priceCumulative = _price1Cumulative; + } + uint _priceCumulativeLast = priceCumulativeLast; + uint _blockTimestampLast = blockTimestampLast; + // most recent price is already calculated. + if (_blockTimestamp == _blockTimestampLast) { + return priceLast; + } + return FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / + (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144(); + } + function updateAndConsult() external returns (uint) { + return update(); + } +} \ No newline at end of file diff --git a/contracts/interfaces/IERC20.sol b/contracts/interfaces/IERC20.sol index ad79a8f..1eb5682 100644 --- a/contracts/interfaces/IERC20.sol +++ b/contracts/interfaces/IERC20.sol @@ -23,6 +23,8 @@ interface IERC20 { */ function transfer(address recipient, uint256 amount) external returns (bool); + function decimals() external pure returns (uint8); + /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is diff --git a/contracts/interfaces/IPriceOracle.sol b/contracts/interfaces/IPriceOracle.sol new file mode 100644 index 0000000..3589e96 --- /dev/null +++ b/contracts/interfaces/IPriceOracle.sol @@ -0,0 +1,6 @@ +pragma solidity 0.7.4; + + +interface IPriceOracle { + function update() external returns(uint); +} \ No newline at end of file From db681eb4bed7a46cf2b0fbedd018c392a093b0a7 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sat, 26 Jun 2021 19:23:34 -0400 Subject: [PATCH 06/13] deploy to celo script added --- hardhat.config.js | 7 +++-- package.json | 1 + scripts/celo-deploy.js | 68 ++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 5 ++++ 4 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 scripts/celo-deploy.js diff --git a/hardhat.config.js b/hardhat.config.js index 012aa6e..42ccbd1 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -24,7 +24,10 @@ module.exports = { networks: { alfajores: { url: FORNO_CELO_TESTNET, - accounts: [PRIVATE_KEY] + accounts: [PRIVATE_KEY], + live: true, + gasPrice: 0.5 * 10 ** 9, + gas: 8000000, }, celo_mainnet: { url: FORNO_CELO_MAINNET, @@ -40,8 +43,6 @@ module.exports = { } } }, - gasPrice: "61000000000", - gas: "auto", etherscan: { apiKey: ETHERSCAN_API_KEY diff --git a/package.json b/package.json index 878962b..7b851af 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@nomiclabs/hardhat-waffle": "^2.0.1", "@openzeppelin/contracts": "^3.2.0", "@openzeppelin/test-helpers": "^0.5.9", + "@ubeswap/core": "^1.0.2", "@uniswap/v2-core": "^1.0.1", "@uniswap/v2-periphery": "^1.1.0-beta.0", "assert": "2.0.0", diff --git a/scripts/celo-deploy.js b/scripts/celo-deploy.js new file mode 100644 index 0000000..3a982b9 --- /dev/null +++ b/scripts/celo-deploy.js @@ -0,0 +1,68 @@ +const hardhat = require('hardhat'); +const UniswapV2Factory = require("@ubeswap/core/build/metadata/UniswapV2Factory/artifact.json"); +const UniswapV2Pair = require("@ubeswap/core/build/metadata/UniswapV2Pair/artifact.json"); +require('dotenv').config(); + +const { ROUTER, FACTORY, FEE_RECEIVER, ALFAJORES_CELO } = process.env; + +async function main() { + + // Deploy InfinityProtocol stone, LiquidVault, and FeeDistributor + const liquidVaultShare = 60; + const burnPercentage = 10; + + const InfinityProtocol = await hardhat.ethers.getContractFactory("InfinityProtocol"); + const infinityProtocol = await InfinityProtocol.deploy(ROUTER); + await infinityProtocol.deployed(); + + console.log("InfinityProtocol deployed to:", infinityProtocol.address); + + const LiquidVault = await hardhat.ethers.getContractFactory('LiquidVault'); + const liquidVault = await LiquidVault.deploy(); + await liquidVault.deployed(); + + console.log("LiquidVault deployed to: ", liquidVault.address); + + const FeeDistributor = await hardhat.ethers.getContractFactory("FeeDistributor"); + const feeDistributor = await FeeDistributor.deploy(); + await feeDistributor.deployed(); + + console.log("FeeDistributor deployed to:", feeDistributor.address); + + await feeDistributor.seed( + infinityProtocol.address, + liquidVault.address, + FEE_RECEIVER, + liquidVaultShare, + burnPercentage + ); + + console.log("FeeDistributor seeded"); + + // Load Uniswap Factory + const uniswapFactory = await hardhat.ethers.getContractAt(JSON.parse(UniswapV2Factory.abi), FACTORY); + + console.log("UbeswapFactory deployed at:", uniswapFactory.address) + + await uniswapFactory.createPair(ALFAJORES_CELO, infinityProtocol.address); + + const pairAddress = await uniswapFactory.getPair(ALFAJORES_CELO, infinityProtocol.address); + const uniswapPair = await hardhat.ethers.getContractAt(JSON.parse(UniswapV2Pair.abi), pairAddress); + + console.log("Ubeswap LP Token Pair deployed at:", pairAddress) + + // Deploy PriceOracle + const PriceOracle = await hardhat.ethers.getContractFactory("PriceOracle"); + const priceOracle = await PriceOracle.deploy(pairAddress, ALFAJORES_CELO, infinityProtocol.address); + await priceOracle.deployed(); + + console.log("PriceOracle deployed to:", priceOracle.address); + +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8a7799d..74a5dc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -968,6 +968,11 @@ "@types/bn.js" "*" "@types/underscore" "*" +"@ubeswap/core@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@ubeswap/core/-/core-1.0.2.tgz#506919c723d7f130c7b1a33d9e68f10207a86792" + integrity sha512-NjVhCrIej5p+0G2AdPGzWZZW96XjY12s+Qq9dkqxziqcPpJy3EMTMfuLINPxP3uzRyjsPp6mUIFwWJGlTX0qog== + "@uniswap/lib@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-1.1.1.tgz#0afd29601846c16e5d082866cbb24a9e0758e6bc" From aa1daad0846b2f7e1370a5bd96d3dddb188ee6bf Mon Sep 17 00:00:00 2001 From: Sebastian Yesid Tabares Amaya Date: Sat, 26 Jun 2021 19:02:08 -0500 Subject: [PATCH 07/13] add deploy celo script and vscode launch --- .gitignore | 4 +++- .vscode/launch.json | 21 +++++++++++++++++++++ package.json | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json diff --git a/.gitignore b/.gitignore index d4e907b..d4baba7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ node_modules -.vscode +# .vscode +!.vscode/launch.json + .env #Hardhat files diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2a3404f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch via NPM", + "request": "launch", + "runtimeArgs": [ + "run-script", + "deploy:celo" + ], + "runtimeExecutable": "npm", + "skipFiles": [ + "/**" + ], + "type": "pwa-node" + }, + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 7b851af..0fa5903 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "test": "npx hardhat test", "compile": "npx hardhat compile", "deploy:alfajores": "npx hardhat run scripts/infinity-deploy.js --network alfajores", + "deploy:celo": "npx hardhat run --network alfajores scripts/celo-deploy.js", "deploy:alfajoresOracle": "npx hardhat run scripts/oracle-deploy.js --network alfajores", "deploy:celoMainnet": "npx hardhat run scripts/infinity-deploy.js --network celo_mainnet", "deploy:celoMainnetOracle": "npx hardhat run scripts/oracle-deploy.js --network celo_mainnet", From 59a5c4e5923aa199bb0e741935f02a5bdee36d59 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Mon, 28 Jun 2021 04:40:41 -0400 Subject: [PATCH 08/13] deployment to celo - token, fee dist, oracle, powervault --- scripts/celo-deploy.js | 44 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/scripts/celo-deploy.js b/scripts/celo-deploy.js index 3a982b9..89f05fa 100644 --- a/scripts/celo-deploy.js +++ b/scripts/celo-deploy.js @@ -7,28 +7,34 @@ const { ROUTER, FACTORY, FEE_RECEIVER, ALFAJORES_CELO } = process.env; async function main() { - // Deploy InfinityProtocol stone, LiquidVault, and FeeDistributor + // Deploy InfinityProtocol - Reality const liquidVaultShare = 60; const burnPercentage = 10; + await pausePromise('Deploying InfinityProtocol stone'); const InfinityProtocol = await hardhat.ethers.getContractFactory("InfinityProtocol"); const infinityProtocol = await InfinityProtocol.deploy(ROUTER); await infinityProtocol.deployed(); console.log("InfinityProtocol deployed to:", infinityProtocol.address); + // Deploy LiquidVault - Reality + await pausePromise('Deploying LiquidVault'); const LiquidVault = await hardhat.ethers.getContractFactory('LiquidVault'); const liquidVault = await LiquidVault.deploy(); await liquidVault.deployed(); console.log("LiquidVault deployed to: ", liquidVault.address); + // Deploy LiquidVault + await pausePromise('Deploying FeeDistributor'); const FeeDistributor = await hardhat.ethers.getContractFactory("FeeDistributor"); const feeDistributor = await FeeDistributor.deploy(); await feeDistributor.deployed(); console.log("FeeDistributor deployed to:", feeDistributor.address); + await pausePromise('Seeding FeeDistributor'); await feeDistributor.seed( infinityProtocol.address, liquidVault.address, @@ -41,23 +47,53 @@ async function main() { // Load Uniswap Factory const uniswapFactory = await hardhat.ethers.getContractAt(JSON.parse(UniswapV2Factory.abi), FACTORY); - console.log("UbeswapFactory deployed at:", uniswapFactory.address) - - await uniswapFactory.createPair(ALFAJORES_CELO, infinityProtocol.address); + await pausePromise('Deploying Ubeswap Pair'); + await uniswapFactory.createPair(ALFAJORES_CELO, infinityProtocol.address); + + await pausePromise('Fetching pairAddress'); const pairAddress = await uniswapFactory.getPair(ALFAJORES_CELO, infinityProtocol.address); + + await pausePromise('Loading uniswapPair instance'); const uniswapPair = await hardhat.ethers.getContractAt(JSON.parse(UniswapV2Pair.abi), pairAddress); console.log("Ubeswap LP Token Pair deployed at:", pairAddress) // Deploy PriceOracle + await pausePromise('Deploying PriceOracle'); const PriceOracle = await hardhat.ethers.getContractFactory("PriceOracle"); const priceOracle = await PriceOracle.deploy(pairAddress, ALFAJORES_CELO, infinityProtocol.address); await priceOracle.deployed(); console.log("PriceOracle deployed to:", priceOracle.address); + await pausePromise('Deploying PowerVault'); + const PowerLiquidVault = await hardhat.ethers.getContractFactory('PowerLiquidVault'); + const powerLiquidVault = await PowerLiquidVault.deploy(); + await powerLiquidVault.deployed(); + + console.log("PowerLiquidVault deployed to: ", powerLiquidVault.address); + + await pausePromise('Fetching Ubeswap Pair Tokens and LP Total Supply'); + const token0 = await uniswapPair.token0(); + const token1 = await uniswapPair.token1(); + let pairTotalSupply = await uniswapPair.totalSupply(); + + console.log("Token0 Infinity:", token0); + console.log("Token1 CELO:", token1); + console.log("Ubeswap LP Total Supply", pairTotalSupply.toString()); + + await pausePromise('Fetching Ubeswap Pair and Total Supply'); +} + +function pausePromise(message, durationInSeconds = 3) { + return new Promise(function (resolve, error) { + setTimeout(() => { + console.log(message); + return resolve(); + }, durationInSeconds * 1000); + }); } main() From 3eb05fc3f857dd90ff61075677b6c509fd0a39b3 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Fri, 2 Jul 2021 05:21:25 -0400 Subject: [PATCH 09/13] hardhat-deploy, hardhat tasks, new deploy script --- deploy/celo_infinityProtocol.js | 19 + deployments/alfajores/.chainId | 1 + deployments/alfajores/FeeDistributor.json | 304 ++++++ deployments/alfajores/InfinityProtocol.json | 917 ++++++++++++++++++ deployments/alfajores/LiquidVault.json | 773 +++++++++++++++ .../50935558cf5835f525f697d3157617bd.json | 95 ++ deployments/hardhat/.chainId | 1 + deployments/hardhat/FeeDistributor.json | 304 ++++++ deployments/hardhat/InfinityProtocol.json | 917 ++++++++++++++++++ deployments/hardhat/LiquidVault.json | 773 +++++++++++++++ .../50935558cf5835f525f697d3157617bd.json | 95 ++ hardhat.config.js | 36 +- package.json | 4 +- scripts/celo-deploy.js | 8 +- tasks/deploy_feeDistributor.js | 17 + tasks/deploy_infinityProtocol.js | 32 + tasks/deploy_liquidVault.js | 17 + yarn.lock | 482 ++++++++- 18 files changed, 4774 insertions(+), 21 deletions(-) create mode 100644 deploy/celo_infinityProtocol.js create mode 100644 deployments/alfajores/.chainId create mode 100644 deployments/alfajores/FeeDistributor.json create mode 100644 deployments/alfajores/InfinityProtocol.json create mode 100644 deployments/alfajores/LiquidVault.json create mode 100644 deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json create mode 100644 deployments/hardhat/.chainId create mode 100644 deployments/hardhat/FeeDistributor.json create mode 100644 deployments/hardhat/InfinityProtocol.json create mode 100644 deployments/hardhat/LiquidVault.json create mode 100644 deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json create mode 100644 tasks/deploy_feeDistributor.js create mode 100644 tasks/deploy_infinityProtocol.js create mode 100644 tasks/deploy_liquidVault.js diff --git a/deploy/celo_infinityProtocol.js b/deploy/celo_infinityProtocol.js new file mode 100644 index 0000000..e82817e --- /dev/null +++ b/deploy/celo_infinityProtocol.js @@ -0,0 +1,19 @@ +// Imports +const hardhat = require("hardhat"); +require('dotenv').config(); + +// Load env var +const { ROUTER, FACTORY, FEE_RECEIVER, ALFAJORES_CELO } = process.env; + +async function main() { + await hardhat.run("deploy_infinityProtocol", {router: ROUTER}) + await hardhat.run("deploy_liquidVault", {}) + await hardhat.run("deploy_feeDistributor", {}) +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/deployments/alfajores/.chainId b/deployments/alfajores/.chainId new file mode 100644 index 0000000..38448fe --- /dev/null +++ b/deployments/alfajores/.chainId @@ -0,0 +1 @@ +44787 \ No newline at end of file diff --git a/deployments/alfajores/FeeDistributor.json b/deployments/alfajores/FeeDistributor.json new file mode 100644 index 0000000..025f600 --- /dev/null +++ b/deployments/alfajores/FeeDistributor.json @@ -0,0 +1,304 @@ +{ + "address": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "distributeFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "infinity", + "outputs": [ + { + "internalType": "contract IInfinityProtocol", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "recipients", + "outputs": [ + { + "internalType": "address", + "name": "liquidVault", + "type": "address" + }, + { + "internalType": "address", + "name": "secondaryAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidVaultShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "burnPercentage", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_infinity", + "type": "address" + }, + { + "internalType": "address", + "name": "_vault", + "type": "address" + }, + { + "internalType": "address", + "name": "_secondaryAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_liquidVaultShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_burnPercentage", + "type": "uint256" + } + ], + "name": "seed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", + "receipt": { + "to": null, + "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", + "contractAddress": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", + "transactionIndex": 2, + "gasUsed": "674374", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800020000000000000000000000000000400002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3f6621d2901b942014c4508a432addfebef8b7370069078e8c634015dc7a8d40", + "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 5972559, + "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", + "address": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0x3f6621d2901b942014c4508a432addfebef8b7370069078e8c634015dc7a8d40" + } + ], + "blockNumber": 5972559, + "cumulativeGasUsed": "1066859", + "status": 1, + "byzantium": true + }, + "args": [], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"distributeFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinity\",\"outputs\":[{\"internalType\":\"contract IInfinityProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipients\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"liquidVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"burnPercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_infinity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_burnPercentage\",\"type\":\"uint256\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeDistributor.sol\":\"FeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/FeeDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract FeeDistributor is Ownable {\\n using SafeMath for uint;\\n\\n struct FeeRecipient {\\n address liquidVault;\\n address secondaryAddress;\\n uint256 liquidVaultShare; //percentage between 0 and 100\\n uint256 burnPercentage;\\n }\\n \\n IInfinityProtocol public infinity;\\n FeeRecipient public recipients;\\n\\n bool public initialized;\\n\\n uint private constant MINIMUM_AMOUNT = 1e8;\\n\\n modifier seeded {\\n require(\\n initialized,\\n \\\"FeeDistributor: Fees cannot be distributed until Distributor seeded.\\\"\\n );\\n _;\\n }\\n\\n function seed(\\n address _infinity,\\n address _vault,\\n address _secondaryAddress,\\n uint _liquidVaultShare,\\n uint _burnPercentage\\n ) external onlyOwner {\\n require(\\n _liquidVaultShare.add(_burnPercentage) <= 100,\\n \\\"FeeDistributor: liquidVault + burnPercentage incorrect sets\\\"\\n );\\n infinity = IInfinityProtocol(_infinity);\\n recipients.liquidVault = _vault;\\n recipients.secondaryAddress = _secondaryAddress;\\n recipients.liquidVaultShare = _liquidVaultShare;\\n recipients.burnPercentage = _burnPercentage;\\n initialized = true;\\n }\\n\\n function distributeFees() external seeded {\\n uint balance = infinity.balanceOf(address(this));\\n\\n if (balance < MINIMUM_AMOUNT) {\\n return;\\n }\\n\\n uint liquidShare;\\n uint burningShare;\\n uint secondaryShare;\\n\\n if (recipients.liquidVaultShare > 0) {\\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\\n\\n require(\\n infinity.transfer(recipients.liquidVault, liquidShare),\\n \\\"FeeDistributor: transfer to LiquidVault failed\\\"\\n );\\n }\\n\\n if (recipients.burnPercentage > 0) {\\n burningShare = recipients.burnPercentage.mul(balance).div(100);\\n infinity.burn(burningShare);\\n }\\n\\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\\n if (secondaryShare > 0) {\\n require(\\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\\n \\\"FeeDistributor: transfer to the secondary address failed\\\"\\n );\\n }\\n }\\n}\",\"keccak256\":\"0x98e4d2c721c9ac99ab5162a3b5d2f14ee03f8a1ea29db1c6fb3237c648726d5a\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b610ad08061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1749, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "infinity", + "offset": 0, + "slot": "1", + "type": "t_contract(IInfinityProtocol)4419" + }, + { + "astId": 1751, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "recipients", + "offset": 0, + "slot": "2", + "type": "t_struct(FeeRecipient)1747_storage" + }, + { + "astId": 1753, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "initialized", + "offset": 0, + "slot": "6", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IInfinityProtocol)4419": { + "encoding": "inplace", + "label": "contract IInfinityProtocol", + "numberOfBytes": "20" + }, + "t_struct(FeeRecipient)1747_storage": { + "encoding": "inplace", + "label": "struct FeeDistributor.FeeRecipient", + "members": [ + { + "astId": 1740, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "liquidVault", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1742, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "secondaryAddress", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 1744, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "liquidVaultShare", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 1746, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "burnPercentage", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/deployments/alfajores/InfinityProtocol.json b/deployments/alfajores/InfinityProtocol.json new file mode 100644 index 0000000..ffadfd2 --- /dev/null +++ b/deployments/alfajores/InfinityProtocol.json @@ -0,0 +1,917 @@ +{ + "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "excludeAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeReceiver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBurnCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBurnFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTradedCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "includeAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isExcluded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxCycles", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "transferAmount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "deductTransferFee", + "type": "bool" + } + ], + "name": "reflectionFromToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "setFeeReceiver", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setInitialFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxCycles", + "type": "uint256" + } + ], + "name": "setMaxCycles", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rAmount", + "type": "uint256" + } + ], + "name": "tokenFromReflection", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBurnWithFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", + "receipt": { + "to": null, + "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", + "contractAddress": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", + "transactionIndex": 3, + "gasUsed": "2265321", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000400000000000000020000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000002000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000800000000000000000000000000", + "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac", + "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", + "logs": [ + { + "transactionIndex": 3, + "blockNumber": 5972378, + "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", + "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac" + }, + { + "transactionIndex": 3, + "blockNumber": 5972378, + "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", + "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + "logIndex": 5, + "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac" + } + ], + "blockNumber": 5972378, + "cumulativeGasUsed": "2798400", + "status": 1, + "byzantium": true + }, + "args": [ + "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121" + ], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"excludeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTradedCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"includeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isExcluded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxCycles\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"transferAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"deductTransferFee\",\"type\":\"bool\"}],\"name\":\"reflectionFromToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setInitialFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxCycles\",\"type\":\"uint256\"}],\"name\":\"setMaxCycles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"}],\"name\":\"tokenFromReflection\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurnWithFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/InfinityProtocol.sol\":\"InfinityProtocol\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\",\"keccak256\":\"0x9486045e189facd2e868ece35249872598ef03f1087fb6fa4d1161842daa2287\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/InfinityProtocol.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\nimport \\\"@openzeppelin/contracts/GSN/Context.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\\n\\n using SafeMath for uint;\\n using Address for address;\\n\\n mapping (address => uint) private _rOwned;\\n mapping (address => uint) private _tOwned;\\n mapping (address => mapping (address => uint)) private _allowances;\\n\\n mapping (address => bool) private _isExcluded;\\n address[] private _excluded;\\n address public feeReceiver;\\n address public router;\\n uint public maxCycles;\\n\\n string private constant _NAME = \\\"infinityprotocol.io\\\";\\n string private constant _SYMBOL = \\\"INFINITY\\\";\\n uint8 private constant _DECIMALS = 8;\\n\\n uint private constant _MAX = ~uint(0);\\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\\n uint private constant _GRANULARITY = 100;\\n\\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\\n\\n uint private _tFeeTotal;\\n uint private _tBurnTotal;\\n uint private _infinityCycle;\\n\\n uint private _tTradeCycle;\\n uint private _tBurnCycle;\\n\\n uint private _BURN_FEE;\\n uint private _FOT_FEE;\\n bool private _feeSet;\\n\\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\\n\\n constructor (address _router) public {\\n _rOwned[_msgSender()] = _rTotal;\\n router = _router;\\n setMaxCycles(500);\\n emit Transfer(address(0), _msgSender(), _tTotal);\\n }\\n\\n function name() public pure returns (string memory) {\\n return _NAME;\\n }\\n\\n function symbol() public pure returns (string memory) {\\n return _SYMBOL;\\n }\\n\\n function decimals() public pure override returns (uint8) {\\n return _DECIMALS;\\n }\\n\\n function totalSupply() public view override returns (uint) {\\n return _tTotal;\\n }\\n\\n function balanceOf(address account) public view override returns (uint) {\\n if (_isExcluded[account]) return _tOwned[account];\\n return tokenFromReflection(_rOwned[account]);\\n }\\n\\n function transfer(address recipient, uint amount) public override returns (bool) {\\n _transfer(_msgSender(), recipient, amount);\\n return true;\\n }\\n\\n function allowance(address owner, address spender) public view override returns (uint) {\\n return _allowances[owner][spender];\\n }\\n\\n function approve(address spender, uint amount) public override returns (bool) {\\n _approve(_msgSender(), spender, amount);\\n return true;\\n }\\n\\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\\n _transfer(sender, recipient, amount);\\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n return true;\\n }\\n\\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n return true;\\n }\\n\\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n return true;\\n }\\n\\n function isExcluded(address account) public view returns (bool) {\\n return _isExcluded[account];\\n }\\n\\n function totalFees() public view returns (uint) {\\n return _tFeeTotal;\\n }\\n\\n function totalBurn() public view returns (uint) {\\n return _tBurnTotal;\\n }\\n\\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\\n require(receiver != address(0), \\\"Zero address not allowed\\\");\\n feeReceiver = receiver;\\n return true;\\n }\\n\\n function totalBurnWithFees() public view returns (uint) {\\n return _tBurnTotal.add(_tFeeTotal);\\n }\\n\\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\\n require(transferAmount <= _tTotal, \\\"Amount must be less than supply\\\");\\n if (!deductTransferFee) {\\n (uint rAmount,,,,,) = _getValues(transferAmount);\\n return rAmount;\\n } else {\\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\\n return rTransferAmount;\\n }\\n }\\n\\n function tokenFromReflection(uint rAmount) public view returns(uint) {\\n require(rAmount <= _rTotal, \\\"Amount must be less than total reflections\\\");\\n uint currentRate = _getRate();\\n return rAmount.div(currentRate);\\n }\\n\\n function excludeAccount(address account) external onlyOwner() {\\n require(!_isExcluded[account], \\\"Account is already excluded\\\");\\n require(account != router, 'Not allowed to exclude router');\\n require(account != feeReceiver, \\\"Can not exclude fee receiver\\\");\\n if (_rOwned[account] > 0) {\\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\\n }\\n _isExcluded[account] = true;\\n _excluded.push(account);\\n }\\n\\n function includeAccount(address account) external onlyOwner() {\\n require(_isExcluded[account], \\\"Account is already included\\\");\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_excluded[i] == account) {\\n _excluded[i] = _excluded[_excluded.length - 1];\\n _tOwned[account] = 0;\\n _isExcluded[account] = false;\\n _excluded.pop();\\n break;\\n }\\n }\\n }\\n\\n function _approve(address owner, address spender, uint amount) private {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n function _transfer(address sender, address recipient, uint amount) private {\\n require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n require(amount > 0, \\\"Transfer amount must be greater than zero\\\");\\n\\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\\n // reaches its final phase, in which no further supply elasticity will take place\\n // and fees will stay at 0\\n\\n if (sender != owner() && recipient != owner())\\n require(amount <= _MAX_TX_SIZE, \\\"Transfer amount exceeds the maxTxAmount.\\\");\\n\\n // @dev 50% fee is burn fee, 50% is fot\\n if (_BURN_FEE >= 250) {\\n\\n _tTradeCycle = _tTradeCycle.add(amount);\\n\\n\\n // @dev adjust current burnFee/fotFee depending on the traded tokens\\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\\n _setFees(500);\\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\\n _setFees(550);\\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\\n _setFees(600);\\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\\n _setFees(650);\\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\\n _setFees(700);\\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\\n _setFees(750);\\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\\n _setFees(800);\\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\\n _setFees(850);\\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\\n _setFees(900);\\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\\n _setFees(950);\\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\\n _setFees(1000);\\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\\n _setFees(1050);\\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\\n _setFees(1100);\\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\\n _setFees(1150);\\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\\n _setFees(1200);\\n }\\n }\\n\\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferFromExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferToExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferStandard(sender, recipient, amount);\\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferBothExcluded(sender, recipient, amount);\\n } else {\\n _transferStandard(sender, recipient, amount);\\n }\\n }\\n\\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\\n _rTotal = _rTotal.sub(rBurn);\\n _tFeeTotal = _tFeeTotal.add(transferFee);\\n _tBurnTotal = _tBurnTotal.add(transferBurn);\\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\\n _tTotal = _tTotal.sub(transferBurn);\\n\\n\\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \\n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\\n //set rebase percent\\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\\n _tTradeCycle = 0;\\n _setFees(500);\\n\\n _rebase(_tRebaseDelta);\\n }\\n }\\n\\n function burn(uint amount) external override returns (bool) {\\n address sender = _msgSender();\\n uint balance = balanceOf(sender);\\n require(balance >= amount, \\\"Cannot burn more than on balance\\\");\\n require(sender == feeReceiver, \\\"Only feeReceiver\\\");\\n\\n uint rBurn = amount.mul(_getRate());\\n _rTotal = _rTotal.sub(rBurn);\\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\\n\\n _tBurnTotal = _tBurnTotal.add(amount);\\n _tTotal = _tTotal.sub(amount);\\n\\n emit Transfer(sender, address(0), amount);\\n return true;\\n }\\n\\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\\n return (tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\\n uint currentRate = _getRate();\\n uint rAmount = transferAmount.mul(currentRate);\\n uint rFee = transferFee.mul(currentRate);\\n uint rBurn = transferBurn.mul(currentRate);\\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\\n return (rAmount, rTransferAmount, rFee);\\n }\\n\\n function _getRate() private view returns(uint) {\\n (uint rSupply, uint tSupply) = _getCurrentSupply();\\n return rSupply.div(tSupply);\\n }\\n\\n function _getCurrentSupply() private view returns(uint, uint) {\\n uint rSupply = _rTotal;\\n uint tSupply = _tTotal;\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\\n }\\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\\n return (rSupply, tSupply);\\n }\\n\\n\\n function _setFees(uint fee) private {\\n require(fee >= 0 && fee <= 1500, \\\"fee should be in 0 - 15%\\\");\\n if (_BURN_FEE == fee.div(2)) {\\n return;\\n }\\n\\n _BURN_FEE = fee.div(2);\\n _FOT_FEE = fee.div(2);\\n }\\n\\n function setInitialFee() external onlyOwner() {\\n require(!_feeSet, \\\"Initial fee already set\\\");\\n _setFees(500);\\n _feeSet = true;\\n }\\n\\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\\n require(_maxCycles >= _infinityCycle, \\\"Can not set more than current cycle\\\");\\n maxCycles = _maxCycles;\\n }\\n\\n function getBurnFee() public view returns(uint) {\\n return _BURN_FEE;\\n }\\n\\n function getFee() public view returns(uint) {\\n return _FOT_FEE;\\n }\\n\\n function _getMaxTxAmount() private pure returns(uint) {\\n return _MAX_TX_SIZE;\\n }\\n\\n function getCycle() public view returns(uint) {\\n return _infinityCycle;\\n }\\n\\n function getBurnCycle() public view returns(uint) {\\n return _tBurnCycle;\\n }\\n\\n function getTradedCycle() public view returns(uint) {\\n return _tTradeCycle;\\n }\\n\\n function _rebase(uint supplyDelta) internal {\\n _infinityCycle = _infinityCycle.add(1);\\n _tTotal = _tTotal.add(supplyDelta);\\n\\n if (_infinityCycle > maxCycles) {\\n _setFees(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x64cca0b72006a7b6178354fc1ede3f320e437204b05cea400fc0b63ba2680e42\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", + "bytecode": "0x6080604052662386f26fc10000600955660e3d2cfe61ffff19600a553480156200002857600080fd5b50604051620027f6380380620027f6833981810160405260208110156200004e57600080fd5b505160006200005c62000158565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460016000620000b762000158565b6001600160a01b039081168252602082019290925260400160002091909155600780546001600160a01b031916918316919091179055620000fa6101f46200015c565b6200010462000158565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200022c565b3390565b6200016662000158565b6001600160a01b0316620001796200021d565b6001600160a01b031614620001d5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d54811015620002185760405162461bcd60e51b8152600401808060200182810382526023815260200180620027d36023913960400191505060405180910390fd5b600855565b6000546001600160a01b031690565b612597806200023c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c6343000704003343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c65", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." + }, + "approve(address,uint256)": { + "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." + }, + "balanceOf(address)": { + "details": "Returns the amount of tokens owned by `account`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "totalSupply()": { + "details": "Returns the amount of tokens in existence." + }, + "transfer(address,uint256)": { + "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferFrom(address,address,uint256)": { + "details": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1955, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_rOwned", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1959, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tOwned", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1965, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_allowances", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 1969, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_isExcluded", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 1972, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_excluded", + "offset": 0, + "slot": "5", + "type": "t_array(t_address)dyn_storage" + }, + { + "astId": 1974, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "feeReceiver", + "offset": 0, + "slot": "6", + "type": "t_address" + }, + { + "astId": 1976, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "router", + "offset": 0, + "slot": "7", + "type": "t_address" + }, + { + "astId": 1978, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "maxCycles", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 2010, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tTotal", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 2019, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_rTotal", + "offset": 0, + "slot": "10", + "type": "t_uint256" + }, + { + "astId": 2021, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tFeeTotal", + "offset": 0, + "slot": "11", + "type": "t_uint256" + }, + { + "astId": 2023, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tBurnTotal", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 2025, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_infinityCycle", + "offset": 0, + "slot": "13", + "type": "t_uint256" + }, + { + "astId": 2027, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tTradeCycle", + "offset": 0, + "slot": "14", + "type": "t_uint256" + }, + { + "astId": 2029, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tBurnCycle", + "offset": 0, + "slot": "15", + "type": "t_uint256" + }, + { + "astId": 2031, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_BURN_FEE", + "offset": 0, + "slot": "16", + "type": "t_uint256" + }, + { + "astId": 2033, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_FOT_FEE", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 2035, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_feeSet", + "offset": 0, + "slot": "18", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/deployments/alfajores/LiquidVault.json b/deployments/alfajores/LiquidVault.json new file mode 100644 index 0000000..e9f6bee --- /dev/null +++ b/deployments/alfajores/LiquidVault.json @@ -0,0 +1,773 @@ +{ + "address": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "percentageAmount", + "type": "uint256" + } + ], + "name": "EthTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "claimed", + "type": "bool" + } + ], + "name": "LPClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eth", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "infinityToken", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "LPQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "claimLP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "config", + "outputs": [ + { + "internalType": "address", + "name": "infinityToken", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapRouter", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Pair", + "name": "tokenPair", + "type": "address" + }, + { + "internalType": "contract IFeeDistributor", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "address", + "name": "weth", + "type": "address" + }, + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + }, + { + "internalType": "uint32", + "name": "stakeDuration", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enableLPForceUnlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "forceUnlock", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "position", + "type": "uint256" + } + ], + "name": "getLockedLP", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakeDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lockedLP", + "outputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "claimed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + } + ], + "name": "lockedLPLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "purchaseLP", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "purchaseLPFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "queueCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "duration", + "type": "uint32" + }, + { + "internalType": "address", + "name": "infinityToken", + "type": "address" + }, + { + "internalType": "address", + "name": "uniswapPair", + "type": "address" + }, + { + "internalType": "address", + "name": "uniswapRouter", + "type": "address" + }, + { + "internalType": "address", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "name": "seed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + } + ], + "name": "setFeeReceiverAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "duration", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "name": "setParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", + "receipt": { + "to": null, + "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", + "contractAddress": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", + "transactionIndex": 0, + "gasUsed": "1399718", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000080000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x69875cb1da1ad370fa410882fa2ae84bbdf68deac57f7d3061447be00f285a05", + "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 5972470, + "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", + "address": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x69875cb1da1ad370fa410882fa2ae84bbdf68deac57f7d3061447be00f285a05" + } + ], + "blockNumber": 5972470, + "cumulativeGasUsed": "1399718", + "status": 1, + "byzantium": true + }, + "args": [], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"percentageAmount\",\"type\":\"uint256\"}],\"name\":\"EthTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"name\":\"LPClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"infinityToken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"LPQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimLP\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Pair\",\"name\":\"tokenPair\",\"type\":\"address\"},{\"internalType\":\"contract IFeeDistributor\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakeDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableLPForceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"getLockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"lockedLPLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"purchaseLP\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"purchaseLPFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"queueCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapPair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiverAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"setParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"EthTransferred(address,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called to track ETH amounts \"},\"LPClaimed(address,uint256,uint256,uint256,bool)\":{\"notice\":\"Emitted when claimLP() is called \"},\"LPQueued(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called and LP tokens minted \"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/vaults/LiquidVault.sol\":\"LiquidVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IUniswapV2Pair {\\n event Approval(address indexed owner, address indexed spender, uint value);\\n event Transfer(address indexed from, address indexed to, uint value);\\n\\n function name() external pure returns (string memory);\\n function symbol() external pure returns (string memory);\\n function decimals() external pure returns (uint8);\\n function totalSupply() external view returns (uint);\\n function balanceOf(address owner) external view returns (uint);\\n function allowance(address owner, address spender) external view returns (uint);\\n\\n function approve(address spender, uint value) external returns (bool);\\n function transfer(address to, uint value) external returns (bool);\\n function transferFrom(address from, address to, uint value) external returns (bool);\\n\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n function PERMIT_TYPEHASH() external pure returns (bytes32);\\n function nonces(address owner) external view returns (uint);\\n\\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\\n\\n event Mint(address indexed sender, uint amount0, uint amount1);\\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\\n event Swap(\\n address indexed sender,\\n uint amount0In,\\n uint amount1In,\\n uint amount0Out,\\n uint amount1Out,\\n address indexed to\\n );\\n event Sync(uint112 reserve0, uint112 reserve1);\\n\\n function MINIMUM_LIQUIDITY() external pure returns (uint);\\n function factory() external view returns (address);\\n function token0() external view returns (address);\\n function token1() external view returns (address);\\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\n function price0CumulativeLast() external view returns (uint);\\n function price1CumulativeLast() external view returns (uint);\\n function kLast() external view returns (uint);\\n\\n function mint(address to) external returns (uint liquidity);\\n function burn(address to) external returns (uint amount0, uint amount1);\\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\\n function skim(address to) external;\\n function sync() external;\\n\\n function initialize(address, address) external;\\n}\\n\",\"keccak256\":\"0x7c9bc70e5996c763e02ff38905282bc24fb242b0ef2519a003b36824fc524a4b\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\ninterface IUniswapV2Router01 {\\n function factory() external pure returns (address);\\n function WETH() external pure returns (address);\\n\\n function addLiquidity(\\n address tokenA,\\n address tokenB,\\n uint amountADesired,\\n uint amountBDesired,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB, uint liquidity);\\n function addLiquidityETH(\\n address token,\\n uint amountTokenDesired,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\\n function removeLiquidity(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETH(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountToken, uint amountETH);\\n function removeLiquidityWithPermit(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETHWithPermit(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountToken, uint amountETH);\\n function swapExactTokensForTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapTokensForExactTokens(\\n uint amountOut,\\n uint amountInMax,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n\\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\\n}\\n\",\"keccak256\":\"0x8a3c5c449d4b7cd76513ed6995f4b86e4a86f222c770f8442f5fc128ce29b4d2\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\nimport './IUniswapV2Router01.sol';\\n\\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\\n function removeLiquidityETHSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountETH);\\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountETH);\\n\\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external payable;\\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n}\\n\",\"keccak256\":\"0x744e30c133bd0f7ca9e7163433cf6d72f45c6bb1508c2c9c02f1a6db796ae59d\"},\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IWETH {\\n function deposit() external payable;\\n function transfer(address to, uint value) external returns (bool);\\n function withdraw(uint) external;\\n}\\n\",\"keccak256\":\"0xfc10758fd8dba790c39468dccd358cb7cef06ae7c4781832cc7aa76f91f167e6\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IFeeDistributor.sol\":{\"content\":\"interface IFeeDistributor {\\n function distributeFees() external;\\n}\",\"keccak256\":\"0x8cace30edd60bc477fb3fe56655259d416d12002de3ce4e25505088334365eb2\"},\"contracts/vaults/LiquidVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../interfaces/IERC20.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\\\";\\nimport \\\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\\\";\\nimport \\\"../interfaces/IFeeDistributor.sol\\\";\\n\\ncontract LiquidVault is Ownable {\\n /** Emitted when purchaseLP() is called to track ETH amounts */\\n event EthTransferred(\\n address from,\\n uint amount,\\n uint percentageAmount\\n );\\n\\n /** Emitted when purchaseLP() is called and LP tokens minted */\\n event LPQueued(\\n address holder,\\n uint amount,\\n uint eth,\\n uint infinityToken,\\n uint timestamp\\n );\\n\\n /** Emitted when claimLP() is called */\\n event LPClaimed(\\n address holder,\\n uint amount,\\n uint timestamp,\\n uint exitFee,\\n bool claimed\\n );\\n\\n struct LPbatch {\\n address holder;\\n uint amount;\\n uint timestamp;\\n bool claimed;\\n }\\n\\n struct LiquidVaultConfig {\\n address infinityToken;\\n IUniswapV2Router02 uniswapRouter;\\n IUniswapV2Pair tokenPair;\\n IFeeDistributor feeDistributor;\\n address weth;\\n address payable feeReceiver;\\n uint32 stakeDuration;\\n uint8 donationShare; //0-100\\n uint8 purchaseFee; //0-100\\n }\\n \\n bool public forceUnlock;\\n bool private locked;\\n\\n modifier lock {\\n require(!locked, \\\"LiquidVault: reentrancy violation\\\");\\n locked = true;\\n _;\\n locked = false;\\n }\\n\\n LiquidVaultConfig public config;\\n\\n mapping(address => LPbatch[]) public lockedLP;\\n mapping(address => uint) public queueCounter;\\n\\n function seed(\\n uint32 duration,\\n address infinityToken,\\n address uniswapPair,\\n address uniswapRouter,\\n address feeDistributor,\\n address payable feeReceiver,\\n uint8 donationShare, // LP Token\\n uint8 purchaseFee // ETH\\n ) public onlyOwner {\\n config.infinityToken = infinityToken;\\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\\n config.tokenPair = IUniswapV2Pair(uniswapPair);\\n config.feeDistributor = IFeeDistributor(feeDistributor);\\n config.weth = config.uniswapRouter.WETH();\\n setFeeReceiverAddress(feeReceiver);\\n setParameters(duration, donationShare, purchaseFee);\\n }\\n\\n function getStakeDuration() public view returns (uint) {\\n return forceUnlock ? 0 : config.stakeDuration;\\n }\\n\\n // Could not be canceled if activated\\n function enableLPForceUnlock() public onlyOwner {\\n forceUnlock = true;\\n }\\n\\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\\n require(\\n feeReceiver != address(0),\\n \\\"LiquidVault: ETH receiver is zero address\\\"\\n );\\n\\n config.feeReceiver = feeReceiver;\\n }\\n\\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\\n public\\n onlyOwner\\n {\\n require(\\n donationShare <= 100,\\n \\\"LiquidVault: donation share % between 0 and 100\\\"\\n );\\n require(\\n purchaseFee <= 100,\\n \\\"LiquidVault: purchase fee share % between 0 and 100\\\"\\n );\\n\\n config.stakeDuration = duration * 1 days;\\n config.donationShare = donationShare;\\n config.purchaseFee = purchaseFee;\\n }\\n\\n function purchaseLPFor(address beneficiary) public payable lock {\\n config.feeDistributor.distributeFees();\\n require(msg.value > 0, \\\"LiquidVault: ETH required to mint INFINITY LP\\\");\\n\\n uint feeValue = (config.purchaseFee * msg.value) / 100;\\n uint exchangeValue = msg.value - feeValue;\\n\\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\\n\\n uint infinityRequired;\\n\\n if (address(config.infinityToken) < address(config.weth)) {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve2,\\n reserve1\\n );\\n } else {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve1,\\n reserve2\\n );\\n }\\n\\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\\n require(\\n balance >= infinityRequired,\\n \\\"LiquidVault: insufficient INFINITY tokens in LiquidVault\\\"\\n );\\n\\n IWETH(config.weth).deposit{ value: exchangeValue }();\\n address tokenPairAddress = address(config.tokenPair);\\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\\n IERC20(config.infinityToken).transfer(\\n tokenPairAddress,\\n infinityRequired\\n );\\n\\n uint liquidityCreated = config.tokenPair.mint(address(this));\\n config.feeReceiver.transfer(feeValue);\\n\\n lockedLP[beneficiary].push(\\n LPbatch({\\n holder: beneficiary,\\n amount: liquidityCreated,\\n timestamp: block.timestamp,\\n claimed: false\\n })\\n );\\n\\n emit LPQueued(\\n beneficiary,\\n liquidityCreated,\\n exchangeValue,\\n infinityRequired,\\n block.timestamp\\n );\\n\\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\\n }\\n\\n //send ETH to match with INFINITY tokens in LiquidVault\\n function purchaseLP() public payable {\\n purchaseLPFor(msg.sender);\\n }\\n\\n function claimLP() public {\\n uint next = queueCounter[msg.sender];\\n require(\\n next < lockedLP[msg.sender].length,\\n \\\"LiquidVault: nothing to claim.\\\"\\n );\\n LPbatch storage batch = lockedLP[msg.sender][next];\\n require(\\n block.timestamp - batch.timestamp > getStakeDuration(),\\n \\\"LiquidVault: LP still locked.\\\"\\n );\\n next++;\\n queueCounter[msg.sender] = next;\\n uint donation = (config.donationShare * batch.amount) / 100;\\n batch.claimed = true;\\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\\n require(\\n config.tokenPair.transfer(address(0), donation),\\n \\\"LiquidVault: donation transfer failed in LP claim.\\\"\\n );\\n require(\\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\\n \\\"LiquidVault: transfer failed in LP claim.\\\"\\n );\\n }\\n\\n function lockedLPLength(address holder) public view returns (uint) {\\n return lockedLP[holder].length;\\n }\\n\\n function getLockedLP(address holder, uint position)\\n public\\n view\\n returns (\\n address,\\n uint,\\n uint,\\n bool\\n )\\n {\\n LPbatch memory batch = lockedLP[holder][position];\\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\\n }\\n}\",\"keccak256\":\"0xf470245efe80b6887c8d5f7a5408c46fca8b4cb1cfcaac363281ce26c031694c\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6117ef8061007d6000396000f3fe6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "EthTransferred(address,uint256,uint256)": { + "notice": "Emitted when purchaseLP() is called to track ETH amounts " + }, + "LPClaimed(address,uint256,uint256,uint256,bool)": { + "notice": "Emitted when claimLP() is called " + }, + "LPQueued(address,uint256,uint256,uint256,uint256)": { + "notice": "Emitted when purchaseLP() is called and LP tokens minted " + } + }, + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5821, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "forceUnlock", + "offset": 20, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 5823, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "locked", + "offset": 21, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 5843, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "config", + "offset": 0, + "slot": "1", + "type": "t_struct(LiquidVaultConfig)5819_storage" + }, + { + "astId": 5848, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "lockedLP", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)" + }, + { + "astId": 5852, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "queueCounter", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_address,t_uint256)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(LPbatch)5800_storage)dyn_storage": { + "base": "t_struct(LPbatch)5800_storage", + "encoding": "dynamic_array", + "label": "struct LiquidVault.LPbatch[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IFeeDistributor)4407": { + "encoding": "inplace", + "label": "contract IFeeDistributor", + "numberOfBytes": "20" + }, + "t_contract(IUniswapV2Pair)1205": { + "encoding": "inplace", + "label": "contract IUniswapV2Pair", + "numberOfBytes": "20" + }, + "t_contract(IUniswapV2Router02)1601": { + "encoding": "inplace", + "label": "contract IUniswapV2Router02", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LiquidVault.LPbatch[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(LPbatch)5800_storage)dyn_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(LPbatch)5800_storage": { + "encoding": "inplace", + "label": "struct LiquidVault.LPbatch", + "members": [ + { + "astId": 5793, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "holder", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5795, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "amount", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 5797, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "timestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 5799, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "claimed", + "offset": 0, + "slot": "3", + "type": "t_bool" + } + ], + "numberOfBytes": "128" + }, + "t_struct(LiquidVaultConfig)5819_storage": { + "encoding": "inplace", + "label": "struct LiquidVault.LiquidVaultConfig", + "members": [ + { + "astId": 5802, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "infinityToken", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5804, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "uniswapRouter", + "offset": 0, + "slot": "1", + "type": "t_contract(IUniswapV2Router02)1601" + }, + { + "astId": 5806, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "tokenPair", + "offset": 0, + "slot": "2", + "type": "t_contract(IUniswapV2Pair)1205" + }, + { + "astId": 5808, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "feeDistributor", + "offset": 0, + "slot": "3", + "type": "t_contract(IFeeDistributor)4407" + }, + { + "astId": 5810, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "weth", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 5812, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "feeReceiver", + "offset": 0, + "slot": "5", + "type": "t_address_payable" + }, + { + "astId": 5814, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "stakeDuration", + "offset": 20, + "slot": "5", + "type": "t_uint32" + }, + { + "astId": 5816, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "donationShare", + "offset": 24, + "slot": "5", + "type": "t_uint8" + }, + { + "astId": 5818, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "purchaseFee", + "offset": 25, + "slot": "5", + "type": "t_uint8" + } + ], + "numberOfBytes": "192" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json b/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json new file mode 100644 index 0000000..dd31a68 --- /dev/null +++ b/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json @@ -0,0 +1,95 @@ +{ + "language": "Solidity", + "sources": { + "contracts/FeeDistributor.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract FeeDistributor is Ownable {\n using SafeMath for uint;\n\n struct FeeRecipient {\n address liquidVault;\n address secondaryAddress;\n uint256 liquidVaultShare; //percentage between 0 and 100\n uint256 burnPercentage;\n }\n \n IInfinityProtocol public infinity;\n FeeRecipient public recipients;\n\n bool public initialized;\n\n uint private constant MINIMUM_AMOUNT = 1e8;\n\n modifier seeded {\n require(\n initialized,\n \"FeeDistributor: Fees cannot be distributed until Distributor seeded.\"\n );\n _;\n }\n\n function seed(\n address _infinity,\n address _vault,\n address _secondaryAddress,\n uint _liquidVaultShare,\n uint _burnPercentage\n ) external onlyOwner {\n require(\n _liquidVaultShare.add(_burnPercentage) <= 100,\n \"FeeDistributor: liquidVault + burnPercentage incorrect sets\"\n );\n infinity = IInfinityProtocol(_infinity);\n recipients.liquidVault = _vault;\n recipients.secondaryAddress = _secondaryAddress;\n recipients.liquidVaultShare = _liquidVaultShare;\n recipients.burnPercentage = _burnPercentage;\n initialized = true;\n }\n\n function distributeFees() external seeded {\n uint balance = infinity.balanceOf(address(this));\n\n if (balance < MINIMUM_AMOUNT) {\n return;\n }\n\n uint liquidShare;\n uint burningShare;\n uint secondaryShare;\n\n if (recipients.liquidVaultShare > 0) {\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\n\n require(\n infinity.transfer(recipients.liquidVault, liquidShare),\n \"FeeDistributor: transfer to LiquidVault failed\"\n );\n }\n\n if (recipients.burnPercentage > 0) {\n burningShare = recipients.burnPercentage.mul(balance).div(100);\n infinity.burn(burningShare);\n }\n\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\n if (secondaryShare > 0) {\n require(\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\n \"FeeDistributor: transfer to the secondary address failed\"\n );\n }\n }\n}" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "contracts/interfaces/IInfinityProtocol.sol": { + "content": "import \"./IERC20.sol\";\n\ninterface IInfinityProtocol is IERC20 {\n function burn(uint amount) external returns (bool);\n}" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "contracts/interfaces/IERC20.sol": { + "content": "pragma solidity 0.7.4;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function decimals() external pure returns (uint8);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}" + }, + "contracts/InfinityProtocol.sol": { + "content": "pragma solidity 0.7.4;\n\nimport \"@openzeppelin/contracts/GSN/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\n\n using SafeMath for uint;\n using Address for address;\n\n mapping (address => uint) private _rOwned;\n mapping (address => uint) private _tOwned;\n mapping (address => mapping (address => uint)) private _allowances;\n\n mapping (address => bool) private _isExcluded;\n address[] private _excluded;\n address public feeReceiver;\n address public router;\n uint public maxCycles;\n\n string private constant _NAME = \"infinityprotocol.io\";\n string private constant _SYMBOL = \"INFINITY\";\n uint8 private constant _DECIMALS = 8;\n\n uint private constant _MAX = ~uint(0);\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\n uint private constant _GRANULARITY = 100;\n\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\n\n uint private _tFeeTotal;\n uint private _tBurnTotal;\n uint private _infinityCycle;\n\n uint private _tTradeCycle;\n uint private _tBurnCycle;\n\n uint private _BURN_FEE;\n uint private _FOT_FEE;\n bool private _feeSet;\n\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\n\n constructor (address _router) public {\n _rOwned[_msgSender()] = _rTotal;\n router = _router;\n setMaxCycles(500);\n emit Transfer(address(0), _msgSender(), _tTotal);\n }\n\n function name() public pure returns (string memory) {\n return _NAME;\n }\n\n function symbol() public pure returns (string memory) {\n return _SYMBOL;\n }\n\n function decimals() public pure override returns (uint8) {\n return _DECIMALS;\n }\n\n function totalSupply() public view override returns (uint) {\n return _tTotal;\n }\n\n function balanceOf(address account) public view override returns (uint) {\n if (_isExcluded[account]) return _tOwned[account];\n return tokenFromReflection(_rOwned[account]);\n }\n\n function transfer(address recipient, uint amount) public override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint amount) public override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n function isExcluded(address account) public view returns (bool) {\n return _isExcluded[account];\n }\n\n function totalFees() public view returns (uint) {\n return _tFeeTotal;\n }\n\n function totalBurn() public view returns (uint) {\n return _tBurnTotal;\n }\n\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\n require(receiver != address(0), \"Zero address not allowed\");\n feeReceiver = receiver;\n return true;\n }\n\n function totalBurnWithFees() public view returns (uint) {\n return _tBurnTotal.add(_tFeeTotal);\n }\n\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\n require(transferAmount <= _tTotal, \"Amount must be less than supply\");\n if (!deductTransferFee) {\n (uint rAmount,,,,,) = _getValues(transferAmount);\n return rAmount;\n } else {\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\n return rTransferAmount;\n }\n }\n\n function tokenFromReflection(uint rAmount) public view returns(uint) {\n require(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n uint currentRate = _getRate();\n return rAmount.div(currentRate);\n }\n\n function excludeAccount(address account) external onlyOwner() {\n require(!_isExcluded[account], \"Account is already excluded\");\n require(account != router, 'Not allowed to exclude router');\n require(account != feeReceiver, \"Can not exclude fee receiver\");\n if (_rOwned[account] > 0) {\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\n }\n _isExcluded[account] = true;\n _excluded.push(account);\n }\n\n function includeAccount(address account) external onlyOwner() {\n require(_isExcluded[account], \"Account is already included\");\n for (uint i = 0; i < _excluded.length; i++) {\n if (_excluded[i] == account) {\n _excluded[i] = _excluded[_excluded.length - 1];\n _tOwned[account] = 0;\n _isExcluded[account] = false;\n _excluded.pop();\n break;\n }\n }\n }\n\n function _approve(address owner, address spender, uint amount) private {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n function _transfer(address sender, address recipient, uint amount) private {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n require(amount > 0, \"Transfer amount must be greater than zero\");\n\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\n // reaches its final phase, in which no further supply elasticity will take place\n // and fees will stay at 0\n\n if (sender != owner() && recipient != owner())\n require(amount <= _MAX_TX_SIZE, \"Transfer amount exceeds the maxTxAmount.\");\n\n // @dev 50% fee is burn fee, 50% is fot\n if (_BURN_FEE >= 250) {\n\n _tTradeCycle = _tTradeCycle.add(amount);\n\n\n // @dev adjust current burnFee/fotFee depending on the traded tokens\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\n _setFees(500);\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\n _setFees(550);\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\n _setFees(600);\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\n _setFees(650);\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\n _setFees(700);\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\n _setFees(750);\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\n _setFees(800);\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\n _setFees(850);\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\n _setFees(900);\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\n _setFees(950);\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\n _setFees(1000);\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\n _setFees(1050);\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\n _setFees(1100);\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\n _setFees(1150);\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\n _setFees(1200);\n }\n }\n\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferFromExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\n _transferToExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferStandard(sender, recipient, amount);\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\n _transferBothExcluded(sender, recipient, amount);\n } else {\n _transferStandard(sender, recipient, amount);\n }\n }\n\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\n _rTotal = _rTotal.sub(rBurn);\n _tFeeTotal = _tFeeTotal.add(transferFee);\n _tBurnTotal = _tBurnTotal.add(transferBurn);\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\n _tTotal = _tTotal.sub(transferBurn);\n\n\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\n //set rebase percent\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\n _tTradeCycle = 0;\n _setFees(500);\n\n _rebase(_tRebaseDelta);\n }\n }\n\n function burn(uint amount) external override returns (bool) {\n address sender = _msgSender();\n uint balance = balanceOf(sender);\n require(balance >= amount, \"Cannot burn more than on balance\");\n require(sender == feeReceiver, \"Only feeReceiver\");\n\n uint rBurn = amount.mul(_getRate());\n _rTotal = _rTotal.sub(rBurn);\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\n\n _tBurnTotal = _tBurnTotal.add(amount);\n _tTotal = _tTotal.sub(amount);\n\n emit Transfer(sender, address(0), amount);\n return true;\n }\n\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\n }\n\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\n return (tTransferAmount, transferFee, transferBurn);\n }\n\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\n uint currentRate = _getRate();\n uint rAmount = transferAmount.mul(currentRate);\n uint rFee = transferFee.mul(currentRate);\n uint rBurn = transferBurn.mul(currentRate);\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\n return (rAmount, rTransferAmount, rFee);\n }\n\n function _getRate() private view returns(uint) {\n (uint rSupply, uint tSupply) = _getCurrentSupply();\n return rSupply.div(tSupply);\n }\n\n function _getCurrentSupply() private view returns(uint, uint) {\n uint rSupply = _rTotal;\n uint tSupply = _tTotal;\n for (uint i = 0; i < _excluded.length; i++) {\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\n }\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n return (rSupply, tSupply);\n }\n\n\n function _setFees(uint fee) private {\n require(fee >= 0 && fee <= 1500, \"fee should be in 0 - 15%\");\n if (_BURN_FEE == fee.div(2)) {\n return;\n }\n\n _BURN_FEE = fee.div(2);\n _FOT_FEE = fee.div(2);\n }\n\n function setInitialFee() external onlyOwner() {\n require(!_feeSet, \"Initial fee already set\");\n _setFees(500);\n _feeSet = true;\n }\n\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\n require(_maxCycles >= _infinityCycle, \"Can not set more than current cycle\");\n maxCycles = _maxCycles;\n }\n\n function getBurnFee() public view returns(uint) {\n return _BURN_FEE;\n }\n\n function getFee() public view returns(uint) {\n return _FOT_FEE;\n }\n\n function _getMaxTxAmount() private pure returns(uint) {\n return _MAX_TX_SIZE;\n }\n\n function getCycle() public view returns(uint) {\n return _infinityCycle;\n }\n\n function getBurnCycle() public view returns(uint) {\n return _tBurnCycle;\n }\n\n function getTradedCycle() public view returns(uint) {\n return _tTradeCycle;\n }\n\n function _rebase(uint supplyDelta) internal {\n _infinityCycle = _infinityCycle.add(1);\n _tTotal = _tTotal.add(supplyDelta);\n\n if (_infinityCycle > maxCycles) {\n _setFees(0);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/GSN/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "contracts/vaults/HodlerVaultSpace.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport '@openzeppelin/contracts/math/SafeMath.sol';\nimport \"../interfaces/IERC20.sol\";\n\ncontract HodlerVaultSpace is Ownable {\n using SafeMath for uint;\n\n /** Emitted when purchaseLP() is called to track INFINITY amounts */\n event InfinityTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address hodler,\n uint amount,\n uint eth,\n uint infinityTokens,\n uint timeStamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address hodler,\n uint amount,\n uint timestamp,\n uint donation\n );\n\n struct LPbatch {\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct HodlerVaultConfig {\n IERC20 infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool private locked;\n bool public forceUnlock;\n\n modifier lock {\n require(!locked, \"HodlerVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n HodlerVaultConfig public config;\n //Front end can loop through this and inspect if enough time has passed\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n receive() external payable {}\n\n function maxTokensToInvest() external view returns (uint) {\n uint totalETH = address(this).balance;\n if (totalETH == 0) {\n return 0;\n }\n\n uint infinityMaxAllowed;\n\n (uint reserve1, uint reserve2,) = config.tokenPair.getReserves();\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve2,\n reserve1\n );\n } else {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve1,\n reserve2\n );\n }\n\n return infinityMaxAllowed;\n }\n\n\n function getLockedLP(address hodler, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[hodler][position];\n return (hodler, batch.amount, batch.timestamp, batch.claimed);\n }\n\n function lockedLPLength(address hodler) external view returns (uint) {\n return lockedLP[hodler].length;\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n function seed(\n uint32 duration,\n IERC20 infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address payable feeReceiver,\n uint8 purchaseFee // INFINITY\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, 0, purchaseFee);\n setFeeReceiver(feeReceiver);\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"HodlerVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"HodlerVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n\n function setFeeReceiver(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"HodlerVaultSpace: fee receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function purchaseLP(uint amount) external lock {\n require(amount > 0, \"HodlerVaultSpace: INFINITY required to mint LP\");\n require(config.infinityToken.balanceOf(msg.sender) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens\");\n require(config.infinityToken.allowance(msg.sender, address(this)) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens allowance\");\n\n uint infinityFee = amount.mul(config.purchaseFee).div(100);\n uint netInfinity = amount.sub(infinityFee);\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint ethRequired;\n\n if (address(config.infinityToken) > address(config.weth)) {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve2,\n reserve1\n );\n } else {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve1,\n reserve2\n );\n }\n\n require(\n address(this).balance >= ethRequired,\n \"HodlerVaultSpace: insufficient ETH on HodlerVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: ethRequired }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, ethRequired);\n config.infinityToken.transferFrom(\n msg.sender,\n tokenPairAddress,\n netInfinity\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n if (infinityFee > 0 && config.feeReceiver != address(0)) {\n config.infinityToken.transferFrom(\n msg.sender,\n config.feeReceiver,\n infinityFee\n );\n }\n\n lockedLP[msg.sender].push(\n LPbatch({\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n msg.sender,\n liquidityCreated,\n ethRequired,\n netInfinity,\n block.timestamp\n );\n\n emit InfinityTransferred(msg.sender, netInfinity, infinityFee);\n }\n\n //pops latest LP if older than period\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"HodlerVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"HodlerVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"HodlerVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(msg.sender, batch.amount - donation),\n \"HodlerVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { + "content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { + "content": "pragma solidity >=0.5.0;\n\ninterface IWETH {\n function deposit() external payable;\n function transfer(address to, uint value) external returns (bool);\n function withdraw(uint) external;\n}\n" + }, + "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { + "content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { + "content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n" + }, + "contracts/vaults/PowerLiquidVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract PowerLiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n uint public constant MINIMUM_BUY_PRESSURE_AMOUNT = 1e14; //0,0001 ETH minimum\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"PowerLiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"PowerLiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"PowerLiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"PowerLiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"PowerLiquidVault: insufficient INFINITY tokens in PowerLiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in PowerLiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"PowerLiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"PowerLiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"PowerLiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"PowerLiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function buyPressure() external {\n uint weiBalance = address(this).balance;\n require(\n weiBalance > MINIMUM_BUY_PRESSURE_AMOUNT, \n \"PowerLiquidVault: ETH amount must be > 0,0001 ETH.\"\n );\n\n address[] memory path = new address[](2);\n path[0] = address(config.weth);\n path[1] = address(config.infinityToken);\n\n config.uniswapRouter.swapExactETHForTokens{ value: weiBalance }(\n 0,\n path,\n address(this),\n block.timestamp\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" + }, + "contracts/interfaces/IFeeDistributor.sol": { + "content": "interface IFeeDistributor {\n function distributeFees() external;\n}" + }, + "contracts/vaults/LiquidVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract LiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n \n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"LiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable feeReceiver,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setFeeReceiverAddress(feeReceiver);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"LiquidVault: ETH receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"LiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"LiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"LiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"LiquidVault: insufficient INFINITY tokens in LiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n config.feeReceiver.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in LiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"LiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"LiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"LiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"LiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" + }, + "contracts/vaults/AcceleratorVaultSpace.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract AcceleratorVaultSpace is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct AcceleratorVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable ethHodler;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"AcceleratorVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n AcceleratorVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable ethHodler,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setEthHodlerAddress(ethHodler);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() external onlyOwner {\n forceUnlock = true;\n }\n\n function setEthHodlerAddress(address payable ethHodler) public onlyOwner {\n require(\n ethHodler != address(0),\n \"AcceleratorVaultSpace: eth receiver is zero address\"\n );\n\n config.ethHodler = ethHodler;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"AcceleratorVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"AcceleratorVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"AcceleratorVaultSpace: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"AcceleratorVaultSpace: insufficient INFINITY tokens in AcceleratorVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n //ETH receiver is hodler vault here\n config.ethHodler.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send eth to match with INFINITY tokens in AcceleratorVaultSpace\n function purchaseLP() external payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"AcceleratorVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"AcceleratorVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"AcceleratorVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"AcceleratorVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) external view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}\n" + }, + "@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol": { + "content": "pragma solidity >=0.5.0;\n\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\n\n// library with helper methods for oracles that are concerned with computing average prices\nlibrary UniswapV2OracleLibrary {\n using FixedPoint for *;\n\n // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\n function currentBlockTimestamp() internal view returns (uint32) {\n return uint32(block.timestamp % 2 ** 32);\n }\n\n // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\n function currentCumulativePrices(\n address pair\n ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\n blockTimestamp = currentBlockTimestamp();\n price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\n price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\n\n // if time has elapsed since the last update on the pair, mock the accumulated price values\n (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\n if (blockTimestampLast != blockTimestamp) {\n // subtraction overflow is desired\n uint32 timeElapsed = blockTimestamp - blockTimestampLast;\n // addition overflow is desired\n // counterfactual\n price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\n // counterfactual\n price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\n }\n }\n}\n" + }, + "@uniswap/lib/contracts/libraries/FixedPoint.sol": { + "content": "pragma solidity >=0.4.0;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n // range: [0, 2**112 - 1]\n // resolution: 1 / 2**112\n struct uq112x112 {\n uint224 _x;\n }\n\n // range: [0, 2**144 - 1]\n // resolution: 1 / 2**112\n struct uq144x112 {\n uint _x;\n }\n\n uint8 private constant RESOLUTION = 112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 x) internal pure returns (uq112x112 memory) {\n return uq112x112(uint224(x) << RESOLUTION);\n }\n\n // encodes a uint144 as a UQ144x112\n function encode144(uint144 x) internal pure returns (uq144x112 memory) {\n return uq144x112(uint256(x) << RESOLUTION);\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) {\n require(x != 0, 'FixedPoint: DIV_BY_ZERO');\n return uq112x112(self._x / uint224(x));\n }\n\n // multiply a UQ112x112 by a uint, returning a UQ144x112\n // reverts on overflow\n function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) {\n uint z;\n require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), \"FixedPoint: MULTIPLICATION_OVERFLOW\");\n return uq144x112(z);\n }\n\n // returns a UQ112x112 which represents the ratio of the numerator to the denominator\n // equivalent to encode(numerator).div(denominator)\n function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\n require(denominator > 0, \"FixedPoint: DIV_BY_ZERO\");\n return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\n }\n\n // decode a UQ112x112 into a uint112 by truncating after the radix point\n function decode(uq112x112 memory self) internal pure returns (uint112) {\n return uint112(self._x >> RESOLUTION);\n }\n\n // decode a UQ144x112 into a uint144 by truncating after the radix point\n function decode144(uq144x112 memory self) internal pure returns (uint144) {\n return uint144(self._x >> RESOLUTION);\n }\n}\n" + }, + "contracts/PriceOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\nimport '@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol';\nimport \"./interfaces/IERC20.sol\";\n\n\ncontract PriceOracle {\n using FixedPoint for *;\n IUniswapV2Pair public immutable pair;\n uint public multiplier;\n uint private priceLast;\n uint public priceCumulativeLast;\n uint32 public blockTimestampLast;\n\n address public tokenA;\n address public tokenB;\n address public token0;\n\n constructor(IUniswapV2Pair _pair, address _tokenA, address _tokenB) public {\n pair = _pair;\n tokenA = _tokenA;\n tokenB = _tokenB;\n (token0, ) = _tokenA < _tokenB\n ? (_tokenA, _tokenB)\n : (_tokenB, _tokenA);\n\n if(token0 == _tokenA) {\n priceCumulativeLast = _pair.price0CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token0()).decimals());\n } else {\n priceCumulativeLast = _pair.price1CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token1()).decimals());\n }\n }\n function update() public returns(uint) {\n uint112 reserve0;\n uint112 reserve1;\n (reserve0, reserve1, blockTimestampLast) = pair.getReserves();\n require(reserve0 != 0 && reserve1 != 0, 'PriceOracle: NO_RESERVES');\n\n uint _priceCumulative;\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n uint _price;\n if (_blockTimestamp != _blockTimestampLast) {\n _price = FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) /\n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n priceLast = _price;\n priceCumulativeLast = _priceCumulative;\n blockTimestampLast = _blockTimestamp;\n } else {\n _price = priceLast;\n }\n return _price;\n }\n // note this will always return 0 before update has been called successfully for the first time.\n function consult() external view returns (uint) {\n uint _priceCumulative;\n\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n // most recent price is already calculated.\n if (_blockTimestamp == _blockTimestampLast) {\n return priceLast;\n }\n return FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / \n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n }\n function updateAndConsult() external returns (uint) {\n return update();\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/deployments/hardhat/.chainId b/deployments/hardhat/.chainId new file mode 100644 index 0000000..027791f --- /dev/null +++ b/deployments/hardhat/.chainId @@ -0,0 +1 @@ +31337 \ No newline at end of file diff --git a/deployments/hardhat/FeeDistributor.json b/deployments/hardhat/FeeDistributor.json new file mode 100644 index 0000000..6de222d --- /dev/null +++ b/deployments/hardhat/FeeDistributor.json @@ -0,0 +1,304 @@ +{ + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "distributeFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "infinity", + "outputs": [ + { + "internalType": "contract IInfinityProtocol", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "recipients", + "outputs": [ + { + "internalType": "address", + "name": "liquidVault", + "type": "address" + }, + { + "internalType": "address", + "name": "secondaryAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidVaultShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "burnPercentage", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_infinity", + "type": "address" + }, + { + "internalType": "address", + "name": "_vault", + "type": "address" + }, + { + "internalType": "address", + "name": "_secondaryAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_liquidVaultShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_burnPercentage", + "type": "uint256" + } + ], + "name": "seed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", + "receipt": { + "to": null, + "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "contractAddress": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "transactionIndex": 0, + "gasUsed": "676274", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000040200000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000100000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000400000000000000000", + "blockHash": "0x502881f64a831c7c85394e15a2216414fd2b79052495079a65e46e70ee6e45f2", + "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 3, + "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x502881f64a831c7c85394e15a2216414fd2b79052495079a65e46e70ee6e45f2" + } + ], + "blockNumber": 3, + "cumulativeGasUsed": "676274", + "status": 1, + "byzantium": true + }, + "args": [], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"distributeFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinity\",\"outputs\":[{\"internalType\":\"contract IInfinityProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipients\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"liquidVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"burnPercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_infinity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_burnPercentage\",\"type\":\"uint256\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeDistributor.sol\":\"FeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/FeeDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract FeeDistributor is Ownable {\\n using SafeMath for uint;\\n\\n struct FeeRecipient {\\n address liquidVault;\\n address secondaryAddress;\\n uint256 liquidVaultShare; //percentage between 0 and 100\\n uint256 burnPercentage;\\n }\\n \\n IInfinityProtocol public infinity;\\n FeeRecipient public recipients;\\n\\n bool public initialized;\\n\\n uint private constant MINIMUM_AMOUNT = 1e8;\\n\\n modifier seeded {\\n require(\\n initialized,\\n \\\"FeeDistributor: Fees cannot be distributed until Distributor seeded.\\\"\\n );\\n _;\\n }\\n\\n function seed(\\n address _infinity,\\n address _vault,\\n address _secondaryAddress,\\n uint _liquidVaultShare,\\n uint _burnPercentage\\n ) external onlyOwner {\\n require(\\n _liquidVaultShare.add(_burnPercentage) <= 100,\\n \\\"FeeDistributor: liquidVault + burnPercentage incorrect sets\\\"\\n );\\n infinity = IInfinityProtocol(_infinity);\\n recipients.liquidVault = _vault;\\n recipients.secondaryAddress = _secondaryAddress;\\n recipients.liquidVaultShare = _liquidVaultShare;\\n recipients.burnPercentage = _burnPercentage;\\n initialized = true;\\n }\\n\\n function distributeFees() external seeded {\\n uint balance = infinity.balanceOf(address(this));\\n\\n if (balance < MINIMUM_AMOUNT) {\\n return;\\n }\\n\\n uint liquidShare;\\n uint burningShare;\\n uint secondaryShare;\\n\\n if (recipients.liquidVaultShare > 0) {\\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\\n\\n require(\\n infinity.transfer(recipients.liquidVault, liquidShare),\\n \\\"FeeDistributor: transfer to LiquidVault failed\\\"\\n );\\n }\\n\\n if (recipients.burnPercentage > 0) {\\n burningShare = recipients.burnPercentage.mul(balance).div(100);\\n infinity.burn(burningShare);\\n }\\n\\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\\n if (secondaryShare > 0) {\\n require(\\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\\n \\\"FeeDistributor: transfer to the secondary address failed\\\"\\n );\\n }\\n }\\n}\",\"keccak256\":\"0x98e4d2c721c9ac99ab5162a3b5d2f14ee03f8a1ea29db1c6fb3237c648726d5a\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b610ad08061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1749, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "infinity", + "offset": 0, + "slot": "1", + "type": "t_contract(IInfinityProtocol)4419" + }, + { + "astId": 1751, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "recipients", + "offset": 0, + "slot": "2", + "type": "t_struct(FeeRecipient)1747_storage" + }, + { + "astId": 1753, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "initialized", + "offset": 0, + "slot": "6", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IInfinityProtocol)4419": { + "encoding": "inplace", + "label": "contract IInfinityProtocol", + "numberOfBytes": "20" + }, + "t_struct(FeeRecipient)1747_storage": { + "encoding": "inplace", + "label": "struct FeeDistributor.FeeRecipient", + "members": [ + { + "astId": 1740, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "liquidVault", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1742, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "secondaryAddress", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 1744, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "liquidVaultShare", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 1746, + "contract": "contracts/FeeDistributor.sol:FeeDistributor", + "label": "burnPercentage", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/deployments/hardhat/InfinityProtocol.json b/deployments/hardhat/InfinityProtocol.json new file mode 100644 index 0000000..2f3e3c9 --- /dev/null +++ b/deployments/hardhat/InfinityProtocol.json @@ -0,0 +1,917 @@ +{ + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "excludeAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeReceiver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBurnCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBurnFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTradedCycle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "includeAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isExcluded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxCycles", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "transferAmount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "deductTransferFee", + "type": "bool" + } + ], + "name": "reflectionFromToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "setFeeReceiver", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setInitialFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxCycles", + "type": "uint256" + } + ], + "name": "setMaxCycles", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rAmount", + "type": "uint256" + } + ], + "name": "tokenFromReflection", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBurnWithFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", + "receipt": { + "to": null, + "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "contractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "transactionIndex": 0, + "gasUsed": "2279121", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000040020000000000000100000800000000000000000000000010000000400000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000042000000200000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3", + "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 1, + "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3" + }, + { + "transactionIndex": 0, + "blockNumber": 1, + "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ], + "data": "0x000000000000000000000000000000000000000000000000002386f26fc10000", + "logIndex": 1, + "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3" + } + ], + "blockNumber": 1, + "cumulativeGasUsed": "2279121", + "status": 1, + "byzantium": true + }, + "args": [ + "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121" + ], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"excludeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTradedCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"includeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isExcluded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxCycles\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"transferAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"deductTransferFee\",\"type\":\"bool\"}],\"name\":\"reflectionFromToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setInitialFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxCycles\",\"type\":\"uint256\"}],\"name\":\"setMaxCycles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"}],\"name\":\"tokenFromReflection\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurnWithFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/InfinityProtocol.sol\":\"InfinityProtocol\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\",\"keccak256\":\"0x9486045e189facd2e868ece35249872598ef03f1087fb6fa4d1161842daa2287\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/InfinityProtocol.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\nimport \\\"@openzeppelin/contracts/GSN/Context.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\\n\\n using SafeMath for uint;\\n using Address for address;\\n\\n mapping (address => uint) private _rOwned;\\n mapping (address => uint) private _tOwned;\\n mapping (address => mapping (address => uint)) private _allowances;\\n\\n mapping (address => bool) private _isExcluded;\\n address[] private _excluded;\\n address public feeReceiver;\\n address public router;\\n uint public maxCycles;\\n\\n string private constant _NAME = \\\"infinityprotocol.io\\\";\\n string private constant _SYMBOL = \\\"INFINITY\\\";\\n uint8 private constant _DECIMALS = 8;\\n\\n uint private constant _MAX = ~uint(0);\\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\\n uint private constant _GRANULARITY = 100;\\n\\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\\n\\n uint private _tFeeTotal;\\n uint private _tBurnTotal;\\n uint private _infinityCycle;\\n\\n uint private _tTradeCycle;\\n uint private _tBurnCycle;\\n\\n uint private _BURN_FEE;\\n uint private _FOT_FEE;\\n bool private _feeSet;\\n\\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\\n\\n constructor (address _router) public {\\n _rOwned[_msgSender()] = _rTotal;\\n router = _router;\\n setMaxCycles(500);\\n emit Transfer(address(0), _msgSender(), _tTotal);\\n }\\n\\n function name() public pure returns (string memory) {\\n return _NAME;\\n }\\n\\n function symbol() public pure returns (string memory) {\\n return _SYMBOL;\\n }\\n\\n function decimals() public pure override returns (uint8) {\\n return _DECIMALS;\\n }\\n\\n function totalSupply() public view override returns (uint) {\\n return _tTotal;\\n }\\n\\n function balanceOf(address account) public view override returns (uint) {\\n if (_isExcluded[account]) return _tOwned[account];\\n return tokenFromReflection(_rOwned[account]);\\n }\\n\\n function transfer(address recipient, uint amount) public override returns (bool) {\\n _transfer(_msgSender(), recipient, amount);\\n return true;\\n }\\n\\n function allowance(address owner, address spender) public view override returns (uint) {\\n return _allowances[owner][spender];\\n }\\n\\n function approve(address spender, uint amount) public override returns (bool) {\\n _approve(_msgSender(), spender, amount);\\n return true;\\n }\\n\\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\\n _transfer(sender, recipient, amount);\\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n return true;\\n }\\n\\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n return true;\\n }\\n\\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n return true;\\n }\\n\\n function isExcluded(address account) public view returns (bool) {\\n return _isExcluded[account];\\n }\\n\\n function totalFees() public view returns (uint) {\\n return _tFeeTotal;\\n }\\n\\n function totalBurn() public view returns (uint) {\\n return _tBurnTotal;\\n }\\n\\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\\n require(receiver != address(0), \\\"Zero address not allowed\\\");\\n feeReceiver = receiver;\\n return true;\\n }\\n\\n function totalBurnWithFees() public view returns (uint) {\\n return _tBurnTotal.add(_tFeeTotal);\\n }\\n\\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\\n require(transferAmount <= _tTotal, \\\"Amount must be less than supply\\\");\\n if (!deductTransferFee) {\\n (uint rAmount,,,,,) = _getValues(transferAmount);\\n return rAmount;\\n } else {\\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\\n return rTransferAmount;\\n }\\n }\\n\\n function tokenFromReflection(uint rAmount) public view returns(uint) {\\n require(rAmount <= _rTotal, \\\"Amount must be less than total reflections\\\");\\n uint currentRate = _getRate();\\n return rAmount.div(currentRate);\\n }\\n\\n function excludeAccount(address account) external onlyOwner() {\\n require(!_isExcluded[account], \\\"Account is already excluded\\\");\\n require(account != router, 'Not allowed to exclude router');\\n require(account != feeReceiver, \\\"Can not exclude fee receiver\\\");\\n if (_rOwned[account] > 0) {\\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\\n }\\n _isExcluded[account] = true;\\n _excluded.push(account);\\n }\\n\\n function includeAccount(address account) external onlyOwner() {\\n require(_isExcluded[account], \\\"Account is already included\\\");\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_excluded[i] == account) {\\n _excluded[i] = _excluded[_excluded.length - 1];\\n _tOwned[account] = 0;\\n _isExcluded[account] = false;\\n _excluded.pop();\\n break;\\n }\\n }\\n }\\n\\n function _approve(address owner, address spender, uint amount) private {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n function _transfer(address sender, address recipient, uint amount) private {\\n require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n require(amount > 0, \\\"Transfer amount must be greater than zero\\\");\\n\\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\\n // reaches its final phase, in which no further supply elasticity will take place\\n // and fees will stay at 0\\n\\n if (sender != owner() && recipient != owner())\\n require(amount <= _MAX_TX_SIZE, \\\"Transfer amount exceeds the maxTxAmount.\\\");\\n\\n // @dev 50% fee is burn fee, 50% is fot\\n if (_BURN_FEE >= 250) {\\n\\n _tTradeCycle = _tTradeCycle.add(amount);\\n\\n\\n // @dev adjust current burnFee/fotFee depending on the traded tokens\\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\\n _setFees(500);\\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\\n _setFees(550);\\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\\n _setFees(600);\\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\\n _setFees(650);\\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\\n _setFees(700);\\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\\n _setFees(750);\\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\\n _setFees(800);\\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\\n _setFees(850);\\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\\n _setFees(900);\\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\\n _setFees(950);\\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\\n _setFees(1000);\\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\\n _setFees(1050);\\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\\n _setFees(1100);\\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\\n _setFees(1150);\\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\\n _setFees(1200);\\n }\\n }\\n\\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferFromExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferToExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferStandard(sender, recipient, amount);\\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferBothExcluded(sender, recipient, amount);\\n } else {\\n _transferStandard(sender, recipient, amount);\\n }\\n }\\n\\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\\n _rTotal = _rTotal.sub(rBurn);\\n _tFeeTotal = _tFeeTotal.add(transferFee);\\n _tBurnTotal = _tBurnTotal.add(transferBurn);\\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\\n _tTotal = _tTotal.sub(transferBurn);\\n\\n\\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \\n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\\n //set rebase percent\\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\\n _tTradeCycle = 0;\\n _setFees(500);\\n\\n _rebase(_tRebaseDelta);\\n }\\n }\\n\\n function burn(uint amount) external override returns (bool) {\\n address sender = _msgSender();\\n uint balance = balanceOf(sender);\\n require(balance >= amount, \\\"Cannot burn more than on balance\\\");\\n require(sender == feeReceiver, \\\"Only feeReceiver\\\");\\n\\n uint rBurn = amount.mul(_getRate());\\n _rTotal = _rTotal.sub(rBurn);\\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\\n\\n _tBurnTotal = _tBurnTotal.add(amount);\\n _tTotal = _tTotal.sub(amount);\\n\\n emit Transfer(sender, address(0), amount);\\n return true;\\n }\\n\\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\\n return (tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\\n uint currentRate = _getRate();\\n uint rAmount = transferAmount.mul(currentRate);\\n uint rFee = transferFee.mul(currentRate);\\n uint rBurn = transferBurn.mul(currentRate);\\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\\n return (rAmount, rTransferAmount, rFee);\\n }\\n\\n function _getRate() private view returns(uint) {\\n (uint rSupply, uint tSupply) = _getCurrentSupply();\\n return rSupply.div(tSupply);\\n }\\n\\n function _getCurrentSupply() private view returns(uint, uint) {\\n uint rSupply = _rTotal;\\n uint tSupply = _tTotal;\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\\n }\\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\\n return (rSupply, tSupply);\\n }\\n\\n\\n function _setFees(uint fee) private {\\n require(fee >= 0 && fee <= 1500, \\\"fee should be in 0 - 15%\\\");\\n if (_BURN_FEE == fee.div(2)) {\\n return;\\n }\\n\\n _BURN_FEE = fee.div(2);\\n _FOT_FEE = fee.div(2);\\n }\\n\\n function setInitialFee() external onlyOwner() {\\n require(!_feeSet, \\\"Initial fee already set\\\");\\n _setFees(500);\\n _feeSet = true;\\n }\\n\\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\\n require(_maxCycles >= _infinityCycle, \\\"Can not set more than current cycle\\\");\\n maxCycles = _maxCycles;\\n }\\n\\n function getBurnFee() public view returns(uint) {\\n return _BURN_FEE;\\n }\\n\\n function getFee() public view returns(uint) {\\n return _FOT_FEE;\\n }\\n\\n function _getMaxTxAmount() private pure returns(uint) {\\n return _MAX_TX_SIZE;\\n }\\n\\n function getCycle() public view returns(uint) {\\n return _infinityCycle;\\n }\\n\\n function getBurnCycle() public view returns(uint) {\\n return _tBurnCycle;\\n }\\n\\n function getTradedCycle() public view returns(uint) {\\n return _tTradeCycle;\\n }\\n\\n function _rebase(uint supplyDelta) internal {\\n _infinityCycle = _infinityCycle.add(1);\\n _tTotal = _tTotal.add(supplyDelta);\\n\\n if (_infinityCycle > maxCycles) {\\n _setFees(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x64cca0b72006a7b6178354fc1ede3f320e437204b05cea400fc0b63ba2680e42\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", + "bytecode": "0x6080604052662386f26fc10000600955660e3d2cfe61ffff19600a553480156200002857600080fd5b50604051620027f6380380620027f6833981810160405260208110156200004e57600080fd5b505160006200005c62000158565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460016000620000b762000158565b6001600160a01b039081168252602082019290925260400160002091909155600780546001600160a01b031916918316919091179055620000fa6101f46200015c565b6200010462000158565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200022c565b3390565b6200016662000158565b6001600160a01b0316620001796200021d565b6001600160a01b031614620001d5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d54811015620002185760405162461bcd60e51b8152600401808060200182810382526023815260200180620027d36023913960400191505060405180910390fd5b600855565b6000546001600160a01b031690565b612597806200023c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c6343000704003343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c65", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." + }, + "approve(address,uint256)": { + "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." + }, + "balanceOf(address)": { + "details": "Returns the amount of tokens owned by `account`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "totalSupply()": { + "details": "Returns the amount of tokens in existence." + }, + "transfer(address,uint256)": { + "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferFrom(address,address,uint256)": { + "details": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1955, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_rOwned", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1959, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tOwned", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1965, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_allowances", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 1969, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_isExcluded", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 1972, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_excluded", + "offset": 0, + "slot": "5", + "type": "t_array(t_address)dyn_storage" + }, + { + "astId": 1974, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "feeReceiver", + "offset": 0, + "slot": "6", + "type": "t_address" + }, + { + "astId": 1976, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "router", + "offset": 0, + "slot": "7", + "type": "t_address" + }, + { + "astId": 1978, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "maxCycles", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 2010, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tTotal", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 2019, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_rTotal", + "offset": 0, + "slot": "10", + "type": "t_uint256" + }, + { + "astId": 2021, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tFeeTotal", + "offset": 0, + "slot": "11", + "type": "t_uint256" + }, + { + "astId": 2023, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tBurnTotal", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 2025, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_infinityCycle", + "offset": 0, + "slot": "13", + "type": "t_uint256" + }, + { + "astId": 2027, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tTradeCycle", + "offset": 0, + "slot": "14", + "type": "t_uint256" + }, + { + "astId": 2029, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_tBurnCycle", + "offset": 0, + "slot": "15", + "type": "t_uint256" + }, + { + "astId": 2031, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_BURN_FEE", + "offset": 0, + "slot": "16", + "type": "t_uint256" + }, + { + "astId": 2033, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_FOT_FEE", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 2035, + "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", + "label": "_feeSet", + "offset": 0, + "slot": "18", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/deployments/hardhat/LiquidVault.json b/deployments/hardhat/LiquidVault.json new file mode 100644 index 0000000..9d6ef30 --- /dev/null +++ b/deployments/hardhat/LiquidVault.json @@ -0,0 +1,773 @@ +{ + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "percentageAmount", + "type": "uint256" + } + ], + "name": "EthTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "claimed", + "type": "bool" + } + ], + "name": "LPClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eth", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "infinityToken", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "LPQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "claimLP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "config", + "outputs": [ + { + "internalType": "address", + "name": "infinityToken", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapRouter", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Pair", + "name": "tokenPair", + "type": "address" + }, + { + "internalType": "contract IFeeDistributor", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "address", + "name": "weth", + "type": "address" + }, + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + }, + { + "internalType": "uint32", + "name": "stakeDuration", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enableLPForceUnlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "forceUnlock", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "position", + "type": "uint256" + } + ], + "name": "getLockedLP", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakeDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lockedLP", + "outputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "claimed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + } + ], + "name": "lockedLPLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "purchaseLP", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "purchaseLPFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "queueCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "duration", + "type": "uint32" + }, + { + "internalType": "address", + "name": "infinityToken", + "type": "address" + }, + { + "internalType": "address", + "name": "uniswapPair", + "type": "address" + }, + { + "internalType": "address", + "name": "uniswapRouter", + "type": "address" + }, + { + "internalType": "address", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "name": "seed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "feeReceiver", + "type": "address" + } + ], + "name": "setFeeReceiverAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "duration", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "donationShare", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "purchaseFee", + "type": "uint8" + } + ], + "name": "setParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", + "receipt": { + "to": null, + "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "contractAddress": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "transactionIndex": 0, + "gasUsed": "1401618", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000100000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000002000000000000000000020000000000000000000000000000000000000000000000000800000000000000000", + "blockHash": "0x5e13b7c67d72446f0bb91d9ae5c23ce513f2fe663d2158c75861e41e18a0ac41", + "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 2, + "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x5e13b7c67d72446f0bb91d9ae5c23ce513f2fe663d2158c75861e41e18a0ac41" + } + ], + "blockNumber": 2, + "cumulativeGasUsed": "1401618", + "status": 1, + "byzantium": true + }, + "args": [], + "solcInputHash": "50935558cf5835f525f697d3157617bd", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"percentageAmount\",\"type\":\"uint256\"}],\"name\":\"EthTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"name\":\"LPClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"infinityToken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"LPQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimLP\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Pair\",\"name\":\"tokenPair\",\"type\":\"address\"},{\"internalType\":\"contract IFeeDistributor\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakeDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableLPForceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"getLockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"lockedLPLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"purchaseLP\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"purchaseLPFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"queueCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapPair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiverAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"setParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"EthTransferred(address,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called to track ETH amounts \"},\"LPClaimed(address,uint256,uint256,uint256,bool)\":{\"notice\":\"Emitted when claimLP() is called \"},\"LPQueued(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called and LP tokens minted \"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/vaults/LiquidVault.sol\":\"LiquidVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IUniswapV2Pair {\\n event Approval(address indexed owner, address indexed spender, uint value);\\n event Transfer(address indexed from, address indexed to, uint value);\\n\\n function name() external pure returns (string memory);\\n function symbol() external pure returns (string memory);\\n function decimals() external pure returns (uint8);\\n function totalSupply() external view returns (uint);\\n function balanceOf(address owner) external view returns (uint);\\n function allowance(address owner, address spender) external view returns (uint);\\n\\n function approve(address spender, uint value) external returns (bool);\\n function transfer(address to, uint value) external returns (bool);\\n function transferFrom(address from, address to, uint value) external returns (bool);\\n\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n function PERMIT_TYPEHASH() external pure returns (bytes32);\\n function nonces(address owner) external view returns (uint);\\n\\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\\n\\n event Mint(address indexed sender, uint amount0, uint amount1);\\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\\n event Swap(\\n address indexed sender,\\n uint amount0In,\\n uint amount1In,\\n uint amount0Out,\\n uint amount1Out,\\n address indexed to\\n );\\n event Sync(uint112 reserve0, uint112 reserve1);\\n\\n function MINIMUM_LIQUIDITY() external pure returns (uint);\\n function factory() external view returns (address);\\n function token0() external view returns (address);\\n function token1() external view returns (address);\\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\n function price0CumulativeLast() external view returns (uint);\\n function price1CumulativeLast() external view returns (uint);\\n function kLast() external view returns (uint);\\n\\n function mint(address to) external returns (uint liquidity);\\n function burn(address to) external returns (uint amount0, uint amount1);\\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\\n function skim(address to) external;\\n function sync() external;\\n\\n function initialize(address, address) external;\\n}\\n\",\"keccak256\":\"0x7c9bc70e5996c763e02ff38905282bc24fb242b0ef2519a003b36824fc524a4b\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\ninterface IUniswapV2Router01 {\\n function factory() external pure returns (address);\\n function WETH() external pure returns (address);\\n\\n function addLiquidity(\\n address tokenA,\\n address tokenB,\\n uint amountADesired,\\n uint amountBDesired,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB, uint liquidity);\\n function addLiquidityETH(\\n address token,\\n uint amountTokenDesired,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\\n function removeLiquidity(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETH(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountToken, uint amountETH);\\n function removeLiquidityWithPermit(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETHWithPermit(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountToken, uint amountETH);\\n function swapExactTokensForTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapTokensForExactTokens(\\n uint amountOut,\\n uint amountInMax,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n\\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\\n}\\n\",\"keccak256\":\"0x8a3c5c449d4b7cd76513ed6995f4b86e4a86f222c770f8442f5fc128ce29b4d2\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\nimport './IUniswapV2Router01.sol';\\n\\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\\n function removeLiquidityETHSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountETH);\\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountETH);\\n\\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external payable;\\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n}\\n\",\"keccak256\":\"0x744e30c133bd0f7ca9e7163433cf6d72f45c6bb1508c2c9c02f1a6db796ae59d\"},\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IWETH {\\n function deposit() external payable;\\n function transfer(address to, uint value) external returns (bool);\\n function withdraw(uint) external;\\n}\\n\",\"keccak256\":\"0xfc10758fd8dba790c39468dccd358cb7cef06ae7c4781832cc7aa76f91f167e6\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IFeeDistributor.sol\":{\"content\":\"interface IFeeDistributor {\\n function distributeFees() external;\\n}\",\"keccak256\":\"0x8cace30edd60bc477fb3fe56655259d416d12002de3ce4e25505088334365eb2\"},\"contracts/vaults/LiquidVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../interfaces/IERC20.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\\\";\\nimport \\\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\\\";\\nimport \\\"../interfaces/IFeeDistributor.sol\\\";\\n\\ncontract LiquidVault is Ownable {\\n /** Emitted when purchaseLP() is called to track ETH amounts */\\n event EthTransferred(\\n address from,\\n uint amount,\\n uint percentageAmount\\n );\\n\\n /** Emitted when purchaseLP() is called and LP tokens minted */\\n event LPQueued(\\n address holder,\\n uint amount,\\n uint eth,\\n uint infinityToken,\\n uint timestamp\\n );\\n\\n /** Emitted when claimLP() is called */\\n event LPClaimed(\\n address holder,\\n uint amount,\\n uint timestamp,\\n uint exitFee,\\n bool claimed\\n );\\n\\n struct LPbatch {\\n address holder;\\n uint amount;\\n uint timestamp;\\n bool claimed;\\n }\\n\\n struct LiquidVaultConfig {\\n address infinityToken;\\n IUniswapV2Router02 uniswapRouter;\\n IUniswapV2Pair tokenPair;\\n IFeeDistributor feeDistributor;\\n address weth;\\n address payable feeReceiver;\\n uint32 stakeDuration;\\n uint8 donationShare; //0-100\\n uint8 purchaseFee; //0-100\\n }\\n \\n bool public forceUnlock;\\n bool private locked;\\n\\n modifier lock {\\n require(!locked, \\\"LiquidVault: reentrancy violation\\\");\\n locked = true;\\n _;\\n locked = false;\\n }\\n\\n LiquidVaultConfig public config;\\n\\n mapping(address => LPbatch[]) public lockedLP;\\n mapping(address => uint) public queueCounter;\\n\\n function seed(\\n uint32 duration,\\n address infinityToken,\\n address uniswapPair,\\n address uniswapRouter,\\n address feeDistributor,\\n address payable feeReceiver,\\n uint8 donationShare, // LP Token\\n uint8 purchaseFee // ETH\\n ) public onlyOwner {\\n config.infinityToken = infinityToken;\\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\\n config.tokenPair = IUniswapV2Pair(uniswapPair);\\n config.feeDistributor = IFeeDistributor(feeDistributor);\\n config.weth = config.uniswapRouter.WETH();\\n setFeeReceiverAddress(feeReceiver);\\n setParameters(duration, donationShare, purchaseFee);\\n }\\n\\n function getStakeDuration() public view returns (uint) {\\n return forceUnlock ? 0 : config.stakeDuration;\\n }\\n\\n // Could not be canceled if activated\\n function enableLPForceUnlock() public onlyOwner {\\n forceUnlock = true;\\n }\\n\\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\\n require(\\n feeReceiver != address(0),\\n \\\"LiquidVault: ETH receiver is zero address\\\"\\n );\\n\\n config.feeReceiver = feeReceiver;\\n }\\n\\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\\n public\\n onlyOwner\\n {\\n require(\\n donationShare <= 100,\\n \\\"LiquidVault: donation share % between 0 and 100\\\"\\n );\\n require(\\n purchaseFee <= 100,\\n \\\"LiquidVault: purchase fee share % between 0 and 100\\\"\\n );\\n\\n config.stakeDuration = duration * 1 days;\\n config.donationShare = donationShare;\\n config.purchaseFee = purchaseFee;\\n }\\n\\n function purchaseLPFor(address beneficiary) public payable lock {\\n config.feeDistributor.distributeFees();\\n require(msg.value > 0, \\\"LiquidVault: ETH required to mint INFINITY LP\\\");\\n\\n uint feeValue = (config.purchaseFee * msg.value) / 100;\\n uint exchangeValue = msg.value - feeValue;\\n\\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\\n\\n uint infinityRequired;\\n\\n if (address(config.infinityToken) < address(config.weth)) {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve2,\\n reserve1\\n );\\n } else {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve1,\\n reserve2\\n );\\n }\\n\\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\\n require(\\n balance >= infinityRequired,\\n \\\"LiquidVault: insufficient INFINITY tokens in LiquidVault\\\"\\n );\\n\\n IWETH(config.weth).deposit{ value: exchangeValue }();\\n address tokenPairAddress = address(config.tokenPair);\\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\\n IERC20(config.infinityToken).transfer(\\n tokenPairAddress,\\n infinityRequired\\n );\\n\\n uint liquidityCreated = config.tokenPair.mint(address(this));\\n config.feeReceiver.transfer(feeValue);\\n\\n lockedLP[beneficiary].push(\\n LPbatch({\\n holder: beneficiary,\\n amount: liquidityCreated,\\n timestamp: block.timestamp,\\n claimed: false\\n })\\n );\\n\\n emit LPQueued(\\n beneficiary,\\n liquidityCreated,\\n exchangeValue,\\n infinityRequired,\\n block.timestamp\\n );\\n\\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\\n }\\n\\n //send ETH to match with INFINITY tokens in LiquidVault\\n function purchaseLP() public payable {\\n purchaseLPFor(msg.sender);\\n }\\n\\n function claimLP() public {\\n uint next = queueCounter[msg.sender];\\n require(\\n next < lockedLP[msg.sender].length,\\n \\\"LiquidVault: nothing to claim.\\\"\\n );\\n LPbatch storage batch = lockedLP[msg.sender][next];\\n require(\\n block.timestamp - batch.timestamp > getStakeDuration(),\\n \\\"LiquidVault: LP still locked.\\\"\\n );\\n next++;\\n queueCounter[msg.sender] = next;\\n uint donation = (config.donationShare * batch.amount) / 100;\\n batch.claimed = true;\\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\\n require(\\n config.tokenPair.transfer(address(0), donation),\\n \\\"LiquidVault: donation transfer failed in LP claim.\\\"\\n );\\n require(\\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\\n \\\"LiquidVault: transfer failed in LP claim.\\\"\\n );\\n }\\n\\n function lockedLPLength(address holder) public view returns (uint) {\\n return lockedLP[holder].length;\\n }\\n\\n function getLockedLP(address holder, uint position)\\n public\\n view\\n returns (\\n address,\\n uint,\\n uint,\\n bool\\n )\\n {\\n LPbatch memory batch = lockedLP[holder][position];\\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\\n }\\n}\",\"keccak256\":\"0xf470245efe80b6887c8d5f7a5408c46fca8b4cb1cfcaac363281ce26c031694c\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6117ef8061007d6000396000f3fe6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "EthTransferred(address,uint256,uint256)": { + "notice": "Emitted when purchaseLP() is called to track ETH amounts " + }, + "LPClaimed(address,uint256,uint256,uint256,bool)": { + "notice": "Emitted when claimLP() is called " + }, + "LPQueued(address,uint256,uint256,uint256,uint256)": { + "notice": "Emitted when purchaseLP() is called and LP tokens minted " + } + }, + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 10, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5821, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "forceUnlock", + "offset": 20, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 5823, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "locked", + "offset": 21, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 5843, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "config", + "offset": 0, + "slot": "1", + "type": "t_struct(LiquidVaultConfig)5819_storage" + }, + { + "astId": 5848, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "lockedLP", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)" + }, + { + "astId": 5852, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "queueCounter", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_address,t_uint256)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(LPbatch)5800_storage)dyn_storage": { + "base": "t_struct(LPbatch)5800_storage", + "encoding": "dynamic_array", + "label": "struct LiquidVault.LPbatch[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IFeeDistributor)4407": { + "encoding": "inplace", + "label": "contract IFeeDistributor", + "numberOfBytes": "20" + }, + "t_contract(IUniswapV2Pair)1205": { + "encoding": "inplace", + "label": "contract IUniswapV2Pair", + "numberOfBytes": "20" + }, + "t_contract(IUniswapV2Router02)1601": { + "encoding": "inplace", + "label": "contract IUniswapV2Router02", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LiquidVault.LPbatch[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(LPbatch)5800_storage)dyn_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(LPbatch)5800_storage": { + "encoding": "inplace", + "label": "struct LiquidVault.LPbatch", + "members": [ + { + "astId": 5793, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "holder", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5795, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "amount", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 5797, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "timestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 5799, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "claimed", + "offset": 0, + "slot": "3", + "type": "t_bool" + } + ], + "numberOfBytes": "128" + }, + "t_struct(LiquidVaultConfig)5819_storage": { + "encoding": "inplace", + "label": "struct LiquidVault.LiquidVaultConfig", + "members": [ + { + "astId": 5802, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "infinityToken", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5804, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "uniswapRouter", + "offset": 0, + "slot": "1", + "type": "t_contract(IUniswapV2Router02)1601" + }, + { + "astId": 5806, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "tokenPair", + "offset": 0, + "slot": "2", + "type": "t_contract(IUniswapV2Pair)1205" + }, + { + "astId": 5808, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "feeDistributor", + "offset": 0, + "slot": "3", + "type": "t_contract(IFeeDistributor)4407" + }, + { + "astId": 5810, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "weth", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 5812, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "feeReceiver", + "offset": 0, + "slot": "5", + "type": "t_address_payable" + }, + { + "astId": 5814, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "stakeDuration", + "offset": 20, + "slot": "5", + "type": "t_uint32" + }, + { + "astId": 5816, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "donationShare", + "offset": 24, + "slot": "5", + "type": "t_uint8" + }, + { + "astId": 5818, + "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", + "label": "purchaseFee", + "offset": 25, + "slot": "5", + "type": "t_uint8" + } + ], + "numberOfBytes": "192" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json b/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json new file mode 100644 index 0000000..dd31a68 --- /dev/null +++ b/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json @@ -0,0 +1,95 @@ +{ + "language": "Solidity", + "sources": { + "contracts/FeeDistributor.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract FeeDistributor is Ownable {\n using SafeMath for uint;\n\n struct FeeRecipient {\n address liquidVault;\n address secondaryAddress;\n uint256 liquidVaultShare; //percentage between 0 and 100\n uint256 burnPercentage;\n }\n \n IInfinityProtocol public infinity;\n FeeRecipient public recipients;\n\n bool public initialized;\n\n uint private constant MINIMUM_AMOUNT = 1e8;\n\n modifier seeded {\n require(\n initialized,\n \"FeeDistributor: Fees cannot be distributed until Distributor seeded.\"\n );\n _;\n }\n\n function seed(\n address _infinity,\n address _vault,\n address _secondaryAddress,\n uint _liquidVaultShare,\n uint _burnPercentage\n ) external onlyOwner {\n require(\n _liquidVaultShare.add(_burnPercentage) <= 100,\n \"FeeDistributor: liquidVault + burnPercentage incorrect sets\"\n );\n infinity = IInfinityProtocol(_infinity);\n recipients.liquidVault = _vault;\n recipients.secondaryAddress = _secondaryAddress;\n recipients.liquidVaultShare = _liquidVaultShare;\n recipients.burnPercentage = _burnPercentage;\n initialized = true;\n }\n\n function distributeFees() external seeded {\n uint balance = infinity.balanceOf(address(this));\n\n if (balance < MINIMUM_AMOUNT) {\n return;\n }\n\n uint liquidShare;\n uint burningShare;\n uint secondaryShare;\n\n if (recipients.liquidVaultShare > 0) {\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\n\n require(\n infinity.transfer(recipients.liquidVault, liquidShare),\n \"FeeDistributor: transfer to LiquidVault failed\"\n );\n }\n\n if (recipients.burnPercentage > 0) {\n burningShare = recipients.burnPercentage.mul(balance).div(100);\n infinity.burn(burningShare);\n }\n\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\n if (secondaryShare > 0) {\n require(\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\n \"FeeDistributor: transfer to the secondary address failed\"\n );\n }\n }\n}" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "contracts/interfaces/IInfinityProtocol.sol": { + "content": "import \"./IERC20.sol\";\n\ninterface IInfinityProtocol is IERC20 {\n function burn(uint amount) external returns (bool);\n}" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "contracts/interfaces/IERC20.sol": { + "content": "pragma solidity 0.7.4;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function decimals() external pure returns (uint8);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}" + }, + "contracts/InfinityProtocol.sol": { + "content": "pragma solidity 0.7.4;\n\nimport \"@openzeppelin/contracts/GSN/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\n\n using SafeMath for uint;\n using Address for address;\n\n mapping (address => uint) private _rOwned;\n mapping (address => uint) private _tOwned;\n mapping (address => mapping (address => uint)) private _allowances;\n\n mapping (address => bool) private _isExcluded;\n address[] private _excluded;\n address public feeReceiver;\n address public router;\n uint public maxCycles;\n\n string private constant _NAME = \"infinityprotocol.io\";\n string private constant _SYMBOL = \"INFINITY\";\n uint8 private constant _DECIMALS = 8;\n\n uint private constant _MAX = ~uint(0);\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\n uint private constant _GRANULARITY = 100;\n\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\n\n uint private _tFeeTotal;\n uint private _tBurnTotal;\n uint private _infinityCycle;\n\n uint private _tTradeCycle;\n uint private _tBurnCycle;\n\n uint private _BURN_FEE;\n uint private _FOT_FEE;\n bool private _feeSet;\n\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\n\n constructor (address _router) public {\n _rOwned[_msgSender()] = _rTotal;\n router = _router;\n setMaxCycles(500);\n emit Transfer(address(0), _msgSender(), _tTotal);\n }\n\n function name() public pure returns (string memory) {\n return _NAME;\n }\n\n function symbol() public pure returns (string memory) {\n return _SYMBOL;\n }\n\n function decimals() public pure override returns (uint8) {\n return _DECIMALS;\n }\n\n function totalSupply() public view override returns (uint) {\n return _tTotal;\n }\n\n function balanceOf(address account) public view override returns (uint) {\n if (_isExcluded[account]) return _tOwned[account];\n return tokenFromReflection(_rOwned[account]);\n }\n\n function transfer(address recipient, uint amount) public override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint amount) public override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n function isExcluded(address account) public view returns (bool) {\n return _isExcluded[account];\n }\n\n function totalFees() public view returns (uint) {\n return _tFeeTotal;\n }\n\n function totalBurn() public view returns (uint) {\n return _tBurnTotal;\n }\n\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\n require(receiver != address(0), \"Zero address not allowed\");\n feeReceiver = receiver;\n return true;\n }\n\n function totalBurnWithFees() public view returns (uint) {\n return _tBurnTotal.add(_tFeeTotal);\n }\n\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\n require(transferAmount <= _tTotal, \"Amount must be less than supply\");\n if (!deductTransferFee) {\n (uint rAmount,,,,,) = _getValues(transferAmount);\n return rAmount;\n } else {\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\n return rTransferAmount;\n }\n }\n\n function tokenFromReflection(uint rAmount) public view returns(uint) {\n require(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n uint currentRate = _getRate();\n return rAmount.div(currentRate);\n }\n\n function excludeAccount(address account) external onlyOwner() {\n require(!_isExcluded[account], \"Account is already excluded\");\n require(account != router, 'Not allowed to exclude router');\n require(account != feeReceiver, \"Can not exclude fee receiver\");\n if (_rOwned[account] > 0) {\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\n }\n _isExcluded[account] = true;\n _excluded.push(account);\n }\n\n function includeAccount(address account) external onlyOwner() {\n require(_isExcluded[account], \"Account is already included\");\n for (uint i = 0; i < _excluded.length; i++) {\n if (_excluded[i] == account) {\n _excluded[i] = _excluded[_excluded.length - 1];\n _tOwned[account] = 0;\n _isExcluded[account] = false;\n _excluded.pop();\n break;\n }\n }\n }\n\n function _approve(address owner, address spender, uint amount) private {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n function _transfer(address sender, address recipient, uint amount) private {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n require(amount > 0, \"Transfer amount must be greater than zero\");\n\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\n // reaches its final phase, in which no further supply elasticity will take place\n // and fees will stay at 0\n\n if (sender != owner() && recipient != owner())\n require(amount <= _MAX_TX_SIZE, \"Transfer amount exceeds the maxTxAmount.\");\n\n // @dev 50% fee is burn fee, 50% is fot\n if (_BURN_FEE >= 250) {\n\n _tTradeCycle = _tTradeCycle.add(amount);\n\n\n // @dev adjust current burnFee/fotFee depending on the traded tokens\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\n _setFees(500);\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\n _setFees(550);\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\n _setFees(600);\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\n _setFees(650);\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\n _setFees(700);\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\n _setFees(750);\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\n _setFees(800);\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\n _setFees(850);\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\n _setFees(900);\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\n _setFees(950);\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\n _setFees(1000);\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\n _setFees(1050);\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\n _setFees(1100);\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\n _setFees(1150);\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\n _setFees(1200);\n }\n }\n\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferFromExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\n _transferToExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferStandard(sender, recipient, amount);\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\n _transferBothExcluded(sender, recipient, amount);\n } else {\n _transferStandard(sender, recipient, amount);\n }\n }\n\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\n _rTotal = _rTotal.sub(rBurn);\n _tFeeTotal = _tFeeTotal.add(transferFee);\n _tBurnTotal = _tBurnTotal.add(transferBurn);\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\n _tTotal = _tTotal.sub(transferBurn);\n\n\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\n //set rebase percent\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\n _tTradeCycle = 0;\n _setFees(500);\n\n _rebase(_tRebaseDelta);\n }\n }\n\n function burn(uint amount) external override returns (bool) {\n address sender = _msgSender();\n uint balance = balanceOf(sender);\n require(balance >= amount, \"Cannot burn more than on balance\");\n require(sender == feeReceiver, \"Only feeReceiver\");\n\n uint rBurn = amount.mul(_getRate());\n _rTotal = _rTotal.sub(rBurn);\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\n\n _tBurnTotal = _tBurnTotal.add(amount);\n _tTotal = _tTotal.sub(amount);\n\n emit Transfer(sender, address(0), amount);\n return true;\n }\n\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\n }\n\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\n return (tTransferAmount, transferFee, transferBurn);\n }\n\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\n uint currentRate = _getRate();\n uint rAmount = transferAmount.mul(currentRate);\n uint rFee = transferFee.mul(currentRate);\n uint rBurn = transferBurn.mul(currentRate);\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\n return (rAmount, rTransferAmount, rFee);\n }\n\n function _getRate() private view returns(uint) {\n (uint rSupply, uint tSupply) = _getCurrentSupply();\n return rSupply.div(tSupply);\n }\n\n function _getCurrentSupply() private view returns(uint, uint) {\n uint rSupply = _rTotal;\n uint tSupply = _tTotal;\n for (uint i = 0; i < _excluded.length; i++) {\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\n }\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n return (rSupply, tSupply);\n }\n\n\n function _setFees(uint fee) private {\n require(fee >= 0 && fee <= 1500, \"fee should be in 0 - 15%\");\n if (_BURN_FEE == fee.div(2)) {\n return;\n }\n\n _BURN_FEE = fee.div(2);\n _FOT_FEE = fee.div(2);\n }\n\n function setInitialFee() external onlyOwner() {\n require(!_feeSet, \"Initial fee already set\");\n _setFees(500);\n _feeSet = true;\n }\n\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\n require(_maxCycles >= _infinityCycle, \"Can not set more than current cycle\");\n maxCycles = _maxCycles;\n }\n\n function getBurnFee() public view returns(uint) {\n return _BURN_FEE;\n }\n\n function getFee() public view returns(uint) {\n return _FOT_FEE;\n }\n\n function _getMaxTxAmount() private pure returns(uint) {\n return _MAX_TX_SIZE;\n }\n\n function getCycle() public view returns(uint) {\n return _infinityCycle;\n }\n\n function getBurnCycle() public view returns(uint) {\n return _tBurnCycle;\n }\n\n function getTradedCycle() public view returns(uint) {\n return _tTradeCycle;\n }\n\n function _rebase(uint supplyDelta) internal {\n _infinityCycle = _infinityCycle.add(1);\n _tTotal = _tTotal.add(supplyDelta);\n\n if (_infinityCycle > maxCycles) {\n _setFees(0);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/GSN/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "contracts/vaults/HodlerVaultSpace.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport '@openzeppelin/contracts/math/SafeMath.sol';\nimport \"../interfaces/IERC20.sol\";\n\ncontract HodlerVaultSpace is Ownable {\n using SafeMath for uint;\n\n /** Emitted when purchaseLP() is called to track INFINITY amounts */\n event InfinityTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address hodler,\n uint amount,\n uint eth,\n uint infinityTokens,\n uint timeStamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address hodler,\n uint amount,\n uint timestamp,\n uint donation\n );\n\n struct LPbatch {\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct HodlerVaultConfig {\n IERC20 infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool private locked;\n bool public forceUnlock;\n\n modifier lock {\n require(!locked, \"HodlerVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n HodlerVaultConfig public config;\n //Front end can loop through this and inspect if enough time has passed\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n receive() external payable {}\n\n function maxTokensToInvest() external view returns (uint) {\n uint totalETH = address(this).balance;\n if (totalETH == 0) {\n return 0;\n }\n\n uint infinityMaxAllowed;\n\n (uint reserve1, uint reserve2,) = config.tokenPair.getReserves();\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve2,\n reserve1\n );\n } else {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve1,\n reserve2\n );\n }\n\n return infinityMaxAllowed;\n }\n\n\n function getLockedLP(address hodler, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[hodler][position];\n return (hodler, batch.amount, batch.timestamp, batch.claimed);\n }\n\n function lockedLPLength(address hodler) external view returns (uint) {\n return lockedLP[hodler].length;\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n function seed(\n uint32 duration,\n IERC20 infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address payable feeReceiver,\n uint8 purchaseFee // INFINITY\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, 0, purchaseFee);\n setFeeReceiver(feeReceiver);\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"HodlerVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"HodlerVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n\n function setFeeReceiver(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"HodlerVaultSpace: fee receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function purchaseLP(uint amount) external lock {\n require(amount > 0, \"HodlerVaultSpace: INFINITY required to mint LP\");\n require(config.infinityToken.balanceOf(msg.sender) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens\");\n require(config.infinityToken.allowance(msg.sender, address(this)) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens allowance\");\n\n uint infinityFee = amount.mul(config.purchaseFee).div(100);\n uint netInfinity = amount.sub(infinityFee);\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint ethRequired;\n\n if (address(config.infinityToken) > address(config.weth)) {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve2,\n reserve1\n );\n } else {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve1,\n reserve2\n );\n }\n\n require(\n address(this).balance >= ethRequired,\n \"HodlerVaultSpace: insufficient ETH on HodlerVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: ethRequired }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, ethRequired);\n config.infinityToken.transferFrom(\n msg.sender,\n tokenPairAddress,\n netInfinity\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n if (infinityFee > 0 && config.feeReceiver != address(0)) {\n config.infinityToken.transferFrom(\n msg.sender,\n config.feeReceiver,\n infinityFee\n );\n }\n\n lockedLP[msg.sender].push(\n LPbatch({\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n msg.sender,\n liquidityCreated,\n ethRequired,\n netInfinity,\n block.timestamp\n );\n\n emit InfinityTransferred(msg.sender, netInfinity, infinityFee);\n }\n\n //pops latest LP if older than period\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"HodlerVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"HodlerVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"HodlerVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(msg.sender, batch.amount - donation),\n \"HodlerVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { + "content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { + "content": "pragma solidity >=0.5.0;\n\ninterface IWETH {\n function deposit() external payable;\n function transfer(address to, uint value) external returns (bool);\n function withdraw(uint) external;\n}\n" + }, + "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { + "content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n" + }, + "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { + "content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n" + }, + "contracts/vaults/PowerLiquidVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract PowerLiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n uint public constant MINIMUM_BUY_PRESSURE_AMOUNT = 1e14; //0,0001 ETH minimum\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"PowerLiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"PowerLiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"PowerLiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"PowerLiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"PowerLiquidVault: insufficient INFINITY tokens in PowerLiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in PowerLiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"PowerLiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"PowerLiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"PowerLiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"PowerLiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function buyPressure() external {\n uint weiBalance = address(this).balance;\n require(\n weiBalance > MINIMUM_BUY_PRESSURE_AMOUNT, \n \"PowerLiquidVault: ETH amount must be > 0,0001 ETH.\"\n );\n\n address[] memory path = new address[](2);\n path[0] = address(config.weth);\n path[1] = address(config.infinityToken);\n\n config.uniswapRouter.swapExactETHForTokens{ value: weiBalance }(\n 0,\n path,\n address(this),\n block.timestamp\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" + }, + "contracts/interfaces/IFeeDistributor.sol": { + "content": "interface IFeeDistributor {\n function distributeFees() external;\n}" + }, + "contracts/vaults/LiquidVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract LiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n \n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"LiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable feeReceiver,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setFeeReceiverAddress(feeReceiver);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"LiquidVault: ETH receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"LiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"LiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"LiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"LiquidVault: insufficient INFINITY tokens in LiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n config.feeReceiver.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in LiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"LiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"LiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"LiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"LiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" + }, + "contracts/vaults/AcceleratorVaultSpace.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract AcceleratorVaultSpace is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct AcceleratorVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable ethHodler;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"AcceleratorVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n AcceleratorVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable ethHodler,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setEthHodlerAddress(ethHodler);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() external onlyOwner {\n forceUnlock = true;\n }\n\n function setEthHodlerAddress(address payable ethHodler) public onlyOwner {\n require(\n ethHodler != address(0),\n \"AcceleratorVaultSpace: eth receiver is zero address\"\n );\n\n config.ethHodler = ethHodler;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"AcceleratorVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"AcceleratorVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"AcceleratorVaultSpace: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"AcceleratorVaultSpace: insufficient INFINITY tokens in AcceleratorVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n //ETH receiver is hodler vault here\n config.ethHodler.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send eth to match with INFINITY tokens in AcceleratorVaultSpace\n function purchaseLP() external payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"AcceleratorVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"AcceleratorVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"AcceleratorVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"AcceleratorVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) external view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}\n" + }, + "@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol": { + "content": "pragma solidity >=0.5.0;\n\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\n\n// library with helper methods for oracles that are concerned with computing average prices\nlibrary UniswapV2OracleLibrary {\n using FixedPoint for *;\n\n // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\n function currentBlockTimestamp() internal view returns (uint32) {\n return uint32(block.timestamp % 2 ** 32);\n }\n\n // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\n function currentCumulativePrices(\n address pair\n ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\n blockTimestamp = currentBlockTimestamp();\n price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\n price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\n\n // if time has elapsed since the last update on the pair, mock the accumulated price values\n (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\n if (blockTimestampLast != blockTimestamp) {\n // subtraction overflow is desired\n uint32 timeElapsed = blockTimestamp - blockTimestampLast;\n // addition overflow is desired\n // counterfactual\n price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\n // counterfactual\n price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\n }\n }\n}\n" + }, + "@uniswap/lib/contracts/libraries/FixedPoint.sol": { + "content": "pragma solidity >=0.4.0;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n // range: [0, 2**112 - 1]\n // resolution: 1 / 2**112\n struct uq112x112 {\n uint224 _x;\n }\n\n // range: [0, 2**144 - 1]\n // resolution: 1 / 2**112\n struct uq144x112 {\n uint _x;\n }\n\n uint8 private constant RESOLUTION = 112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 x) internal pure returns (uq112x112 memory) {\n return uq112x112(uint224(x) << RESOLUTION);\n }\n\n // encodes a uint144 as a UQ144x112\n function encode144(uint144 x) internal pure returns (uq144x112 memory) {\n return uq144x112(uint256(x) << RESOLUTION);\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) {\n require(x != 0, 'FixedPoint: DIV_BY_ZERO');\n return uq112x112(self._x / uint224(x));\n }\n\n // multiply a UQ112x112 by a uint, returning a UQ144x112\n // reverts on overflow\n function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) {\n uint z;\n require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), \"FixedPoint: MULTIPLICATION_OVERFLOW\");\n return uq144x112(z);\n }\n\n // returns a UQ112x112 which represents the ratio of the numerator to the denominator\n // equivalent to encode(numerator).div(denominator)\n function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\n require(denominator > 0, \"FixedPoint: DIV_BY_ZERO\");\n return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\n }\n\n // decode a UQ112x112 into a uint112 by truncating after the radix point\n function decode(uq112x112 memory self) internal pure returns (uint112) {\n return uint112(self._x >> RESOLUTION);\n }\n\n // decode a UQ144x112 into a uint144 by truncating after the radix point\n function decode144(uq144x112 memory self) internal pure returns (uint144) {\n return uint144(self._x >> RESOLUTION);\n }\n}\n" + }, + "contracts/PriceOracle.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\nimport '@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol';\nimport \"./interfaces/IERC20.sol\";\n\n\ncontract PriceOracle {\n using FixedPoint for *;\n IUniswapV2Pair public immutable pair;\n uint public multiplier;\n uint private priceLast;\n uint public priceCumulativeLast;\n uint32 public blockTimestampLast;\n\n address public tokenA;\n address public tokenB;\n address public token0;\n\n constructor(IUniswapV2Pair _pair, address _tokenA, address _tokenB) public {\n pair = _pair;\n tokenA = _tokenA;\n tokenB = _tokenB;\n (token0, ) = _tokenA < _tokenB\n ? (_tokenA, _tokenB)\n : (_tokenB, _tokenA);\n\n if(token0 == _tokenA) {\n priceCumulativeLast = _pair.price0CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token0()).decimals());\n } else {\n priceCumulativeLast = _pair.price1CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token1()).decimals());\n }\n }\n function update() public returns(uint) {\n uint112 reserve0;\n uint112 reserve1;\n (reserve0, reserve1, blockTimestampLast) = pair.getReserves();\n require(reserve0 != 0 && reserve1 != 0, 'PriceOracle: NO_RESERVES');\n\n uint _priceCumulative;\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n uint _price;\n if (_blockTimestamp != _blockTimestampLast) {\n _price = FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) /\n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n priceLast = _price;\n priceCumulativeLast = _priceCumulative;\n blockTimestampLast = _blockTimestamp;\n } else {\n _price = priceLast;\n }\n return _price;\n }\n // note this will always return 0 before update has been called successfully for the first time.\n function consult() external view returns (uint) {\n uint _priceCumulative;\n\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n // most recent price is already calculated.\n if (_blockTimestamp == _blockTimestampLast) {\n return priceLast;\n }\n return FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / \n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n }\n function updateAndConsult() external returns (uint) {\n return update();\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/hardhat.config.js b/hardhat.config.js index 42ccbd1..c054b57 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,18 +1,30 @@ -require("@nomiclabs/hardhat-waffle"); -require("@nomiclabs/hardhat-etherscan"); +// Hardhat Global Imports +const { task } = require('hardhat/config'); +require('hardhat-deploy') +require('hardhat-deploy-ethers') +require('@nomiclabs/hardhat-waffle'); +require('@nomiclabs/hardhat-ethers'); +require('@nomiclabs/hardhat-etherscan'); require('dotenv').config() -const {FORNO_CELO_MAINNET, FORNO_CELO_TESTNET, PRIVATE_KEY, ETHERSCAN_API_KEY} = process.env; +// Hardhat Tasks +require('./tasks/deploy_infinityProtocol') +require('./tasks/deploy_liquidVault') +require('./tasks/deploy_feeDistributor') + +const {FORNO_CELO_MAINNET, FORNO_CELO_TESTNET, DEPLOYER_PRIVATE_KEY, OWNER_PRIVATE_KEY, ETHERSCAN_API_KEY, ROUTER} = process.env; // This is a sample Hardhat task. To learn how to create your own go to // https://hardhat.org/guides/create-task.html -task("accounts", "Prints the list of accounts", async () => { - const accounts = await ethers.getSigners(); - for (const account of accounts) { - console.log(account.address); - } -}); +// task( +// "infinity-deploy", +// "Deploys - Infinity Protocol, Reality LVault, FeeD, seeds FeeD", +// ).addParam( +// "router", +// "Uniswap / Ubeswap Router Address for Infinity Protocol").setAction(async () => { + +// }); // You need to export an object to set up your config // Go to https://hardhat.org/config/ to learn more @@ -24,14 +36,14 @@ module.exports = { networks: { alfajores: { url: FORNO_CELO_TESTNET, - accounts: [PRIVATE_KEY], + accounts: [DEPLOYER_PRIVATE_KEY, OWNER_PRIVATE_KEY], live: true, gasPrice: 0.5 * 10 ** 9, gas: 8000000, }, celo_mainnet: { url: FORNO_CELO_MAINNET, - accounts: [PRIVATE_KEY] + accounts: [DEPLOYER_PRIVATE_KEY, OWNER_PRIVATE_KEY] } }, solidity: { @@ -43,7 +55,7 @@ module.exports = { } } }, - + namedAccounts: { deployer: 0, tokenOwner: 1}, etherscan: { apiKey: ETHERSCAN_API_KEY } diff --git a/package.json b/package.json index 0fa5903..b1d8d2b 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ "dotenv": "8.2.0", "ethereum-waffle": "^3.3.0", "ethers": "^5.1.0", - "hardhat": "^2.1.2" + "hardhat": "^2.1.2", + "hardhat-deploy": "^0.8.9", + "hardhat-deploy-ethers": "^0.3.0-beta.10" } } diff --git a/scripts/celo-deploy.js b/scripts/celo-deploy.js index 89f05fa..dab5b45 100644 --- a/scripts/celo-deploy.js +++ b/scripts/celo-deploy.js @@ -1,4 +1,4 @@ -const hardhat = require('hardhat'); +// const hardhat = require('hardhat'); const UniswapV2Factory = require("@ubeswap/core/build/metadata/UniswapV2Factory/artifact.json"); const UniswapV2Pair = require("@ubeswap/core/build/metadata/UniswapV2Pair/artifact.json"); require('dotenv').config(); @@ -11,8 +11,7 @@ async function main() { const liquidVaultShare = 60; const burnPercentage = 10; - await pausePromise('Deploying InfinityProtocol stone'); - const InfinityProtocol = await hardhat.ethers.getContractFactory("InfinityProtocol"); + const InfinityProtocol = await ethers.getContractFactory("InfinityProtocol"); const infinityProtocol = await InfinityProtocol.deploy(ROUTER); await infinityProtocol.deployed(); @@ -26,8 +25,7 @@ async function main() { console.log("LiquidVault deployed to: ", liquidVault.address); - // Deploy LiquidVault - await pausePromise('Deploying FeeDistributor'); + // Deploy FeeDistributor const FeeDistributor = await hardhat.ethers.getContractFactory("FeeDistributor"); const feeDistributor = await FeeDistributor.deploy(); await feeDistributor.deployed(); diff --git a/tasks/deploy_feeDistributor.js b/tasks/deploy_feeDistributor.js new file mode 100644 index 0000000..b3dea86 --- /dev/null +++ b/tasks/deploy_feeDistributor.js @@ -0,0 +1,17 @@ +const {DeployFunction} = require('hardhat-deploy') + +task("deploy_feeDistributor", "Deploys FeeDistributor, In charge of Fee Distributions") + // .addParam() + .setAction(async () => { + const {deployments, getNamedAccounts} = hre; + const {deploy} = deployments; + + const {deployer, tokenOwner} = await getNamedAccounts(); + const feeDistributorContract = await deploy('FeeDistributor', { from: deployer, args: [], log: true, }) + + console.log("FeeDistributor deployed to:", feeDistributorContract.address); + + return feeDistributorContract; +}); + +module.exports = {task}; \ No newline at end of file diff --git a/tasks/deploy_infinityProtocol.js b/tasks/deploy_infinityProtocol.js new file mode 100644 index 0000000..3d70d42 --- /dev/null +++ b/tasks/deploy_infinityProtocol.js @@ -0,0 +1,32 @@ +// const hre = require("hardhat/config") +const {DeployFunction} = require('hardhat-deploy') + +// const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const {deployments, getNamedAccounts} = hre; const {deploy} = deployments; const {deployer, tokenOwner} = await getNamedAccounts(); await deploy('Token', { from: deployer, args: [tokenOwner], log: true, });};export default func;func.tags = ['Token']; + +// import {DeployFunction} from 'hardhat-deploy/types' +// require('dotenv').config() + +// This is a sample Hardhat task. To learn how to create your own go to +// https://hardhat.org/guides/create-task.html + +// const {FORNO_CELO_MAINNET, FORNO_CELO_TESTNET, DEPLOYER_PRIVATE_KEY, OWNER_PRIVATE_KEY, ETHERSCAN_API_KEY, ROUTER} = process.env; + +// task("hello", "Prints 'Hello, World!'", async function(taskArguments, hre, runSuper) { +// console.log("Hello, World!"); +// }); + +task("deploy_infinityProtocol", "Deploys infinity protocol") + .addParam("router", "Ube/Pancake/Uniswap Router Address") + .setAction(async ({router}) => { + const {deployments, getNamedAccounts} = hre; + const {deploy} = deployments; + + const {deployer, tokenOwner} = await getNamedAccounts(); + const infinityContract = await deploy('InfinityProtocol', { from: deployer, args: [router], log: true, }) + + console.log("InfinityProtocol deployed to:", infinityContract.address); + + return infinityContract; + }); + + module.exports = {task}; \ No newline at end of file diff --git a/tasks/deploy_liquidVault.js b/tasks/deploy_liquidVault.js new file mode 100644 index 0000000..f8f4858 --- /dev/null +++ b/tasks/deploy_liquidVault.js @@ -0,0 +1,17 @@ +const {DeployFunction} = require('hardhat-deploy') + +task("deploy_liquidVault", "Deploys LiquidVault, 1st Vault of Infinity Protocol") + // .addParam() + .setAction(async () => { + const {deployments, getNamedAccounts} = hre; + const {deploy} = deployments; + + const {deployer, tokenOwner} = await getNamedAccounts(); + const liquidVaultContract = await deploy('LiquidVault', { from: deployer, args: [], log: true, }) + + console.log("LiquidVault deployed to:", liquidVaultContract.address); + + return liquidVaultContract; +}); + + module.exports = {task}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 74a5dc4..5a6e743 100644 --- a/yarn.lock +++ b/yarn.lock @@ -233,6 +233,21 @@ "@ethersproject/properties" "^5.3.0" "@ethersproject/strings" "^5.3.0" +"@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" + integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" @@ -246,6 +261,19 @@ "@ethersproject/transactions" "^5.3.0" "@ethersproject/web" "^5.3.0" +"@ethersproject/abstract-provider@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" + integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" + "@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" @@ -257,6 +285,17 @@ "@ethersproject/logger" "^5.3.0" "@ethersproject/properties" "^5.3.0" +"@ethersproject/abstract-signer@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" + integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/address@5.3.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" @@ -268,6 +307,17 @@ "@ethersproject/logger" "^5.3.0" "@ethersproject/rlp" "^5.3.0" +"@ethersproject/address@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" @@ -275,6 +325,13 @@ dependencies: "@ethersproject/bytes" "^5.3.0" +"@ethersproject/base64@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" @@ -283,6 +340,14 @@ "@ethersproject/bytes" "^5.3.0" "@ethersproject/properties" "^5.3.0" +"@ethersproject/basex@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" + integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" @@ -292,6 +357,15 @@ "@ethersproject/logger" "^5.3.0" bn.js "^4.11.9" +"@ethersproject/bignumber@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" + integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.3.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" @@ -299,6 +373,13 @@ dependencies: "@ethersproject/logger" "^5.3.0" +"@ethersproject/bytes@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/constants@5.3.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" @@ -306,6 +387,13 @@ dependencies: "@ethersproject/bignumber" "^5.3.0" +"@ethersproject/constants@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/contracts@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" @@ -322,6 +410,22 @@ "@ethersproject/properties" "^5.3.0" "@ethersproject/transactions" "^5.3.0" +"@ethersproject/contracts@^5.3.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" + integrity sha512-hkO3L3IhS1Z3ZtHtaAG/T87nQ7KiPV+/qnvutag35I0IkiQ8G3ZpCQ9NNOpSCzn4pWSW4CfzmtE02FcqnLI+hw== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/hash@5.3.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" @@ -336,6 +440,20 @@ "@ethersproject/properties" "^5.3.0" "@ethersproject/strings" "^5.3.0" +"@ethersproject/hash@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" @@ -354,6 +472,24 @@ "@ethersproject/transactions" "^5.3.0" "@ethersproject/wordlists" "^5.3.0" +"@ethersproject/hdnode@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" + integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" + "@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" @@ -373,6 +509,25 @@ aes-js "3.0.0" scrypt-js "3.0.1" +"@ethersproject/json-wallets@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" + integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" @@ -381,11 +536,24 @@ "@ethersproject/bytes" "^5.3.0" js-sha3 "0.5.7" +"@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + js-sha3 "0.5.7" + "@ethersproject/logger@5.3.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== +"@ethersproject/logger@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" + integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== + "@ethersproject/networks@5.3.1", "@ethersproject/networks@^5.3.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61" @@ -393,6 +561,13 @@ dependencies: "@ethersproject/logger" "^5.3.0" +"@ethersproject/networks@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.0.tgz#71eecd3ef3755118b42c1a5d2a44a7e07202e10a" + integrity sha512-5fywtKRDcnaVeA5SjxXH3DOQqe/IbeD/plwydi94SdPps1fbDUrnO6SzDExaruBZXxpxJcO9upG9UComsei4bg== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" @@ -401,6 +576,14 @@ "@ethersproject/bytes" "^5.3.0" "@ethersproject/sha2" "^5.3.0" +"@ethersproject/pbkdf2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" + integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/properties@5.3.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" @@ -408,6 +591,13 @@ dependencies: "@ethersproject/logger" "^5.3.0" +"@ethersproject/properties@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" + integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/providers@5.3.1": version "5.3.1" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.1.tgz#a12c6370e8cbc0968c9744641b8ef90b0dd5ec2b" @@ -433,6 +623,31 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/providers@^5.3.1": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.0.tgz#1b9eeaf394d790a662ec66373d7219c82f4433f2" + integrity sha512-XRmI9syLnkNdLA8ikEeg0duxmwSWTTt9S+xabnTOyI51JPJyhQ0QUNT+wvmod218ebb7rLupHDPQ7UVe2/+Tjg== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" @@ -441,6 +656,14 @@ "@ethersproject/bytes" "^5.3.0" "@ethersproject/logger" "^5.3.0" +"@ethersproject/random@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" + integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" @@ -449,6 +672,14 @@ "@ethersproject/bytes" "^5.3.0" "@ethersproject/logger" "^5.3.0" +"@ethersproject/rlp@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" @@ -458,6 +689,15 @@ "@ethersproject/logger" "^5.3.0" hash.js "1.1.7" +"@ethersproject/sha2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" + integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + hash.js "1.1.7" + "@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" @@ -470,6 +710,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" @@ -481,6 +733,17 @@ "@ethersproject/sha2" "^5.3.0" "@ethersproject/strings" "^5.3.0" +"@ethersproject/solidity@^5.3.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" + integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/strings@5.3.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" @@ -490,6 +753,15 @@ "@ethersproject/constants" "^5.3.0" "@ethersproject/logger" "^5.3.0" +"@ethersproject/strings@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" @@ -505,6 +777,21 @@ "@ethersproject/rlp" "^5.3.0" "@ethersproject/signing-key" "^5.3.0" +"@ethersproject/transactions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/units@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" @@ -535,6 +822,27 @@ "@ethersproject/transactions" "^5.3.0" "@ethersproject/wordlists" "^5.3.0" +"@ethersproject/wallet@^5.3.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" + integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/json-wallets" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" + "@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" @@ -546,6 +854,17 @@ "@ethersproject/properties" "^5.3.0" "@ethersproject/strings" "^5.3.0" +"@ethersproject/web@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== + dependencies: + "@ethersproject/base64" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" @@ -557,6 +876,17 @@ "@ethersproject/properties" "^5.3.0" "@ethersproject/strings" "^5.3.0" +"@ethersproject/wordlists@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" + integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" @@ -926,6 +1256,11 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb" integrity sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw== +"@types/qs@^6.9.4": + version "6.9.6" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" + integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + "@types/resolve@^0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -1189,6 +1524,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1367,6 +1709,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2361,6 +2710,14 @@ chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -2549,11 +2906,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3105,6 +3474,11 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3155,7 +3529,7 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -enquirer@^2.3.0: +enquirer@^2.3.0, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4101,7 +4475,14 @@ flow-stoplight@^1.0.0: resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -follow-redirects@^1.12.1: +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= + dependencies: + imul "^1.0.0" + +follow-redirects@^1.10.0, follow-redirects@^1.12.1: version "1.14.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== @@ -4137,6 +4518,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -4184,6 +4574,15 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -4464,6 +4863,38 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hardhat-deploy-ethers@^0.3.0-beta.10: + version "0.3.0-beta.10" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.10.tgz#bccfcf635d380bbab3638960f6739fe4d396fc5f" + integrity sha512-TeyriUshRZ7XVHOjMsDtTozIrdwLf3Bw+oZRYNhXdG/eut5HeDhjUFPfRlG7TI1lSLvkcB5dt7OxOtPYKDOxTg== + +hardhat-deploy@^0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.8.9.tgz#fa13f104a2aba85d6ce0043adbd683e0da026df9" + integrity sha512-hmn94K8b/ua7kTj/ECpCXaIqF/8Kfj1fI17ex1fxfvGS8RkZKvXaHaNU1ziX7vLaKZbcYHytKC9nL7PiRwXawQ== + dependencies: + "@ethersproject/abi" "^5.3.1" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/contracts" "^5.3.0" + "@ethersproject/providers" "^5.3.1" + "@ethersproject/solidity" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wallet" "^5.3.0" + "@types/qs" "^6.9.4" + axios "^0.21.1" + chalk "^4.1.1" + chokidar "^3.4.0" + debug "^4.1.1" + enquirer "^2.3.6" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + hardhat@^2.1.2: version "2.4.1" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.4.1.tgz#2cd1e86ee6ca3a6a473eeb0f55bd3124c8c59250" @@ -4539,6 +4970,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" @@ -4766,6 +5202,11 @@ immutable@^4.0.0-rc.12: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5306,6 +5747,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5795,6 +6245,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + mcl-wasm@^0.7.1: version "0.7.8" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.8.tgz#4d0dc5a92f7bd20892fd3fcd41764acf86fd1e6e" @@ -6176,6 +6631,15 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" @@ -6972,7 +7436,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.7.0: +qs@^6.7.0, qs@^6.9.4: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== @@ -7976,6 +8440,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -8370,6 +8841,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unorm@^1.3.3: version "1.6.0" resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" From f433e815e28633ebd481d4041aa11e056df7bb8b Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Fri, 2 Jul 2021 05:33:38 -0400 Subject: [PATCH 10/13] updated readme with hardhat tasks. --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index e02400d..5e8718f 100644 --- a/README.md +++ b/README.md @@ -41,3 +41,17 @@ npm run test npm run compile ``` +# Hardhat Tasks +- Deploy InfinityProtocol +``` +npx hardhat deploy_infinityProtocol --router [router_address] --network [network_name] +``` +- Deploy LiquidVault +``` +npx hardhat deploy_liquidVault --network [network_name] +``` +- Deploy FeeDistributor +``` +npx hardhat deploy_liquidVault --network [network_name] +``` + From 10a524c4739811ee21c356d71a7216ad86ce25c1 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sun, 11 Jul 2021 03:52:56 -0400 Subject: [PATCH 11/13] ignoring deployments folder --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index d4baba7..2c2d0f3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ node_modules #Hardhat files cache artifacts + +#hardhat-deploy +deployments \ No newline at end of file From 5c696fe4001730453b6dbc844b01bab4e61d796d Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sun, 11 Jul 2021 03:53:31 -0400 Subject: [PATCH 12/13] removed latest deployment --- deployments/alfajores/.chainId | 1 - deployments/alfajores/FeeDistributor.json | 304 ------ deployments/alfajores/InfinityProtocol.json | 917 ------------------ deployments/alfajores/LiquidVault.json | 773 --------------- .../50935558cf5835f525f697d3157617bd.json | 95 -- deployments/hardhat/.chainId | 1 - deployments/hardhat/FeeDistributor.json | 304 ------ deployments/hardhat/InfinityProtocol.json | 917 ------------------ deployments/hardhat/LiquidVault.json | 773 --------------- .../50935558cf5835f525f697d3157617bd.json | 95 -- 10 files changed, 4180 deletions(-) delete mode 100644 deployments/alfajores/.chainId delete mode 100644 deployments/alfajores/FeeDistributor.json delete mode 100644 deployments/alfajores/InfinityProtocol.json delete mode 100644 deployments/alfajores/LiquidVault.json delete mode 100644 deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json delete mode 100644 deployments/hardhat/.chainId delete mode 100644 deployments/hardhat/FeeDistributor.json delete mode 100644 deployments/hardhat/InfinityProtocol.json delete mode 100644 deployments/hardhat/LiquidVault.json delete mode 100644 deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json diff --git a/deployments/alfajores/.chainId b/deployments/alfajores/.chainId deleted file mode 100644 index 38448fe..0000000 --- a/deployments/alfajores/.chainId +++ /dev/null @@ -1 +0,0 @@ -44787 \ No newline at end of file diff --git a/deployments/alfajores/FeeDistributor.json b/deployments/alfajores/FeeDistributor.json deleted file mode 100644 index 025f600..0000000 --- a/deployments/alfajores/FeeDistributor.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "address": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "distributeFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "infinity", - "outputs": [ - { - "internalType": "contract IInfinityProtocol", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "recipients", - "outputs": [ - { - "internalType": "address", - "name": "liquidVault", - "type": "address" - }, - { - "internalType": "address", - "name": "secondaryAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "liquidVaultShare", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "burnPercentage", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_infinity", - "type": "address" - }, - { - "internalType": "address", - "name": "_vault", - "type": "address" - }, - { - "internalType": "address", - "name": "_secondaryAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_liquidVaultShare", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_burnPercentage", - "type": "uint256" - } - ], - "name": "seed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", - "receipt": { - "to": null, - "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", - "contractAddress": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", - "transactionIndex": 2, - "gasUsed": "674374", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800020000000000000000000000000000400002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3f6621d2901b942014c4508a432addfebef8b7370069078e8c634015dc7a8d40", - "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 5972559, - "transactionHash": "0xa2250d9af6f3d661df81cd0ac2b5f60e3c122373a42a1055e31e558b2b8c256d", - "address": "0x5101aB08b5097bb6bb46aBF51f59a34ede459094", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0x3f6621d2901b942014c4508a432addfebef8b7370069078e8c634015dc7a8d40" - } - ], - "blockNumber": 5972559, - "cumulativeGasUsed": "1066859", - "status": 1, - "byzantium": true - }, - "args": [], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"distributeFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinity\",\"outputs\":[{\"internalType\":\"contract IInfinityProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipients\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"liquidVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"burnPercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_infinity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_burnPercentage\",\"type\":\"uint256\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeDistributor.sol\":\"FeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/FeeDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract FeeDistributor is Ownable {\\n using SafeMath for uint;\\n\\n struct FeeRecipient {\\n address liquidVault;\\n address secondaryAddress;\\n uint256 liquidVaultShare; //percentage between 0 and 100\\n uint256 burnPercentage;\\n }\\n \\n IInfinityProtocol public infinity;\\n FeeRecipient public recipients;\\n\\n bool public initialized;\\n\\n uint private constant MINIMUM_AMOUNT = 1e8;\\n\\n modifier seeded {\\n require(\\n initialized,\\n \\\"FeeDistributor: Fees cannot be distributed until Distributor seeded.\\\"\\n );\\n _;\\n }\\n\\n function seed(\\n address _infinity,\\n address _vault,\\n address _secondaryAddress,\\n uint _liquidVaultShare,\\n uint _burnPercentage\\n ) external onlyOwner {\\n require(\\n _liquidVaultShare.add(_burnPercentage) <= 100,\\n \\\"FeeDistributor: liquidVault + burnPercentage incorrect sets\\\"\\n );\\n infinity = IInfinityProtocol(_infinity);\\n recipients.liquidVault = _vault;\\n recipients.secondaryAddress = _secondaryAddress;\\n recipients.liquidVaultShare = _liquidVaultShare;\\n recipients.burnPercentage = _burnPercentage;\\n initialized = true;\\n }\\n\\n function distributeFees() external seeded {\\n uint balance = infinity.balanceOf(address(this));\\n\\n if (balance < MINIMUM_AMOUNT) {\\n return;\\n }\\n\\n uint liquidShare;\\n uint burningShare;\\n uint secondaryShare;\\n\\n if (recipients.liquidVaultShare > 0) {\\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\\n\\n require(\\n infinity.transfer(recipients.liquidVault, liquidShare),\\n \\\"FeeDistributor: transfer to LiquidVault failed\\\"\\n );\\n }\\n\\n if (recipients.burnPercentage > 0) {\\n burningShare = recipients.burnPercentage.mul(balance).div(100);\\n infinity.burn(burningShare);\\n }\\n\\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\\n if (secondaryShare > 0) {\\n require(\\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\\n \\\"FeeDistributor: transfer to the secondary address failed\\\"\\n );\\n }\\n }\\n}\",\"keccak256\":\"0x98e4d2c721c9ac99ab5162a3b5d2f14ee03f8a1ea29db1c6fb3237c648726d5a\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b610ad08061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1749, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "infinity", - "offset": 0, - "slot": "1", - "type": "t_contract(IInfinityProtocol)4419" - }, - { - "astId": 1751, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "recipients", - "offset": 0, - "slot": "2", - "type": "t_struct(FeeRecipient)1747_storage" - }, - { - "astId": 1753, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "initialized", - "offset": 0, - "slot": "6", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IInfinityProtocol)4419": { - "encoding": "inplace", - "label": "contract IInfinityProtocol", - "numberOfBytes": "20" - }, - "t_struct(FeeRecipient)1747_storage": { - "encoding": "inplace", - "label": "struct FeeDistributor.FeeRecipient", - "members": [ - { - "astId": 1740, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "liquidVault", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1742, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "secondaryAddress", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 1744, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "liquidVaultShare", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 1746, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "burnPercentage", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/deployments/alfajores/InfinityProtocol.json b/deployments/alfajores/InfinityProtocol.json deleted file mode 100644 index ffadfd2..0000000 --- a/deployments/alfajores/InfinityProtocol.json +++ /dev/null @@ -1,917 +0,0 @@ -{ - "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "excludeAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBurnCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBurnFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTradedCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "includeAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isExcluded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxCycles", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transferAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "deductTransferFee", - "type": "bool" - } - ], - "name": "reflectionFromToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "router", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "setFeeReceiver", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setInitialFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxCycles", - "type": "uint256" - } - ], - "name": "setMaxCycles", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rAmount", - "type": "uint256" - } - ], - "name": "tokenFromReflection", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBurnWithFees", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalFees", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", - "receipt": { - "to": null, - "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", - "contractAddress": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", - "transactionIndex": 3, - "gasUsed": "2265321", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000400000000000000020000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000002000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000800000000000000000000000000", - "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac", - "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 5972378, - "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", - "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" - ], - "data": "0x", - "logIndex": 4, - "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac" - }, - { - "transactionIndex": 3, - "blockNumber": 5972378, - "transactionHash": "0x35eea66d0ab8521e5ee0d737d20d4cc9131b84b8f5ef8aecb6fc13b8c8aef54d", - "address": "0x8c88D162C89b2F8bE3fe924f62537d5C41ad1b04", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" - ], - "data": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - "logIndex": 5, - "blockHash": "0x74e97a2b710ee55dd606bfc0c7da8e988cfa08555e917c61bb58d677e807bdac" - } - ], - "blockNumber": 5972378, - "cumulativeGasUsed": "2798400", - "status": 1, - "byzantium": true - }, - "args": [ - "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121" - ], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"excludeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTradedCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"includeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isExcluded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxCycles\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"transferAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"deductTransferFee\",\"type\":\"bool\"}],\"name\":\"reflectionFromToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setInitialFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxCycles\",\"type\":\"uint256\"}],\"name\":\"setMaxCycles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"}],\"name\":\"tokenFromReflection\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurnWithFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/InfinityProtocol.sol\":\"InfinityProtocol\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\",\"keccak256\":\"0x9486045e189facd2e868ece35249872598ef03f1087fb6fa4d1161842daa2287\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/InfinityProtocol.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\nimport \\\"@openzeppelin/contracts/GSN/Context.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\\n\\n using SafeMath for uint;\\n using Address for address;\\n\\n mapping (address => uint) private _rOwned;\\n mapping (address => uint) private _tOwned;\\n mapping (address => mapping (address => uint)) private _allowances;\\n\\n mapping (address => bool) private _isExcluded;\\n address[] private _excluded;\\n address public feeReceiver;\\n address public router;\\n uint public maxCycles;\\n\\n string private constant _NAME = \\\"infinityprotocol.io\\\";\\n string private constant _SYMBOL = \\\"INFINITY\\\";\\n uint8 private constant _DECIMALS = 8;\\n\\n uint private constant _MAX = ~uint(0);\\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\\n uint private constant _GRANULARITY = 100;\\n\\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\\n\\n uint private _tFeeTotal;\\n uint private _tBurnTotal;\\n uint private _infinityCycle;\\n\\n uint private _tTradeCycle;\\n uint private _tBurnCycle;\\n\\n uint private _BURN_FEE;\\n uint private _FOT_FEE;\\n bool private _feeSet;\\n\\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\\n\\n constructor (address _router) public {\\n _rOwned[_msgSender()] = _rTotal;\\n router = _router;\\n setMaxCycles(500);\\n emit Transfer(address(0), _msgSender(), _tTotal);\\n }\\n\\n function name() public pure returns (string memory) {\\n return _NAME;\\n }\\n\\n function symbol() public pure returns (string memory) {\\n return _SYMBOL;\\n }\\n\\n function decimals() public pure override returns (uint8) {\\n return _DECIMALS;\\n }\\n\\n function totalSupply() public view override returns (uint) {\\n return _tTotal;\\n }\\n\\n function balanceOf(address account) public view override returns (uint) {\\n if (_isExcluded[account]) return _tOwned[account];\\n return tokenFromReflection(_rOwned[account]);\\n }\\n\\n function transfer(address recipient, uint amount) public override returns (bool) {\\n _transfer(_msgSender(), recipient, amount);\\n return true;\\n }\\n\\n function allowance(address owner, address spender) public view override returns (uint) {\\n return _allowances[owner][spender];\\n }\\n\\n function approve(address spender, uint amount) public override returns (bool) {\\n _approve(_msgSender(), spender, amount);\\n return true;\\n }\\n\\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\\n _transfer(sender, recipient, amount);\\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n return true;\\n }\\n\\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n return true;\\n }\\n\\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n return true;\\n }\\n\\n function isExcluded(address account) public view returns (bool) {\\n return _isExcluded[account];\\n }\\n\\n function totalFees() public view returns (uint) {\\n return _tFeeTotal;\\n }\\n\\n function totalBurn() public view returns (uint) {\\n return _tBurnTotal;\\n }\\n\\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\\n require(receiver != address(0), \\\"Zero address not allowed\\\");\\n feeReceiver = receiver;\\n return true;\\n }\\n\\n function totalBurnWithFees() public view returns (uint) {\\n return _tBurnTotal.add(_tFeeTotal);\\n }\\n\\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\\n require(transferAmount <= _tTotal, \\\"Amount must be less than supply\\\");\\n if (!deductTransferFee) {\\n (uint rAmount,,,,,) = _getValues(transferAmount);\\n return rAmount;\\n } else {\\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\\n return rTransferAmount;\\n }\\n }\\n\\n function tokenFromReflection(uint rAmount) public view returns(uint) {\\n require(rAmount <= _rTotal, \\\"Amount must be less than total reflections\\\");\\n uint currentRate = _getRate();\\n return rAmount.div(currentRate);\\n }\\n\\n function excludeAccount(address account) external onlyOwner() {\\n require(!_isExcluded[account], \\\"Account is already excluded\\\");\\n require(account != router, 'Not allowed to exclude router');\\n require(account != feeReceiver, \\\"Can not exclude fee receiver\\\");\\n if (_rOwned[account] > 0) {\\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\\n }\\n _isExcluded[account] = true;\\n _excluded.push(account);\\n }\\n\\n function includeAccount(address account) external onlyOwner() {\\n require(_isExcluded[account], \\\"Account is already included\\\");\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_excluded[i] == account) {\\n _excluded[i] = _excluded[_excluded.length - 1];\\n _tOwned[account] = 0;\\n _isExcluded[account] = false;\\n _excluded.pop();\\n break;\\n }\\n }\\n }\\n\\n function _approve(address owner, address spender, uint amount) private {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n function _transfer(address sender, address recipient, uint amount) private {\\n require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n require(amount > 0, \\\"Transfer amount must be greater than zero\\\");\\n\\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\\n // reaches its final phase, in which no further supply elasticity will take place\\n // and fees will stay at 0\\n\\n if (sender != owner() && recipient != owner())\\n require(amount <= _MAX_TX_SIZE, \\\"Transfer amount exceeds the maxTxAmount.\\\");\\n\\n // @dev 50% fee is burn fee, 50% is fot\\n if (_BURN_FEE >= 250) {\\n\\n _tTradeCycle = _tTradeCycle.add(amount);\\n\\n\\n // @dev adjust current burnFee/fotFee depending on the traded tokens\\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\\n _setFees(500);\\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\\n _setFees(550);\\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\\n _setFees(600);\\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\\n _setFees(650);\\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\\n _setFees(700);\\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\\n _setFees(750);\\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\\n _setFees(800);\\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\\n _setFees(850);\\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\\n _setFees(900);\\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\\n _setFees(950);\\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\\n _setFees(1000);\\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\\n _setFees(1050);\\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\\n _setFees(1100);\\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\\n _setFees(1150);\\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\\n _setFees(1200);\\n }\\n }\\n\\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferFromExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferToExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferStandard(sender, recipient, amount);\\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferBothExcluded(sender, recipient, amount);\\n } else {\\n _transferStandard(sender, recipient, amount);\\n }\\n }\\n\\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\\n _rTotal = _rTotal.sub(rBurn);\\n _tFeeTotal = _tFeeTotal.add(transferFee);\\n _tBurnTotal = _tBurnTotal.add(transferBurn);\\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\\n _tTotal = _tTotal.sub(transferBurn);\\n\\n\\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \\n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\\n //set rebase percent\\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\\n _tTradeCycle = 0;\\n _setFees(500);\\n\\n _rebase(_tRebaseDelta);\\n }\\n }\\n\\n function burn(uint amount) external override returns (bool) {\\n address sender = _msgSender();\\n uint balance = balanceOf(sender);\\n require(balance >= amount, \\\"Cannot burn more than on balance\\\");\\n require(sender == feeReceiver, \\\"Only feeReceiver\\\");\\n\\n uint rBurn = amount.mul(_getRate());\\n _rTotal = _rTotal.sub(rBurn);\\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\\n\\n _tBurnTotal = _tBurnTotal.add(amount);\\n _tTotal = _tTotal.sub(amount);\\n\\n emit Transfer(sender, address(0), amount);\\n return true;\\n }\\n\\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\\n return (tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\\n uint currentRate = _getRate();\\n uint rAmount = transferAmount.mul(currentRate);\\n uint rFee = transferFee.mul(currentRate);\\n uint rBurn = transferBurn.mul(currentRate);\\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\\n return (rAmount, rTransferAmount, rFee);\\n }\\n\\n function _getRate() private view returns(uint) {\\n (uint rSupply, uint tSupply) = _getCurrentSupply();\\n return rSupply.div(tSupply);\\n }\\n\\n function _getCurrentSupply() private view returns(uint, uint) {\\n uint rSupply = _rTotal;\\n uint tSupply = _tTotal;\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\\n }\\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\\n return (rSupply, tSupply);\\n }\\n\\n\\n function _setFees(uint fee) private {\\n require(fee >= 0 && fee <= 1500, \\\"fee should be in 0 - 15%\\\");\\n if (_BURN_FEE == fee.div(2)) {\\n return;\\n }\\n\\n _BURN_FEE = fee.div(2);\\n _FOT_FEE = fee.div(2);\\n }\\n\\n function setInitialFee() external onlyOwner() {\\n require(!_feeSet, \\\"Initial fee already set\\\");\\n _setFees(500);\\n _feeSet = true;\\n }\\n\\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\\n require(_maxCycles >= _infinityCycle, \\\"Can not set more than current cycle\\\");\\n maxCycles = _maxCycles;\\n }\\n\\n function getBurnFee() public view returns(uint) {\\n return _BURN_FEE;\\n }\\n\\n function getFee() public view returns(uint) {\\n return _FOT_FEE;\\n }\\n\\n function _getMaxTxAmount() private pure returns(uint) {\\n return _MAX_TX_SIZE;\\n }\\n\\n function getCycle() public view returns(uint) {\\n return _infinityCycle;\\n }\\n\\n function getBurnCycle() public view returns(uint) {\\n return _tBurnCycle;\\n }\\n\\n function getTradedCycle() public view returns(uint) {\\n return _tTradeCycle;\\n }\\n\\n function _rebase(uint supplyDelta) internal {\\n _infinityCycle = _infinityCycle.add(1);\\n _tTotal = _tTotal.add(supplyDelta);\\n\\n if (_infinityCycle > maxCycles) {\\n _setFees(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x64cca0b72006a7b6178354fc1ede3f320e437204b05cea400fc0b63ba2680e42\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", - "bytecode": "0x6080604052662386f26fc10000600955660e3d2cfe61ffff19600a553480156200002857600080fd5b50604051620027f6380380620027f6833981810160405260208110156200004e57600080fd5b505160006200005c62000158565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460016000620000b762000158565b6001600160a01b039081168252602082019290925260400160002091909155600780546001600160a01b031916918316919091179055620000fa6101f46200015c565b6200010462000158565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200022c565b3390565b6200016662000158565b6001600160a01b0316620001796200021d565b6001600160a01b031614620001d5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d54811015620002185760405162461bcd60e51b8152600401808060200182810382526023815260200180620027d36023913960400191505060405180910390fd5b600855565b6000546001600160a01b031690565b612597806200023c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c6343000704003343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c65", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1955, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_rOwned", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1959, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tOwned", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1965, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_allowances", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 1969, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_isExcluded", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 1972, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_excluded", - "offset": 0, - "slot": "5", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 1974, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "feeReceiver", - "offset": 0, - "slot": "6", - "type": "t_address" - }, - { - "astId": 1976, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "router", - "offset": 0, - "slot": "7", - "type": "t_address" - }, - { - "astId": 1978, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "maxCycles", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 2010, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tTotal", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 2019, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_rTotal", - "offset": 0, - "slot": "10", - "type": "t_uint256" - }, - { - "astId": 2021, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tFeeTotal", - "offset": 0, - "slot": "11", - "type": "t_uint256" - }, - { - "astId": 2023, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tBurnTotal", - "offset": 0, - "slot": "12", - "type": "t_uint256" - }, - { - "astId": 2025, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_infinityCycle", - "offset": 0, - "slot": "13", - "type": "t_uint256" - }, - { - "astId": 2027, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tTradeCycle", - "offset": 0, - "slot": "14", - "type": "t_uint256" - }, - { - "astId": 2029, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tBurnCycle", - "offset": 0, - "slot": "15", - "type": "t_uint256" - }, - { - "astId": 2031, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_BURN_FEE", - "offset": 0, - "slot": "16", - "type": "t_uint256" - }, - { - "astId": 2033, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_FOT_FEE", - "offset": 0, - "slot": "17", - "type": "t_uint256" - }, - { - "astId": 2035, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_feeSet", - "offset": 0, - "slot": "18", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/deployments/alfajores/LiquidVault.json b/deployments/alfajores/LiquidVault.json deleted file mode 100644 index e9f6bee..0000000 --- a/deployments/alfajores/LiquidVault.json +++ /dev/null @@ -1,773 +0,0 @@ -{ - "address": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "percentageAmount", - "type": "uint256" - } - ], - "name": "EthTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "exitFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "claimed", - "type": "bool" - } - ], - "name": "LPClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eth", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "infinityToken", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "LPQueued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "claimLP", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "config", - "outputs": [ - { - "internalType": "address", - "name": "infinityToken", - "type": "address" - }, - { - "internalType": "contract IUniswapV2Router02", - "name": "uniswapRouter", - "type": "address" - }, - { - "internalType": "contract IUniswapV2Pair", - "name": "tokenPair", - "type": "address" - }, - { - "internalType": "contract IFeeDistributor", - "name": "feeDistributor", - "type": "address" - }, - { - "internalType": "address", - "name": "weth", - "type": "address" - }, - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "stakeDuration", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "enableLPForceUnlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceUnlock", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "position", - "type": "uint256" - } - ], - "name": "getLockedLP", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakeDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "lockedLP", - "outputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "claimed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - } - ], - "name": "lockedLPLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "purchaseLP", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "purchaseLPFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "queueCounter", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "duration", - "type": "uint32" - }, - { - "internalType": "address", - "name": "infinityToken", - "type": "address" - }, - { - "internalType": "address", - "name": "uniswapPair", - "type": "address" - }, - { - "internalType": "address", - "name": "uniswapRouter", - "type": "address" - }, - { - "internalType": "address", - "name": "feeDistributor", - "type": "address" - }, - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "name": "seed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "setFeeReceiverAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "duration", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "name": "setParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", - "receipt": { - "to": null, - "from": "0x4EDd89Ef21105a3114ED0992b672F9c37bA4624d", - "contractAddress": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", - "transactionIndex": 0, - "gasUsed": "1399718", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000080000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000004000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x69875cb1da1ad370fa410882fa2ae84bbdf68deac57f7d3061447be00f285a05", - "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 5972470, - "transactionHash": "0x0c8379b6ef5b4d93d16526a6b9f65db60160f2ee3b5ea864f356f7717ba36ab6", - "address": "0x80662587b250cA6C7F7d34f752089eB62E13Dba0", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000004edd89ef21105a3114ed0992b672f9c37ba4624d" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x69875cb1da1ad370fa410882fa2ae84bbdf68deac57f7d3061447be00f285a05" - } - ], - "blockNumber": 5972470, - "cumulativeGasUsed": "1399718", - "status": 1, - "byzantium": true - }, - "args": [], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"percentageAmount\",\"type\":\"uint256\"}],\"name\":\"EthTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"name\":\"LPClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"infinityToken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"LPQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimLP\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Pair\",\"name\":\"tokenPair\",\"type\":\"address\"},{\"internalType\":\"contract IFeeDistributor\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakeDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableLPForceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"getLockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"lockedLPLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"purchaseLP\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"purchaseLPFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"queueCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapPair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiverAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"setParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"EthTransferred(address,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called to track ETH amounts \"},\"LPClaimed(address,uint256,uint256,uint256,bool)\":{\"notice\":\"Emitted when claimLP() is called \"},\"LPQueued(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called and LP tokens minted \"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/vaults/LiquidVault.sol\":\"LiquidVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IUniswapV2Pair {\\n event Approval(address indexed owner, address indexed spender, uint value);\\n event Transfer(address indexed from, address indexed to, uint value);\\n\\n function name() external pure returns (string memory);\\n function symbol() external pure returns (string memory);\\n function decimals() external pure returns (uint8);\\n function totalSupply() external view returns (uint);\\n function balanceOf(address owner) external view returns (uint);\\n function allowance(address owner, address spender) external view returns (uint);\\n\\n function approve(address spender, uint value) external returns (bool);\\n function transfer(address to, uint value) external returns (bool);\\n function transferFrom(address from, address to, uint value) external returns (bool);\\n\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n function PERMIT_TYPEHASH() external pure returns (bytes32);\\n function nonces(address owner) external view returns (uint);\\n\\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\\n\\n event Mint(address indexed sender, uint amount0, uint amount1);\\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\\n event Swap(\\n address indexed sender,\\n uint amount0In,\\n uint amount1In,\\n uint amount0Out,\\n uint amount1Out,\\n address indexed to\\n );\\n event Sync(uint112 reserve0, uint112 reserve1);\\n\\n function MINIMUM_LIQUIDITY() external pure returns (uint);\\n function factory() external view returns (address);\\n function token0() external view returns (address);\\n function token1() external view returns (address);\\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\n function price0CumulativeLast() external view returns (uint);\\n function price1CumulativeLast() external view returns (uint);\\n function kLast() external view returns (uint);\\n\\n function mint(address to) external returns (uint liquidity);\\n function burn(address to) external returns (uint amount0, uint amount1);\\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\\n function skim(address to) external;\\n function sync() external;\\n\\n function initialize(address, address) external;\\n}\\n\",\"keccak256\":\"0x7c9bc70e5996c763e02ff38905282bc24fb242b0ef2519a003b36824fc524a4b\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\ninterface IUniswapV2Router01 {\\n function factory() external pure returns (address);\\n function WETH() external pure returns (address);\\n\\n function addLiquidity(\\n address tokenA,\\n address tokenB,\\n uint amountADesired,\\n uint amountBDesired,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB, uint liquidity);\\n function addLiquidityETH(\\n address token,\\n uint amountTokenDesired,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\\n function removeLiquidity(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETH(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountToken, uint amountETH);\\n function removeLiquidityWithPermit(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETHWithPermit(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountToken, uint amountETH);\\n function swapExactTokensForTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapTokensForExactTokens(\\n uint amountOut,\\n uint amountInMax,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n\\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\\n}\\n\",\"keccak256\":\"0x8a3c5c449d4b7cd76513ed6995f4b86e4a86f222c770f8442f5fc128ce29b4d2\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\nimport './IUniswapV2Router01.sol';\\n\\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\\n function removeLiquidityETHSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountETH);\\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountETH);\\n\\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external payable;\\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n}\\n\",\"keccak256\":\"0x744e30c133bd0f7ca9e7163433cf6d72f45c6bb1508c2c9c02f1a6db796ae59d\"},\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IWETH {\\n function deposit() external payable;\\n function transfer(address to, uint value) external returns (bool);\\n function withdraw(uint) external;\\n}\\n\",\"keccak256\":\"0xfc10758fd8dba790c39468dccd358cb7cef06ae7c4781832cc7aa76f91f167e6\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IFeeDistributor.sol\":{\"content\":\"interface IFeeDistributor {\\n function distributeFees() external;\\n}\",\"keccak256\":\"0x8cace30edd60bc477fb3fe56655259d416d12002de3ce4e25505088334365eb2\"},\"contracts/vaults/LiquidVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../interfaces/IERC20.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\\\";\\nimport \\\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\\\";\\nimport \\\"../interfaces/IFeeDistributor.sol\\\";\\n\\ncontract LiquidVault is Ownable {\\n /** Emitted when purchaseLP() is called to track ETH amounts */\\n event EthTransferred(\\n address from,\\n uint amount,\\n uint percentageAmount\\n );\\n\\n /** Emitted when purchaseLP() is called and LP tokens minted */\\n event LPQueued(\\n address holder,\\n uint amount,\\n uint eth,\\n uint infinityToken,\\n uint timestamp\\n );\\n\\n /** Emitted when claimLP() is called */\\n event LPClaimed(\\n address holder,\\n uint amount,\\n uint timestamp,\\n uint exitFee,\\n bool claimed\\n );\\n\\n struct LPbatch {\\n address holder;\\n uint amount;\\n uint timestamp;\\n bool claimed;\\n }\\n\\n struct LiquidVaultConfig {\\n address infinityToken;\\n IUniswapV2Router02 uniswapRouter;\\n IUniswapV2Pair tokenPair;\\n IFeeDistributor feeDistributor;\\n address weth;\\n address payable feeReceiver;\\n uint32 stakeDuration;\\n uint8 donationShare; //0-100\\n uint8 purchaseFee; //0-100\\n }\\n \\n bool public forceUnlock;\\n bool private locked;\\n\\n modifier lock {\\n require(!locked, \\\"LiquidVault: reentrancy violation\\\");\\n locked = true;\\n _;\\n locked = false;\\n }\\n\\n LiquidVaultConfig public config;\\n\\n mapping(address => LPbatch[]) public lockedLP;\\n mapping(address => uint) public queueCounter;\\n\\n function seed(\\n uint32 duration,\\n address infinityToken,\\n address uniswapPair,\\n address uniswapRouter,\\n address feeDistributor,\\n address payable feeReceiver,\\n uint8 donationShare, // LP Token\\n uint8 purchaseFee // ETH\\n ) public onlyOwner {\\n config.infinityToken = infinityToken;\\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\\n config.tokenPair = IUniswapV2Pair(uniswapPair);\\n config.feeDistributor = IFeeDistributor(feeDistributor);\\n config.weth = config.uniswapRouter.WETH();\\n setFeeReceiverAddress(feeReceiver);\\n setParameters(duration, donationShare, purchaseFee);\\n }\\n\\n function getStakeDuration() public view returns (uint) {\\n return forceUnlock ? 0 : config.stakeDuration;\\n }\\n\\n // Could not be canceled if activated\\n function enableLPForceUnlock() public onlyOwner {\\n forceUnlock = true;\\n }\\n\\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\\n require(\\n feeReceiver != address(0),\\n \\\"LiquidVault: ETH receiver is zero address\\\"\\n );\\n\\n config.feeReceiver = feeReceiver;\\n }\\n\\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\\n public\\n onlyOwner\\n {\\n require(\\n donationShare <= 100,\\n \\\"LiquidVault: donation share % between 0 and 100\\\"\\n );\\n require(\\n purchaseFee <= 100,\\n \\\"LiquidVault: purchase fee share % between 0 and 100\\\"\\n );\\n\\n config.stakeDuration = duration * 1 days;\\n config.donationShare = donationShare;\\n config.purchaseFee = purchaseFee;\\n }\\n\\n function purchaseLPFor(address beneficiary) public payable lock {\\n config.feeDistributor.distributeFees();\\n require(msg.value > 0, \\\"LiquidVault: ETH required to mint INFINITY LP\\\");\\n\\n uint feeValue = (config.purchaseFee * msg.value) / 100;\\n uint exchangeValue = msg.value - feeValue;\\n\\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\\n\\n uint infinityRequired;\\n\\n if (address(config.infinityToken) < address(config.weth)) {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve2,\\n reserve1\\n );\\n } else {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve1,\\n reserve2\\n );\\n }\\n\\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\\n require(\\n balance >= infinityRequired,\\n \\\"LiquidVault: insufficient INFINITY tokens in LiquidVault\\\"\\n );\\n\\n IWETH(config.weth).deposit{ value: exchangeValue }();\\n address tokenPairAddress = address(config.tokenPair);\\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\\n IERC20(config.infinityToken).transfer(\\n tokenPairAddress,\\n infinityRequired\\n );\\n\\n uint liquidityCreated = config.tokenPair.mint(address(this));\\n config.feeReceiver.transfer(feeValue);\\n\\n lockedLP[beneficiary].push(\\n LPbatch({\\n holder: beneficiary,\\n amount: liquidityCreated,\\n timestamp: block.timestamp,\\n claimed: false\\n })\\n );\\n\\n emit LPQueued(\\n beneficiary,\\n liquidityCreated,\\n exchangeValue,\\n infinityRequired,\\n block.timestamp\\n );\\n\\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\\n }\\n\\n //send ETH to match with INFINITY tokens in LiquidVault\\n function purchaseLP() public payable {\\n purchaseLPFor(msg.sender);\\n }\\n\\n function claimLP() public {\\n uint next = queueCounter[msg.sender];\\n require(\\n next < lockedLP[msg.sender].length,\\n \\\"LiquidVault: nothing to claim.\\\"\\n );\\n LPbatch storage batch = lockedLP[msg.sender][next];\\n require(\\n block.timestamp - batch.timestamp > getStakeDuration(),\\n \\\"LiquidVault: LP still locked.\\\"\\n );\\n next++;\\n queueCounter[msg.sender] = next;\\n uint donation = (config.donationShare * batch.amount) / 100;\\n batch.claimed = true;\\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\\n require(\\n config.tokenPair.transfer(address(0), donation),\\n \\\"LiquidVault: donation transfer failed in LP claim.\\\"\\n );\\n require(\\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\\n \\\"LiquidVault: transfer failed in LP claim.\\\"\\n );\\n }\\n\\n function lockedLPLength(address holder) public view returns (uint) {\\n return lockedLP[holder].length;\\n }\\n\\n function getLockedLP(address holder, uint position)\\n public\\n view\\n returns (\\n address,\\n uint,\\n uint,\\n bool\\n )\\n {\\n LPbatch memory batch = lockedLP[holder][position];\\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\\n }\\n}\",\"keccak256\":\"0xf470245efe80b6887c8d5f7a5408c46fca8b4cb1cfcaac363281ce26c031694c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6117ef8061007d6000396000f3fe6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", - "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "events": { - "EthTransferred(address,uint256,uint256)": { - "notice": "Emitted when purchaseLP() is called to track ETH amounts " - }, - "LPClaimed(address,uint256,uint256,uint256,bool)": { - "notice": "Emitted when claimLP() is called " - }, - "LPQueued(address,uint256,uint256,uint256,uint256)": { - "notice": "Emitted when purchaseLP() is called and LP tokens minted " - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5821, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "forceUnlock", - "offset": 20, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 5823, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "locked", - "offset": 21, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 5843, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "config", - "offset": 0, - "slot": "1", - "type": "t_struct(LiquidVaultConfig)5819_storage" - }, - { - "astId": 5848, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "lockedLP", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)" - }, - { - "astId": 5852, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "queueCounter", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_address_payable": { - "encoding": "inplace", - "label": "address payable", - "numberOfBytes": "20" - }, - "t_array(t_struct(LPbatch)5800_storage)dyn_storage": { - "base": "t_struct(LPbatch)5800_storage", - "encoding": "dynamic_array", - "label": "struct LiquidVault.LPbatch[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IFeeDistributor)4407": { - "encoding": "inplace", - "label": "contract IFeeDistributor", - "numberOfBytes": "20" - }, - "t_contract(IUniswapV2Pair)1205": { - "encoding": "inplace", - "label": "contract IUniswapV2Pair", - "numberOfBytes": "20" - }, - "t_contract(IUniswapV2Router02)1601": { - "encoding": "inplace", - "label": "contract IUniswapV2Router02", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LiquidVault.LPbatch[])", - "numberOfBytes": "32", - "value": "t_array(t_struct(LPbatch)5800_storage)dyn_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(LPbatch)5800_storage": { - "encoding": "inplace", - "label": "struct LiquidVault.LPbatch", - "members": [ - { - "astId": 5793, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "holder", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5795, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "amount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 5797, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "timestamp", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 5799, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "claimed", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_struct(LiquidVaultConfig)5819_storage": { - "encoding": "inplace", - "label": "struct LiquidVault.LiquidVaultConfig", - "members": [ - { - "astId": 5802, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "infinityToken", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5804, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "uniswapRouter", - "offset": 0, - "slot": "1", - "type": "t_contract(IUniswapV2Router02)1601" - }, - { - "astId": 5806, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "tokenPair", - "offset": 0, - "slot": "2", - "type": "t_contract(IUniswapV2Pair)1205" - }, - { - "astId": 5808, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "feeDistributor", - "offset": 0, - "slot": "3", - "type": "t_contract(IFeeDistributor)4407" - }, - { - "astId": 5810, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "weth", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 5812, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "feeReceiver", - "offset": 0, - "slot": "5", - "type": "t_address_payable" - }, - { - "astId": 5814, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "stakeDuration", - "offset": 20, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 5816, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "donationShare", - "offset": 24, - "slot": "5", - "type": "t_uint8" - }, - { - "astId": 5818, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "purchaseFee", - "offset": 25, - "slot": "5", - "type": "t_uint8" - } - ], - "numberOfBytes": "192" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - } -} \ No newline at end of file diff --git a/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json b/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json deleted file mode 100644 index dd31a68..0000000 --- a/deployments/alfajores/solcInputs/50935558cf5835f525f697d3157617bd.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "contracts/FeeDistributor.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract FeeDistributor is Ownable {\n using SafeMath for uint;\n\n struct FeeRecipient {\n address liquidVault;\n address secondaryAddress;\n uint256 liquidVaultShare; //percentage between 0 and 100\n uint256 burnPercentage;\n }\n \n IInfinityProtocol public infinity;\n FeeRecipient public recipients;\n\n bool public initialized;\n\n uint private constant MINIMUM_AMOUNT = 1e8;\n\n modifier seeded {\n require(\n initialized,\n \"FeeDistributor: Fees cannot be distributed until Distributor seeded.\"\n );\n _;\n }\n\n function seed(\n address _infinity,\n address _vault,\n address _secondaryAddress,\n uint _liquidVaultShare,\n uint _burnPercentage\n ) external onlyOwner {\n require(\n _liquidVaultShare.add(_burnPercentage) <= 100,\n \"FeeDistributor: liquidVault + burnPercentage incorrect sets\"\n );\n infinity = IInfinityProtocol(_infinity);\n recipients.liquidVault = _vault;\n recipients.secondaryAddress = _secondaryAddress;\n recipients.liquidVaultShare = _liquidVaultShare;\n recipients.burnPercentage = _burnPercentage;\n initialized = true;\n }\n\n function distributeFees() external seeded {\n uint balance = infinity.balanceOf(address(this));\n\n if (balance < MINIMUM_AMOUNT) {\n return;\n }\n\n uint liquidShare;\n uint burningShare;\n uint secondaryShare;\n\n if (recipients.liquidVaultShare > 0) {\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\n\n require(\n infinity.transfer(recipients.liquidVault, liquidShare),\n \"FeeDistributor: transfer to LiquidVault failed\"\n );\n }\n\n if (recipients.burnPercentage > 0) {\n burningShare = recipients.burnPercentage.mul(balance).div(100);\n infinity.burn(burningShare);\n }\n\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\n if (secondaryShare > 0) {\n require(\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\n \"FeeDistributor: transfer to the secondary address failed\"\n );\n }\n }\n}" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "contracts/interfaces/IInfinityProtocol.sol": { - "content": "import \"./IERC20.sol\";\n\ninterface IInfinityProtocol is IERC20 {\n function burn(uint amount) external returns (bool);\n}" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "contracts/interfaces/IERC20.sol": { - "content": "pragma solidity 0.7.4;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function decimals() external pure returns (uint8);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}" - }, - "contracts/InfinityProtocol.sol": { - "content": "pragma solidity 0.7.4;\n\nimport \"@openzeppelin/contracts/GSN/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\n\n using SafeMath for uint;\n using Address for address;\n\n mapping (address => uint) private _rOwned;\n mapping (address => uint) private _tOwned;\n mapping (address => mapping (address => uint)) private _allowances;\n\n mapping (address => bool) private _isExcluded;\n address[] private _excluded;\n address public feeReceiver;\n address public router;\n uint public maxCycles;\n\n string private constant _NAME = \"infinityprotocol.io\";\n string private constant _SYMBOL = \"INFINITY\";\n uint8 private constant _DECIMALS = 8;\n\n uint private constant _MAX = ~uint(0);\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\n uint private constant _GRANULARITY = 100;\n\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\n\n uint private _tFeeTotal;\n uint private _tBurnTotal;\n uint private _infinityCycle;\n\n uint private _tTradeCycle;\n uint private _tBurnCycle;\n\n uint private _BURN_FEE;\n uint private _FOT_FEE;\n bool private _feeSet;\n\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\n\n constructor (address _router) public {\n _rOwned[_msgSender()] = _rTotal;\n router = _router;\n setMaxCycles(500);\n emit Transfer(address(0), _msgSender(), _tTotal);\n }\n\n function name() public pure returns (string memory) {\n return _NAME;\n }\n\n function symbol() public pure returns (string memory) {\n return _SYMBOL;\n }\n\n function decimals() public pure override returns (uint8) {\n return _DECIMALS;\n }\n\n function totalSupply() public view override returns (uint) {\n return _tTotal;\n }\n\n function balanceOf(address account) public view override returns (uint) {\n if (_isExcluded[account]) return _tOwned[account];\n return tokenFromReflection(_rOwned[account]);\n }\n\n function transfer(address recipient, uint amount) public override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint amount) public override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n function isExcluded(address account) public view returns (bool) {\n return _isExcluded[account];\n }\n\n function totalFees() public view returns (uint) {\n return _tFeeTotal;\n }\n\n function totalBurn() public view returns (uint) {\n return _tBurnTotal;\n }\n\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\n require(receiver != address(0), \"Zero address not allowed\");\n feeReceiver = receiver;\n return true;\n }\n\n function totalBurnWithFees() public view returns (uint) {\n return _tBurnTotal.add(_tFeeTotal);\n }\n\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\n require(transferAmount <= _tTotal, \"Amount must be less than supply\");\n if (!deductTransferFee) {\n (uint rAmount,,,,,) = _getValues(transferAmount);\n return rAmount;\n } else {\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\n return rTransferAmount;\n }\n }\n\n function tokenFromReflection(uint rAmount) public view returns(uint) {\n require(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n uint currentRate = _getRate();\n return rAmount.div(currentRate);\n }\n\n function excludeAccount(address account) external onlyOwner() {\n require(!_isExcluded[account], \"Account is already excluded\");\n require(account != router, 'Not allowed to exclude router');\n require(account != feeReceiver, \"Can not exclude fee receiver\");\n if (_rOwned[account] > 0) {\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\n }\n _isExcluded[account] = true;\n _excluded.push(account);\n }\n\n function includeAccount(address account) external onlyOwner() {\n require(_isExcluded[account], \"Account is already included\");\n for (uint i = 0; i < _excluded.length; i++) {\n if (_excluded[i] == account) {\n _excluded[i] = _excluded[_excluded.length - 1];\n _tOwned[account] = 0;\n _isExcluded[account] = false;\n _excluded.pop();\n break;\n }\n }\n }\n\n function _approve(address owner, address spender, uint amount) private {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n function _transfer(address sender, address recipient, uint amount) private {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n require(amount > 0, \"Transfer amount must be greater than zero\");\n\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\n // reaches its final phase, in which no further supply elasticity will take place\n // and fees will stay at 0\n\n if (sender != owner() && recipient != owner())\n require(amount <= _MAX_TX_SIZE, \"Transfer amount exceeds the maxTxAmount.\");\n\n // @dev 50% fee is burn fee, 50% is fot\n if (_BURN_FEE >= 250) {\n\n _tTradeCycle = _tTradeCycle.add(amount);\n\n\n // @dev adjust current burnFee/fotFee depending on the traded tokens\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\n _setFees(500);\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\n _setFees(550);\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\n _setFees(600);\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\n _setFees(650);\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\n _setFees(700);\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\n _setFees(750);\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\n _setFees(800);\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\n _setFees(850);\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\n _setFees(900);\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\n _setFees(950);\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\n _setFees(1000);\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\n _setFees(1050);\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\n _setFees(1100);\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\n _setFees(1150);\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\n _setFees(1200);\n }\n }\n\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferFromExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\n _transferToExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferStandard(sender, recipient, amount);\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\n _transferBothExcluded(sender, recipient, amount);\n } else {\n _transferStandard(sender, recipient, amount);\n }\n }\n\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\n _rTotal = _rTotal.sub(rBurn);\n _tFeeTotal = _tFeeTotal.add(transferFee);\n _tBurnTotal = _tBurnTotal.add(transferBurn);\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\n _tTotal = _tTotal.sub(transferBurn);\n\n\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\n //set rebase percent\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\n _tTradeCycle = 0;\n _setFees(500);\n\n _rebase(_tRebaseDelta);\n }\n }\n\n function burn(uint amount) external override returns (bool) {\n address sender = _msgSender();\n uint balance = balanceOf(sender);\n require(balance >= amount, \"Cannot burn more than on balance\");\n require(sender == feeReceiver, \"Only feeReceiver\");\n\n uint rBurn = amount.mul(_getRate());\n _rTotal = _rTotal.sub(rBurn);\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\n\n _tBurnTotal = _tBurnTotal.add(amount);\n _tTotal = _tTotal.sub(amount);\n\n emit Transfer(sender, address(0), amount);\n return true;\n }\n\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\n }\n\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\n return (tTransferAmount, transferFee, transferBurn);\n }\n\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\n uint currentRate = _getRate();\n uint rAmount = transferAmount.mul(currentRate);\n uint rFee = transferFee.mul(currentRate);\n uint rBurn = transferBurn.mul(currentRate);\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\n return (rAmount, rTransferAmount, rFee);\n }\n\n function _getRate() private view returns(uint) {\n (uint rSupply, uint tSupply) = _getCurrentSupply();\n return rSupply.div(tSupply);\n }\n\n function _getCurrentSupply() private view returns(uint, uint) {\n uint rSupply = _rTotal;\n uint tSupply = _tTotal;\n for (uint i = 0; i < _excluded.length; i++) {\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\n }\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n return (rSupply, tSupply);\n }\n\n\n function _setFees(uint fee) private {\n require(fee >= 0 && fee <= 1500, \"fee should be in 0 - 15%\");\n if (_BURN_FEE == fee.div(2)) {\n return;\n }\n\n _BURN_FEE = fee.div(2);\n _FOT_FEE = fee.div(2);\n }\n\n function setInitialFee() external onlyOwner() {\n require(!_feeSet, \"Initial fee already set\");\n _setFees(500);\n _feeSet = true;\n }\n\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\n require(_maxCycles >= _infinityCycle, \"Can not set more than current cycle\");\n maxCycles = _maxCycles;\n }\n\n function getBurnFee() public view returns(uint) {\n return _BURN_FEE;\n }\n\n function getFee() public view returns(uint) {\n return _FOT_FEE;\n }\n\n function _getMaxTxAmount() private pure returns(uint) {\n return _MAX_TX_SIZE;\n }\n\n function getCycle() public view returns(uint) {\n return _infinityCycle;\n }\n\n function getBurnCycle() public view returns(uint) {\n return _tBurnCycle;\n }\n\n function getTradedCycle() public view returns(uint) {\n return _tTradeCycle;\n }\n\n function _rebase(uint supplyDelta) internal {\n _infinityCycle = _infinityCycle.add(1);\n _tTotal = _tTotal.add(supplyDelta);\n\n if (_infinityCycle > maxCycles) {\n _setFees(0);\n }\n }\n}\n" - }, - "@openzeppelin/contracts/GSN/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "contracts/vaults/HodlerVaultSpace.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport '@openzeppelin/contracts/math/SafeMath.sol';\nimport \"../interfaces/IERC20.sol\";\n\ncontract HodlerVaultSpace is Ownable {\n using SafeMath for uint;\n\n /** Emitted when purchaseLP() is called to track INFINITY amounts */\n event InfinityTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address hodler,\n uint amount,\n uint eth,\n uint infinityTokens,\n uint timeStamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address hodler,\n uint amount,\n uint timestamp,\n uint donation\n );\n\n struct LPbatch {\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct HodlerVaultConfig {\n IERC20 infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool private locked;\n bool public forceUnlock;\n\n modifier lock {\n require(!locked, \"HodlerVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n HodlerVaultConfig public config;\n //Front end can loop through this and inspect if enough time has passed\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n receive() external payable {}\n\n function maxTokensToInvest() external view returns (uint) {\n uint totalETH = address(this).balance;\n if (totalETH == 0) {\n return 0;\n }\n\n uint infinityMaxAllowed;\n\n (uint reserve1, uint reserve2,) = config.tokenPair.getReserves();\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve2,\n reserve1\n );\n } else {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve1,\n reserve2\n );\n }\n\n return infinityMaxAllowed;\n }\n\n\n function getLockedLP(address hodler, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[hodler][position];\n return (hodler, batch.amount, batch.timestamp, batch.claimed);\n }\n\n function lockedLPLength(address hodler) external view returns (uint) {\n return lockedLP[hodler].length;\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n function seed(\n uint32 duration,\n IERC20 infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address payable feeReceiver,\n uint8 purchaseFee // INFINITY\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, 0, purchaseFee);\n setFeeReceiver(feeReceiver);\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"HodlerVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"HodlerVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n\n function setFeeReceiver(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"HodlerVaultSpace: fee receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function purchaseLP(uint amount) external lock {\n require(amount > 0, \"HodlerVaultSpace: INFINITY required to mint LP\");\n require(config.infinityToken.balanceOf(msg.sender) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens\");\n require(config.infinityToken.allowance(msg.sender, address(this)) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens allowance\");\n\n uint infinityFee = amount.mul(config.purchaseFee).div(100);\n uint netInfinity = amount.sub(infinityFee);\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint ethRequired;\n\n if (address(config.infinityToken) > address(config.weth)) {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve2,\n reserve1\n );\n } else {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve1,\n reserve2\n );\n }\n\n require(\n address(this).balance >= ethRequired,\n \"HodlerVaultSpace: insufficient ETH on HodlerVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: ethRequired }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, ethRequired);\n config.infinityToken.transferFrom(\n msg.sender,\n tokenPairAddress,\n netInfinity\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n if (infinityFee > 0 && config.feeReceiver != address(0)) {\n config.infinityToken.transferFrom(\n msg.sender,\n config.feeReceiver,\n infinityFee\n );\n }\n\n lockedLP[msg.sender].push(\n LPbatch({\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n msg.sender,\n liquidityCreated,\n ethRequired,\n netInfinity,\n block.timestamp\n );\n\n emit InfinityTransferred(msg.sender, netInfinity, infinityFee);\n }\n\n //pops latest LP if older than period\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"HodlerVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"HodlerVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"HodlerVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(msg.sender, batch.amount - donation),\n \"HodlerVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { - "content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { - "content": "pragma solidity >=0.5.0;\n\ninterface IWETH {\n function deposit() external payable;\n function transfer(address to, uint value) external returns (bool);\n function withdraw(uint) external;\n}\n" - }, - "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { - "content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { - "content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n" - }, - "contracts/vaults/PowerLiquidVault.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract PowerLiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n uint public constant MINIMUM_BUY_PRESSURE_AMOUNT = 1e14; //0,0001 ETH minimum\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"PowerLiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"PowerLiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"PowerLiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"PowerLiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"PowerLiquidVault: insufficient INFINITY tokens in PowerLiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in PowerLiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"PowerLiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"PowerLiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"PowerLiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"PowerLiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function buyPressure() external {\n uint weiBalance = address(this).balance;\n require(\n weiBalance > MINIMUM_BUY_PRESSURE_AMOUNT, \n \"PowerLiquidVault: ETH amount must be > 0,0001 ETH.\"\n );\n\n address[] memory path = new address[](2);\n path[0] = address(config.weth);\n path[1] = address(config.infinityToken);\n\n config.uniswapRouter.swapExactETHForTokens{ value: weiBalance }(\n 0,\n path,\n address(this),\n block.timestamp\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" - }, - "contracts/interfaces/IFeeDistributor.sol": { - "content": "interface IFeeDistributor {\n function distributeFees() external;\n}" - }, - "contracts/vaults/LiquidVault.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract LiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n \n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"LiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable feeReceiver,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setFeeReceiverAddress(feeReceiver);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"LiquidVault: ETH receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"LiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"LiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"LiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"LiquidVault: insufficient INFINITY tokens in LiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n config.feeReceiver.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in LiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"LiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"LiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"LiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"LiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" - }, - "contracts/vaults/AcceleratorVaultSpace.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract AcceleratorVaultSpace is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct AcceleratorVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable ethHodler;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"AcceleratorVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n AcceleratorVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable ethHodler,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setEthHodlerAddress(ethHodler);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() external onlyOwner {\n forceUnlock = true;\n }\n\n function setEthHodlerAddress(address payable ethHodler) public onlyOwner {\n require(\n ethHodler != address(0),\n \"AcceleratorVaultSpace: eth receiver is zero address\"\n );\n\n config.ethHodler = ethHodler;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"AcceleratorVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"AcceleratorVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"AcceleratorVaultSpace: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"AcceleratorVaultSpace: insufficient INFINITY tokens in AcceleratorVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n //ETH receiver is hodler vault here\n config.ethHodler.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send eth to match with INFINITY tokens in AcceleratorVaultSpace\n function purchaseLP() external payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"AcceleratorVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"AcceleratorVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"AcceleratorVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"AcceleratorVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) external view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}\n" - }, - "@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol": { - "content": "pragma solidity >=0.5.0;\n\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\n\n// library with helper methods for oracles that are concerned with computing average prices\nlibrary UniswapV2OracleLibrary {\n using FixedPoint for *;\n\n // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\n function currentBlockTimestamp() internal view returns (uint32) {\n return uint32(block.timestamp % 2 ** 32);\n }\n\n // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\n function currentCumulativePrices(\n address pair\n ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\n blockTimestamp = currentBlockTimestamp();\n price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\n price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\n\n // if time has elapsed since the last update on the pair, mock the accumulated price values\n (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\n if (blockTimestampLast != blockTimestamp) {\n // subtraction overflow is desired\n uint32 timeElapsed = blockTimestamp - blockTimestampLast;\n // addition overflow is desired\n // counterfactual\n price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\n // counterfactual\n price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\n }\n }\n}\n" - }, - "@uniswap/lib/contracts/libraries/FixedPoint.sol": { - "content": "pragma solidity >=0.4.0;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n // range: [0, 2**112 - 1]\n // resolution: 1 / 2**112\n struct uq112x112 {\n uint224 _x;\n }\n\n // range: [0, 2**144 - 1]\n // resolution: 1 / 2**112\n struct uq144x112 {\n uint _x;\n }\n\n uint8 private constant RESOLUTION = 112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 x) internal pure returns (uq112x112 memory) {\n return uq112x112(uint224(x) << RESOLUTION);\n }\n\n // encodes a uint144 as a UQ144x112\n function encode144(uint144 x) internal pure returns (uq144x112 memory) {\n return uq144x112(uint256(x) << RESOLUTION);\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) {\n require(x != 0, 'FixedPoint: DIV_BY_ZERO');\n return uq112x112(self._x / uint224(x));\n }\n\n // multiply a UQ112x112 by a uint, returning a UQ144x112\n // reverts on overflow\n function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) {\n uint z;\n require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), \"FixedPoint: MULTIPLICATION_OVERFLOW\");\n return uq144x112(z);\n }\n\n // returns a UQ112x112 which represents the ratio of the numerator to the denominator\n // equivalent to encode(numerator).div(denominator)\n function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\n require(denominator > 0, \"FixedPoint: DIV_BY_ZERO\");\n return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\n }\n\n // decode a UQ112x112 into a uint112 by truncating after the radix point\n function decode(uq112x112 memory self) internal pure returns (uint112) {\n return uint112(self._x >> RESOLUTION);\n }\n\n // decode a UQ144x112 into a uint144 by truncating after the radix point\n function decode144(uq144x112 memory self) internal pure returns (uint144) {\n return uint144(self._x >> RESOLUTION);\n }\n}\n" - }, - "contracts/PriceOracle.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\nimport '@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol';\nimport \"./interfaces/IERC20.sol\";\n\n\ncontract PriceOracle {\n using FixedPoint for *;\n IUniswapV2Pair public immutable pair;\n uint public multiplier;\n uint private priceLast;\n uint public priceCumulativeLast;\n uint32 public blockTimestampLast;\n\n address public tokenA;\n address public tokenB;\n address public token0;\n\n constructor(IUniswapV2Pair _pair, address _tokenA, address _tokenB) public {\n pair = _pair;\n tokenA = _tokenA;\n tokenB = _tokenB;\n (token0, ) = _tokenA < _tokenB\n ? (_tokenA, _tokenB)\n : (_tokenB, _tokenA);\n\n if(token0 == _tokenA) {\n priceCumulativeLast = _pair.price0CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token0()).decimals());\n } else {\n priceCumulativeLast = _pair.price1CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token1()).decimals());\n }\n }\n function update() public returns(uint) {\n uint112 reserve0;\n uint112 reserve1;\n (reserve0, reserve1, blockTimestampLast) = pair.getReserves();\n require(reserve0 != 0 && reserve1 != 0, 'PriceOracle: NO_RESERVES');\n\n uint _priceCumulative;\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n uint _price;\n if (_blockTimestamp != _blockTimestampLast) {\n _price = FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) /\n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n priceLast = _price;\n priceCumulativeLast = _priceCumulative;\n blockTimestampLast = _blockTimestamp;\n } else {\n _price = priceLast;\n }\n return _price;\n }\n // note this will always return 0 before update has been called successfully for the first time.\n function consult() external view returns (uint) {\n uint _priceCumulative;\n\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n // most recent price is already calculated.\n if (_blockTimestamp == _blockTimestampLast) {\n return priceLast;\n }\n return FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / \n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n }\n function updateAndConsult() external returns (uint) {\n return update();\n }\n}" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file diff --git a/deployments/hardhat/.chainId b/deployments/hardhat/.chainId deleted file mode 100644 index 027791f..0000000 --- a/deployments/hardhat/.chainId +++ /dev/null @@ -1 +0,0 @@ -31337 \ No newline at end of file diff --git a/deployments/hardhat/FeeDistributor.json b/deployments/hardhat/FeeDistributor.json deleted file mode 100644 index 6de222d..0000000 --- a/deployments/hardhat/FeeDistributor.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "distributeFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "infinity", - "outputs": [ - { - "internalType": "contract IInfinityProtocol", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "recipients", - "outputs": [ - { - "internalType": "address", - "name": "liquidVault", - "type": "address" - }, - { - "internalType": "address", - "name": "secondaryAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "liquidVaultShare", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "burnPercentage", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_infinity", - "type": "address" - }, - { - "internalType": "address", - "name": "_vault", - "type": "address" - }, - { - "internalType": "address", - "name": "_secondaryAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_liquidVaultShare", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_burnPercentage", - "type": "uint256" - } - ], - "name": "seed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", - "receipt": { - "to": null, - "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "contractAddress": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "transactionIndex": 0, - "gasUsed": "676274", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000040200000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000100000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000400000000000000000", - "blockHash": "0x502881f64a831c7c85394e15a2216414fd2b79052495079a65e46e70ee6e45f2", - "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 3, - "transactionHash": "0x3d490a02fedd287fcad90a5e4f878c7cf477d9c20d41fd48c6b1ae4eb72bfd6f", - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x502881f64a831c7c85394e15a2216414fd2b79052495079a65e46e70ee6e45f2" - } - ], - "blockNumber": 3, - "cumulativeGasUsed": "676274", - "status": 1, - "byzantium": true - }, - "args": [], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"distributeFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinity\",\"outputs\":[{\"internalType\":\"contract IInfinityProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipients\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"liquidVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"burnPercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_infinity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_secondaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_liquidVaultShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_burnPercentage\",\"type\":\"uint256\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeDistributor.sol\":\"FeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/FeeDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract FeeDistributor is Ownable {\\n using SafeMath for uint;\\n\\n struct FeeRecipient {\\n address liquidVault;\\n address secondaryAddress;\\n uint256 liquidVaultShare; //percentage between 0 and 100\\n uint256 burnPercentage;\\n }\\n \\n IInfinityProtocol public infinity;\\n FeeRecipient public recipients;\\n\\n bool public initialized;\\n\\n uint private constant MINIMUM_AMOUNT = 1e8;\\n\\n modifier seeded {\\n require(\\n initialized,\\n \\\"FeeDistributor: Fees cannot be distributed until Distributor seeded.\\\"\\n );\\n _;\\n }\\n\\n function seed(\\n address _infinity,\\n address _vault,\\n address _secondaryAddress,\\n uint _liquidVaultShare,\\n uint _burnPercentage\\n ) external onlyOwner {\\n require(\\n _liquidVaultShare.add(_burnPercentage) <= 100,\\n \\\"FeeDistributor: liquidVault + burnPercentage incorrect sets\\\"\\n );\\n infinity = IInfinityProtocol(_infinity);\\n recipients.liquidVault = _vault;\\n recipients.secondaryAddress = _secondaryAddress;\\n recipients.liquidVaultShare = _liquidVaultShare;\\n recipients.burnPercentage = _burnPercentage;\\n initialized = true;\\n }\\n\\n function distributeFees() external seeded {\\n uint balance = infinity.balanceOf(address(this));\\n\\n if (balance < MINIMUM_AMOUNT) {\\n return;\\n }\\n\\n uint liquidShare;\\n uint burningShare;\\n uint secondaryShare;\\n\\n if (recipients.liquidVaultShare > 0) {\\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\\n\\n require(\\n infinity.transfer(recipients.liquidVault, liquidShare),\\n \\\"FeeDistributor: transfer to LiquidVault failed\\\"\\n );\\n }\\n\\n if (recipients.burnPercentage > 0) {\\n burningShare = recipients.burnPercentage.mul(balance).div(100);\\n infinity.burn(burningShare);\\n }\\n\\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\\n if (secondaryShare > 0) {\\n require(\\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\\n \\\"FeeDistributor: transfer to the secondary address failed\\\"\\n );\\n }\\n }\\n}\",\"keccak256\":\"0x98e4d2c721c9ac99ab5162a3b5d2f14ee03f8a1ea29db1c6fb3237c648726d5a\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b610ad08061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b1461012f578063bb57ad2014610153578063befe0e791461015b578063f2fde38b1461016357610088565b80630e57d4ce1461008d578063158ef93e146100c7578063715018a6146100e35780637a0f6020146100ed575b600080fd5b610095610189565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b6100cf6101a8565b604080519115158252519081900360200190f35b6100eb6101b1565b005b6100eb600480360360a081101561010357600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561026f565b610137610384565b604080516001600160a01b039092168252519081900360200190f35b6100eb610393565b6101376106c7565b6100eb6004803603602081101561017957600080fd5b50356001600160a01b03166106d6565b6002546003546004546005546001600160a01b03938416939092169184565b60065460ff1681565b6101b96107ea565b6001600160a01b03166101ca610384565b6001600160a01b031614610225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102776107ea565b6001600160a01b0316610288610384565b6001600160a01b0316146102e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60646102ef83836107ee565b111561032c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610a28603b913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03978816178255600280548216968816969096179095556003805490951693909516929092179092556004919091556005556006805460ff19169091179055565b6000546001600160a01b031690565b60065460ff166103d45760405162461bcd60e51b81526004018080602001828103825260448152602001806109956044913960600191505060405180910390fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b505190506305f5e10081101561045f57506106c5565b600454600090819081901561054a57600454610488906064906104829087610851565b906108aa565b6001546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b505161054a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806109fa602e913960400191505060405180910390fd5b600554156105e457600554610566906064906104829087610851565b60015460408051630852cd8d60e31b81526004810184905290519294506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b1580156105b757600080fd5b505af11580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b50505b6105f8826105f28686610911565b90610911565b905080156106c0576001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b50516106c05760405162461bcd60e51b8152600401808060200182810382526038815260200180610a636038913960400191505060405180910390fd5b505050505b565b6001546001600160a01b031681565b6106de6107ea565b6001600160a01b03166106ef610384565b6001600160a01b03161461074a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661078f5760405162461bcd60e51b815260040180806020018281038252602681526020018061096f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015610848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826108605750600061084b565b8282028284828161086d57fe5b04146108485760405162461bcd60e51b81526004018080602001828103825260218152602001806109d96021913960400191505060405180910390fd5b6000808211610900576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161090957fe5b049392505050565b600082821115610968576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734665654469737472696275746f723a20466565732063616e6e6f7420626520646973747269627574656420756e74696c204469737472696275746f72207365656465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774665654469737472696275746f723a207472616e7366657220746f204c69717569645661756c74206661696c65644665654469737472696275746f723a206c69717569645661756c74202b206275726e50657263656e7461676520696e636f727265637420736574734665654469737472696275746f723a207472616e7366657220746f20746865207365636f6e646172792061646472657373206661696c6564a2646970667358221220d18203bcd6d9736d955bada49fe0190283aedd5a1d36f90eebf0abb683c6d71364736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1749, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "infinity", - "offset": 0, - "slot": "1", - "type": "t_contract(IInfinityProtocol)4419" - }, - { - "astId": 1751, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "recipients", - "offset": 0, - "slot": "2", - "type": "t_struct(FeeRecipient)1747_storage" - }, - { - "astId": 1753, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "initialized", - "offset": 0, - "slot": "6", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IInfinityProtocol)4419": { - "encoding": "inplace", - "label": "contract IInfinityProtocol", - "numberOfBytes": "20" - }, - "t_struct(FeeRecipient)1747_storage": { - "encoding": "inplace", - "label": "struct FeeDistributor.FeeRecipient", - "members": [ - { - "astId": 1740, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "liquidVault", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1742, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "secondaryAddress", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 1744, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "liquidVaultShare", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 1746, - "contract": "contracts/FeeDistributor.sol:FeeDistributor", - "label": "burnPercentage", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/deployments/hardhat/InfinityProtocol.json b/deployments/hardhat/InfinityProtocol.json deleted file mode 100644 index 2f3e3c9..0000000 --- a/deployments/hardhat/InfinityProtocol.json +++ /dev/null @@ -1,917 +0,0 @@ -{ - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "excludeAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBurnCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBurnFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTradedCycle", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "includeAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isExcluded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxCycles", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transferAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "deductTransferFee", - "type": "bool" - } - ], - "name": "reflectionFromToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "router", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "setFeeReceiver", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setInitialFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxCycles", - "type": "uint256" - } - ], - "name": "setMaxCycles", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rAmount", - "type": "uint256" - } - ], - "name": "tokenFromReflection", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBurnWithFees", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalFees", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", - "receipt": { - "to": null, - "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "contractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "transactionIndex": 0, - "gasUsed": "2279121", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000040020000000000000100000800000000000000000000000010000000400000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000042000000200000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3", - "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 1, - "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3" - }, - { - "transactionIndex": 0, - "blockNumber": 1, - "transactionHash": "0xf5a4131df8be5d61164d35319d975faff82bcc37bbb30052ac14a23a3b23c9a7", - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - ], - "data": "0x000000000000000000000000000000000000000000000000002386f26fc10000", - "logIndex": 1, - "blockHash": "0x688b775316b2d38a88dfbed71dd82d01c119fdf07359d52827c1bf26f82024f3" - } - ], - "blockNumber": 1, - "cumulativeGasUsed": "2279121", - "status": 1, - "byzantium": true - }, - "args": [ - "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121" - ], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"excludeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTradedCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"includeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isExcluded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxCycles\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"transferAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"deductTransferFee\",\"type\":\"bool\"}],\"name\":\"reflectionFromToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setInitialFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxCycles\",\"type\":\"uint256\"}],\"name\":\"setMaxCycles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"}],\"name\":\"tokenFromReflection\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurnWithFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/InfinityProtocol.sol\":\"InfinityProtocol\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\",\"keccak256\":\"0x9486045e189facd2e868ece35249872598ef03f1087fb6fa4d1161842daa2287\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/InfinityProtocol.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\nimport \\\"@openzeppelin/contracts/GSN/Context.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"./interfaces/IInfinityProtocol.sol\\\";\\n\\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\\n\\n using SafeMath for uint;\\n using Address for address;\\n\\n mapping (address => uint) private _rOwned;\\n mapping (address => uint) private _tOwned;\\n mapping (address => mapping (address => uint)) private _allowances;\\n\\n mapping (address => bool) private _isExcluded;\\n address[] private _excluded;\\n address public feeReceiver;\\n address public router;\\n uint public maxCycles;\\n\\n string private constant _NAME = \\\"infinityprotocol.io\\\";\\n string private constant _SYMBOL = \\\"INFINITY\\\";\\n uint8 private constant _DECIMALS = 8;\\n\\n uint private constant _MAX = ~uint(0);\\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\\n uint private constant _GRANULARITY = 100;\\n\\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\\n\\n uint private _tFeeTotal;\\n uint private _tBurnTotal;\\n uint private _infinityCycle;\\n\\n uint private _tTradeCycle;\\n uint private _tBurnCycle;\\n\\n uint private _BURN_FEE;\\n uint private _FOT_FEE;\\n bool private _feeSet;\\n\\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\\n\\n constructor (address _router) public {\\n _rOwned[_msgSender()] = _rTotal;\\n router = _router;\\n setMaxCycles(500);\\n emit Transfer(address(0), _msgSender(), _tTotal);\\n }\\n\\n function name() public pure returns (string memory) {\\n return _NAME;\\n }\\n\\n function symbol() public pure returns (string memory) {\\n return _SYMBOL;\\n }\\n\\n function decimals() public pure override returns (uint8) {\\n return _DECIMALS;\\n }\\n\\n function totalSupply() public view override returns (uint) {\\n return _tTotal;\\n }\\n\\n function balanceOf(address account) public view override returns (uint) {\\n if (_isExcluded[account]) return _tOwned[account];\\n return tokenFromReflection(_rOwned[account]);\\n }\\n\\n function transfer(address recipient, uint amount) public override returns (bool) {\\n _transfer(_msgSender(), recipient, amount);\\n return true;\\n }\\n\\n function allowance(address owner, address spender) public view override returns (uint) {\\n return _allowances[owner][spender];\\n }\\n\\n function approve(address spender, uint amount) public override returns (bool) {\\n _approve(_msgSender(), spender, amount);\\n return true;\\n }\\n\\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\\n _transfer(sender, recipient, amount);\\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n return true;\\n }\\n\\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n return true;\\n }\\n\\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n return true;\\n }\\n\\n function isExcluded(address account) public view returns (bool) {\\n return _isExcluded[account];\\n }\\n\\n function totalFees() public view returns (uint) {\\n return _tFeeTotal;\\n }\\n\\n function totalBurn() public view returns (uint) {\\n return _tBurnTotal;\\n }\\n\\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\\n require(receiver != address(0), \\\"Zero address not allowed\\\");\\n feeReceiver = receiver;\\n return true;\\n }\\n\\n function totalBurnWithFees() public view returns (uint) {\\n return _tBurnTotal.add(_tFeeTotal);\\n }\\n\\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\\n require(transferAmount <= _tTotal, \\\"Amount must be less than supply\\\");\\n if (!deductTransferFee) {\\n (uint rAmount,,,,,) = _getValues(transferAmount);\\n return rAmount;\\n } else {\\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\\n return rTransferAmount;\\n }\\n }\\n\\n function tokenFromReflection(uint rAmount) public view returns(uint) {\\n require(rAmount <= _rTotal, \\\"Amount must be less than total reflections\\\");\\n uint currentRate = _getRate();\\n return rAmount.div(currentRate);\\n }\\n\\n function excludeAccount(address account) external onlyOwner() {\\n require(!_isExcluded[account], \\\"Account is already excluded\\\");\\n require(account != router, 'Not allowed to exclude router');\\n require(account != feeReceiver, \\\"Can not exclude fee receiver\\\");\\n if (_rOwned[account] > 0) {\\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\\n }\\n _isExcluded[account] = true;\\n _excluded.push(account);\\n }\\n\\n function includeAccount(address account) external onlyOwner() {\\n require(_isExcluded[account], \\\"Account is already included\\\");\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_excluded[i] == account) {\\n _excluded[i] = _excluded[_excluded.length - 1];\\n _tOwned[account] = 0;\\n _isExcluded[account] = false;\\n _excluded.pop();\\n break;\\n }\\n }\\n }\\n\\n function _approve(address owner, address spender, uint amount) private {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n function _transfer(address sender, address recipient, uint amount) private {\\n require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n require(amount > 0, \\\"Transfer amount must be greater than zero\\\");\\n\\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\\n // reaches its final phase, in which no further supply elasticity will take place\\n // and fees will stay at 0\\n\\n if (sender != owner() && recipient != owner())\\n require(amount <= _MAX_TX_SIZE, \\\"Transfer amount exceeds the maxTxAmount.\\\");\\n\\n // @dev 50% fee is burn fee, 50% is fot\\n if (_BURN_FEE >= 250) {\\n\\n _tTradeCycle = _tTradeCycle.add(amount);\\n\\n\\n // @dev adjust current burnFee/fotFee depending on the traded tokens\\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\\n _setFees(500);\\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\\n _setFees(550);\\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\\n _setFees(600);\\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\\n _setFees(650);\\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\\n _setFees(700);\\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\\n _setFees(750);\\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\\n _setFees(800);\\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\\n _setFees(850);\\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\\n _setFees(900);\\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\\n _setFees(950);\\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\\n _setFees(1000);\\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\\n _setFees(1050);\\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\\n _setFees(1100);\\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\\n _setFees(1150);\\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\\n _setFees(1200);\\n }\\n }\\n\\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferFromExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferToExcluded(sender, recipient, amount);\\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\\n _transferStandard(sender, recipient, amount);\\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\\n _transferBothExcluded(sender, recipient, amount);\\n } else {\\n _transferStandard(sender, recipient, amount);\\n }\\n }\\n\\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\\n uint currentRate = _getRate();\\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\\n uint rBurn = transferBurn.mul(currentRate);\\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\\n\\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\\n\\n _burnAndRebase(rBurn, transferFee, transferBurn);\\n emit Transfer(sender, recipient, tTransferAmount);\\n\\n if (transferFee > 0) {\\n emit Transfer(sender, feeReceiver, transferFee);\\n }\\n }\\n\\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\\n _rTotal = _rTotal.sub(rBurn);\\n _tFeeTotal = _tFeeTotal.add(transferFee);\\n _tBurnTotal = _tBurnTotal.add(transferBurn);\\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\\n _tTotal = _tTotal.sub(transferBurn);\\n\\n\\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \\n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\\n //set rebase percent\\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\\n _tTradeCycle = 0;\\n _setFees(500);\\n\\n _rebase(_tRebaseDelta);\\n }\\n }\\n\\n function burn(uint amount) external override returns (bool) {\\n address sender = _msgSender();\\n uint balance = balanceOf(sender);\\n require(balance >= amount, \\\"Cannot burn more than on balance\\\");\\n require(sender == feeReceiver, \\\"Only feeReceiver\\\");\\n\\n uint rBurn = amount.mul(_getRate());\\n _rTotal = _rTotal.sub(rBurn);\\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\\n\\n _tBurnTotal = _tBurnTotal.add(amount);\\n _tTotal = _tTotal.sub(amount);\\n\\n emit Transfer(sender, address(0), amount);\\n return true;\\n }\\n\\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\\n return (tTransferAmount, transferFee, transferBurn);\\n }\\n\\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\\n uint currentRate = _getRate();\\n uint rAmount = transferAmount.mul(currentRate);\\n uint rFee = transferFee.mul(currentRate);\\n uint rBurn = transferBurn.mul(currentRate);\\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\\n return (rAmount, rTransferAmount, rFee);\\n }\\n\\n function _getRate() private view returns(uint) {\\n (uint rSupply, uint tSupply) = _getCurrentSupply();\\n return rSupply.div(tSupply);\\n }\\n\\n function _getCurrentSupply() private view returns(uint, uint) {\\n uint rSupply = _rTotal;\\n uint tSupply = _tTotal;\\n for (uint i = 0; i < _excluded.length; i++) {\\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\\n }\\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\\n return (rSupply, tSupply);\\n }\\n\\n\\n function _setFees(uint fee) private {\\n require(fee >= 0 && fee <= 1500, \\\"fee should be in 0 - 15%\\\");\\n if (_BURN_FEE == fee.div(2)) {\\n return;\\n }\\n\\n _BURN_FEE = fee.div(2);\\n _FOT_FEE = fee.div(2);\\n }\\n\\n function setInitialFee() external onlyOwner() {\\n require(!_feeSet, \\\"Initial fee already set\\\");\\n _setFees(500);\\n _feeSet = true;\\n }\\n\\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\\n require(_maxCycles >= _infinityCycle, \\\"Can not set more than current cycle\\\");\\n maxCycles = _maxCycles;\\n }\\n\\n function getBurnFee() public view returns(uint) {\\n return _BURN_FEE;\\n }\\n\\n function getFee() public view returns(uint) {\\n return _FOT_FEE;\\n }\\n\\n function _getMaxTxAmount() private pure returns(uint) {\\n return _MAX_TX_SIZE;\\n }\\n\\n function getCycle() public view returns(uint) {\\n return _infinityCycle;\\n }\\n\\n function getBurnCycle() public view returns(uint) {\\n return _tBurnCycle;\\n }\\n\\n function getTradedCycle() public view returns(uint) {\\n return _tTradeCycle;\\n }\\n\\n function _rebase(uint supplyDelta) internal {\\n _infinityCycle = _infinityCycle.add(1);\\n _tTotal = _tTotal.add(supplyDelta);\\n\\n if (_infinityCycle > maxCycles) {\\n _setFees(0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x64cca0b72006a7b6178354fc1ede3f320e437204b05cea400fc0b63ba2680e42\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IInfinityProtocol.sol\":{\"content\":\"import \\\"./IERC20.sol\\\";\\n\\ninterface IInfinityProtocol is IERC20 {\\n function burn(uint amount) external returns (bool);\\n}\",\"keccak256\":\"0xfc216ba0aa36716553d0afecded82c2fc2170bc121dd0f4c29b7f8ffae98a009\"}},\"version\":1}", - "bytecode": "0x6080604052662386f26fc10000600955660e3d2cfe61ffff19600a553480156200002857600080fd5b50604051620027f6380380620027f6833981810160405260208110156200004e57600080fd5b505160006200005c62000158565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460016000620000b762000158565b6001600160a01b039081168252602082019290925260400160002091909155600780546001600160a01b031916918316919091179055620000fa6101f46200015c565b6200010462000158565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200022c565b3390565b6200016662000158565b6001600160a01b0316620001796200021d565b6001600160a01b031614620001d5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d54811015620002185760405162461bcd60e51b8152600401808060200182810382526023815260200180620027d36023913960400191505060405180910390fd5b600855565b6000546001600160a01b031690565b612597806200023c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c6343000704003343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c65", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638ccb31b61161011a578063cba0e996116100ad578063efdcd9741161007c578063efdcd9741461053e578063f2cc0c1814610564578063f2fde38b1461058a578063f84354f1146105b0578063f887ea40146105d657610206565b8063cba0e996146104da578063ced72f8714610500578063d8f8cc2d14610508578063dd62ed3e1461051057610206565b8063a457c2d7116100e9578063a457c2d714610472578063a9059cbb1461049e578063aa4b10d1146104ca578063b3f00674146104d257610206565b80638ccb31b6146104365780638da5cb5b1461043e57806395d89b4114610462578063a0d4398b1461046a57610206565b8063376805211161019d5780634549b0391161016c5780634549b039146103d3578063655bce22146103f857806368c33e211461040057806370a0823114610408578063715018a61461042e57610206565b8063376805211461037a57806339509351146103825780633c9f861d146103ae57806342966c68146103b657610206565b806318160ddd116101d957806318160ddd1461030157806323b872dd146103095780632d8381191461033f578063313ce5671461035c57610206565b806306fdde031461020b578063088b96c214610288578063095ea7b3146102a757806313114a9d146102e7575b600080fd5b6102136105de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a56004803603602081101561029e57600080fd5b503561060b565b005b6102d3600480360360408110156102bd57600080fd5b506001600160a01b0381351690602001356106b3565b604080519115158252519081900360200190f35b6102ef6106d1565b60408051918252519081900360200190f35b6102ef6106d7565b6102d36004803603606081101561031f57600080fd5b506001600160a01b038135811691602081013590911690604001356106dd565b6102ef6004803603602081101561035557600080fd5b5035610764565b6103646107c6565b6040805160ff9092168252519081900360200190f35b6102ef6107cb565b6102d36004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107d1565b6102ef61081f565b6102d3600480360360208110156103cc57600080fd5b5035610825565b6102ef600480360360408110156103e957600080fd5b508035906020013515156109b8565b6102ef610a4a565b6102ef610a50565b6102ef6004803603602081101561041e57600080fd5b50356001600160a01b0316610a6e565b6102a5610ad0565b6102ef610b7c565b610446610b82565b604080516001600160a01b039092168252519081900360200190f35b610213610b91565b6102ef610bb3565b6102d36004803603604081101561048857600080fd5b506001600160a01b038135169060200135610bb9565b6102d3600480360360408110156104b457600080fd5b506001600160a01b038135169060200135610c21565b6102ef610c35565b610446610c3b565b6102d3600480360360208110156104f057600080fd5b50356001600160a01b0316610c4a565b6102ef610c68565b6102a5610c6e565b6102ef6004803603604081101561052657600080fd5b506001600160a01b0381358116916020013516610d42565b6102d36004803603602081101561055457600080fd5b50356001600160a01b0316610d6d565b6102a56004803603602081101561057a57600080fd5b50356001600160a01b0316610e51565b6102a5600480360360208110156105a057600080fd5b50356001600160a01b03166110a7565b6102a5600480360360208110156105c657600080fd5b50356001600160a01b03166111a9565b610446611374565b604080518082019091526013815272696e66696e69747970726f746f636f6c2e696f60681b602082015290565b610613611383565b6001600160a01b0316610624610b82565b6001600160a01b03161461066d576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600d548110156106ae5760405162461bcd60e51b81526004018080602001828103825260238152602001806124176023913960400191505060405180910390fd5b600855565b60006106c76106c0611383565b8484611387565b5060015b92915050565b600b5490565b60095490565b60006106ea848484611473565b61075a846106f6611383565b61075585604051806060016040528060288152602001612483602891396001600160a01b038a16600090815260036020526040812090610734611383565b6001600160a01b0316815260208101919091526040016000205491906119f1565b611387565b5060019392505050565b6000600a548211156107a75760405162461bcd60e51b815260040180806020018281038252602a8152602001806123a5602a913960400191505060405180910390fd5b60006107b1611a88565b90506107bd8382611aab565b9150505b919050565b600890565b60085481565b60006106c76107de611383565b8461075585600360006107ef611383565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611b12565b600c5490565b600080610830611383565b9050600061083d82610a6e565b905083811015610894576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74206275726e206d6f7265207468616e206f6e2062616c616e6365604482015290519081900360640190fd5b6006546001600160a01b038381169116146108e9576040805162461bcd60e51b815260206004820152601060248201526f27b7363c903332b2a932b1b2b4bb32b960811b604482015290519081900360640190fd5b60006108fd6108f6611a88565b8690611b73565b600a5490915061090d9082611bcc565b600a556001600160a01b0383166000908152600160205260409020546109339082611bcc565b6001600160a01b038416600090815260016020526040902055600c546109599086611b12565b600c556009546109699086611bcc565b6009556040805186815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000600954831115610a11576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a30576000610a2184611c29565b509395506106cb945050505050565b6000610a3b84611c29565b509295506106cb945050505050565b600d5490565b6000610a69600b54600c54611b1290919063ffffffff16565b905090565b6001600160a01b03811660009081526004602052604081205460ff1615610aae57506001600160a01b0381166000908152600260205260409020546107c1565b6001600160a01b0382166000908152600160205260409020546106cb90610764565b610ad8611383565b6001600160a01b0316610ae9610b82565b6001600160a01b031614610b32576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5490565b6000546001600160a01b031690565b604080518082019091526008815267494e46494e49545960c01b602082015290565b600e5490565b60006106c7610bc6611383565b846107558560405180606001604052806025815260200161253d6025913960036000610bf0611383565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119f1565b60006106c7610c2e611383565b8484611473565b60105490565b6006546001600160a01b031681565b6001600160a01b031660009081526004602052604090205460ff1690565b60115490565b610c76611383565b6001600160a01b0316610c87610b82565b6001600160a01b031614610cd0576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b60125460ff1615610d28576040805162461bcd60e51b815260206004820152601760248201527f496e697469616c2066656520616c726561647920736574000000000000000000604482015290519081900360640190fd5b610d336101f4611c76565b6012805460ff19166001179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000610d77611383565b6001600160a01b0316610d88610b82565b6001600160a01b031614610dd1576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b038216610e2c576040805162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b50600680546001600160a01b0383166001600160a01b03199091161790556001919050565b610e59611383565b6001600160a01b0316610e6a610b82565b6001600160a01b031614610eb3576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff1615610f21576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6007546001600160a01b0382811691161415610f84576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420616c6c6f77656420746f206578636c75646520726f75746572000000604482015290519081900360640190fd5b6006546001600160a01b0382811691161415610fe7576040805162461bcd60e51b815260206004820152601c60248201527f43616e206e6f74206578636c7564652066656520726563656976657200000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415611041576001600160a01b03811660009081526001602052604090205461102790610764565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6110af611383565b6001600160a01b03166110c0610b82565b6001600160a01b031614611109576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811661114e5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6111b1611383565b6001600160a01b03166111c2610b82565b6001600160a01b03161461120b576040805162461bcd60e51b815260206004820181905260248201526000805160206124ab833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff16611278576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b60055481101561137057816001600160a01b03166005828154811061129c57fe5b6000918252602090912001546001600160a01b03161415611368576005805460001981019081106112c957fe5b600091825260209091200154600580546001600160a01b0390921691839081106112ef57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061134157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611370565b60010161127b565b5050565b6007546001600160a01b031681565b3390565b6001600160a01b0383166113cc5760405162461bcd60e51b81526004018080602001828103825260248152602001806125196024913960400191505060405180910390fd5b6001600160a01b0382166114115760405162461bcd60e51b81526004018080602001828103825260228152602001806123f56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b81526004018080602001828103825260258152602001806124f46025913960400191505060405180910390fd5b6001600160a01b0382166114fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806123826023913960400191505060405180910390fd5b6000811161153c5760405162461bcd60e51b81526004018080602001828103825260298152602001806124cb6029913960400191505060405180910390fd5b611544610b82565b6001600160a01b0316836001600160a01b03161415801561157e5750611568610b82565b6001600160a01b0316826001600160a01b031614155b156115c957662386f26fc100008111156115c95760405162461bcd60e51b815260040180806020018281038252602881526020018061243a6028913960400191505060405180910390fd5b60fa6010541061189857600e546115e09082611b12565b600e55600e54655af3107a400010611602576115fd6101f4611c76565b611898565b600e54655af3107a40001080156116215750600e5465b5e620f4800010155b15611631576115fd610226611c76565b600e5465b5e620f480001080156116515750600e54660110d9316ec00010155b15611661576115fd610258611c76565b600e54660110d9316ec0001080156116825750600e5466016bcc41e9000010155b15611692576115fd61028a611c76565b600e5466016bcc41e900001080156116b35750600e546601c6bf5263400010155b156116c3576115fd6102bc611c76565b600e546601c6bf526340001080156116e45750600e54660221b262dd800010155b156116f4576115fd6102ee611c76565b600e54660221b262dd80001080156117155750600e5466027ca57357c00010155b15611725576115fd610320611c76565b600e5466027ca57357c0001080156117465750600e546602d79883d2000010155b15611756576115fd610352611c76565b600e546602d79883d200001080156117775750600e546603328b944c400010155b15611787576115fd610384611c76565b600e546603328b944c40001080156117a85750600e5466038d7ea4c6800010155b156117b8576115fd6103b6611c76565b600e5466038d7ea4c680001080156117d95750600e546603e871b540c00010155b156117e9576115fd6103e8611c76565b600e546603e871b540c00010801561180a5750600e5466044364c5bb000010155b1561181a576115fd61041a611c76565b600e5466044364c5bb000010801561183b5750600e5466049e57d635400010155b1561184b576115fd61044c611c76565b600e5466049e57d635400010801561186c5750600e546604f94ae6af800010155b1561187c576115fd61047e611c76565b600e546604f94ae6af80001015611898576118986104b0611c76565b6001600160a01b03831660009081526004602052604090205460ff1680156118d957506001600160a01b03821660009081526004602052604090205460ff16155b156118ee576118e9838383611d06565b6119ec565b6001600160a01b03831660009081526004602052604090205460ff1615801561192f57506001600160a01b03821660009081526004602052604090205460ff165b1561193f576118e9838383611ec6565b6001600160a01b03831660009081526004602052604090205460ff1615801561198157506001600160a01b03821660009081526004602052604090205460ff16155b15611991576118e9838383611f90565b6001600160a01b03831660009081526004602052604090205460ff1680156119d157506001600160a01b03821660009081526004602052604090205460ff165b156119e1576118e9838383611ff5565b6119ec838383611f90565b505050565b60008184841115611a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a45578181015183820152602001611a2d565b50505050905090810190601f168015611a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611a95612089565b9092509050611aa48282611aab565b9250505090565b6000808211611b01576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611b0a57fe5b049392505050565b600082820183811015611b6c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611b82575060006106cb565b82820282848281611b8f57fe5b0414611b6c5760405162461bcd60e51b81526004018080602001828103825260218152602001806124626021913960400191505060405180910390fd5b600082821115611c23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806000806000611c468a6011546010546121ec565b9250925092506000806000611c5c8d8686612245565b919f909e50909c50959a5093985091965092945050505050565b6105dc811115611ccd576040805162461bcd60e51b815260206004820152601860248201527f6665652073686f756c6420626520696e2030202d203135250000000000000000604482015290519081900360640190fd5b611cd8816002611aab565b6010541415611ce657611d03565b611cf1816002611aab565b601055611cff816002611aab565b6011555b50565b6000611d10611a88565b9050600080600080600080611d2488611c29565b9550955095509550955095506000611d458883611b7390919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611d6b908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611d9a9088611bcc565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611dc99087611b12565b6001600160a01b03808c166000908152600160205260408082209390935560065490911681522054611dfb9086611b12565b6006546001600160a01b0316600090815260016020526040902055611e218184846122a2565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38215611eb9576006546040805185815290516001600160a01b03928316928e16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b5050505050505050505050565b6000611ed0611a88565b9050600080600080600080611ee488611c29565b9550955095509550955095506000611f058883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611f2b9088611bcc565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611f619085611b12565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611dc99087611b12565b6000611f9a611a88565b9050600080600080600080611fae88611c29565b9550955095509550955095506000611fcf8883611b7390919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611d9a9088611bcc565b6000611fff611a88565b905060008060008060008061201388611c29565b95509550955095509550955060006120348883611b7390919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061205a908a611bcc565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611f2b9088611bcc565b600a546009546000918291825b6005548110156121ba578260016000600584815481106120b257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061211757508160026000600584815481106120f057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561212e57600a54600954945094505050506121e8565b61216e600160006005848154811061214257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bcc565b92506121b0600260006005848154811061218457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bcc565b9150600101612096565b50600954600a546121ca91611aab565b8210156121e257600a546009549350935050506121e8565b90925090505b9091565b6000808080612208606461220281818b8b611b73565b90611aab565b9050600061221d606461220281818c8b611b73565b905060006122358261222f8b86611bcc565b90611bcc565b9992985090965090945050505050565b600080600080612253611a88565b905060006122618883611b73565b9050600061226f8884611b73565b9050600061227d8885611b73565b9050600061228f8261222f8686611bcc565b939b939a50919850919650505050505050565b600a546122af9084611bcc565b600a55600b546122bf9083611b12565b600b55600c546122cf9082611b12565b600c55600f546122eb9083906122e59084611b12565b90611b12565b600f556009546122fb9082611bcc565b600955600f546573f5e8357800116119ec57600f54652d79883d200090612328906573f5e8357800611bcc565b600f556000600e5561233b6101f4611c76565b6123448161234a565b50505050565b600d54612358906001611b12565b600d556009546123689082611b12565b600955600854600d541115611d0357611d036000611c7656fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e206e6f7420736574206d6f7265207468616e2063757272656e74206379636c655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021d90dbff36d84395c2fabd9fa1c416e3c0ef9e158429c3c7c8dcee70898576d64736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1955, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_rOwned", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1959, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tOwned", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1965, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_allowances", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 1969, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_isExcluded", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 1972, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_excluded", - "offset": 0, - "slot": "5", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 1974, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "feeReceiver", - "offset": 0, - "slot": "6", - "type": "t_address" - }, - { - "astId": 1976, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "router", - "offset": 0, - "slot": "7", - "type": "t_address" - }, - { - "astId": 1978, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "maxCycles", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 2010, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tTotal", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 2019, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_rTotal", - "offset": 0, - "slot": "10", - "type": "t_uint256" - }, - { - "astId": 2021, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tFeeTotal", - "offset": 0, - "slot": "11", - "type": "t_uint256" - }, - { - "astId": 2023, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tBurnTotal", - "offset": 0, - "slot": "12", - "type": "t_uint256" - }, - { - "astId": 2025, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_infinityCycle", - "offset": 0, - "slot": "13", - "type": "t_uint256" - }, - { - "astId": 2027, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tTradeCycle", - "offset": 0, - "slot": "14", - "type": "t_uint256" - }, - { - "astId": 2029, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_tBurnCycle", - "offset": 0, - "slot": "15", - "type": "t_uint256" - }, - { - "astId": 2031, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_BURN_FEE", - "offset": 0, - "slot": "16", - "type": "t_uint256" - }, - { - "astId": 2033, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_FOT_FEE", - "offset": 0, - "slot": "17", - "type": "t_uint256" - }, - { - "astId": 2035, - "contract": "contracts/InfinityProtocol.sol:InfinityProtocol", - "label": "_feeSet", - "offset": 0, - "slot": "18", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/deployments/hardhat/LiquidVault.json b/deployments/hardhat/LiquidVault.json deleted file mode 100644 index 9d6ef30..0000000 --- a/deployments/hardhat/LiquidVault.json +++ /dev/null @@ -1,773 +0,0 @@ -{ - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "percentageAmount", - "type": "uint256" - } - ], - "name": "EthTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "exitFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "claimed", - "type": "bool" - } - ], - "name": "LPClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eth", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "infinityToken", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "LPQueued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "claimLP", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "config", - "outputs": [ - { - "internalType": "address", - "name": "infinityToken", - "type": "address" - }, - { - "internalType": "contract IUniswapV2Router02", - "name": "uniswapRouter", - "type": "address" - }, - { - "internalType": "contract IUniswapV2Pair", - "name": "tokenPair", - "type": "address" - }, - { - "internalType": "contract IFeeDistributor", - "name": "feeDistributor", - "type": "address" - }, - { - "internalType": "address", - "name": "weth", - "type": "address" - }, - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "stakeDuration", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "enableLPForceUnlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceUnlock", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "position", - "type": "uint256" - } - ], - "name": "getLockedLP", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakeDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "lockedLP", - "outputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "claimed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - } - ], - "name": "lockedLPLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "purchaseLP", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "purchaseLPFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "queueCounter", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "duration", - "type": "uint32" - }, - { - "internalType": "address", - "name": "infinityToken", - "type": "address" - }, - { - "internalType": "address", - "name": "uniswapPair", - "type": "address" - }, - { - "internalType": "address", - "name": "uniswapRouter", - "type": "address" - }, - { - "internalType": "address", - "name": "feeDistributor", - "type": "address" - }, - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "name": "seed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "setFeeReceiverAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "duration", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "donationShare", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "purchaseFee", - "type": "uint8" - } - ], - "name": "setParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", - "receipt": { - "to": null, - "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "contractAddress": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "transactionIndex": 0, - "gasUsed": "1401618", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000100000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000002000000000000000000020000000000000000000000000000000000000000000000000800000000000000000", - "blockHash": "0x5e13b7c67d72446f0bb91d9ae5c23ce513f2fe663d2158c75861e41e18a0ac41", - "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 2, - "transactionHash": "0x6f8ca60e2fee8e1db0d1bb636cb2e6675ef23eaabb864f0b89713a2d7d423bce", - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x5e13b7c67d72446f0bb91d9ae5c23ce513f2fe663d2158c75861e41e18a0ac41" - } - ], - "blockNumber": 2, - "cumulativeGasUsed": "1401618", - "status": 1, - "byzantium": true - }, - "args": [], - "solcInputHash": "50935558cf5835f525f697d3157617bd", - "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"percentageAmount\",\"type\":\"uint256\"}],\"name\":\"EthTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"name\":\"LPClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"infinityToken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"LPQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimLP\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Pair\",\"name\":\"tokenPair\",\"type\":\"address\"},{\"internalType\":\"contract IFeeDistributor\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakeDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableLPForceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"getLockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lockedLP\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"lockedLPLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"purchaseLP\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"purchaseLPFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"queueCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"infinityToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapPair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"uniswapRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"seed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"feeReceiver\",\"type\":\"address\"}],\"name\":\"setFeeReceiverAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"donationShare\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"purchaseFee\",\"type\":\"uint8\"}],\"name\":\"setParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"EthTransferred(address,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called to track ETH amounts \"},\"LPClaimed(address,uint256,uint256,uint256,bool)\":{\"notice\":\"Emitted when claimLP() is called \"},\"LPQueued(address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when purchaseLP() is called and LP tokens minted \"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/vaults/LiquidVault.sol\":\"LiquidVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IUniswapV2Pair {\\n event Approval(address indexed owner, address indexed spender, uint value);\\n event Transfer(address indexed from, address indexed to, uint value);\\n\\n function name() external pure returns (string memory);\\n function symbol() external pure returns (string memory);\\n function decimals() external pure returns (uint8);\\n function totalSupply() external view returns (uint);\\n function balanceOf(address owner) external view returns (uint);\\n function allowance(address owner, address spender) external view returns (uint);\\n\\n function approve(address spender, uint value) external returns (bool);\\n function transfer(address to, uint value) external returns (bool);\\n function transferFrom(address from, address to, uint value) external returns (bool);\\n\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n function PERMIT_TYPEHASH() external pure returns (bytes32);\\n function nonces(address owner) external view returns (uint);\\n\\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\\n\\n event Mint(address indexed sender, uint amount0, uint amount1);\\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\\n event Swap(\\n address indexed sender,\\n uint amount0In,\\n uint amount1In,\\n uint amount0Out,\\n uint amount1Out,\\n address indexed to\\n );\\n event Sync(uint112 reserve0, uint112 reserve1);\\n\\n function MINIMUM_LIQUIDITY() external pure returns (uint);\\n function factory() external view returns (address);\\n function token0() external view returns (address);\\n function token1() external view returns (address);\\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\n function price0CumulativeLast() external view returns (uint);\\n function price1CumulativeLast() external view returns (uint);\\n function kLast() external view returns (uint);\\n\\n function mint(address to) external returns (uint liquidity);\\n function burn(address to) external returns (uint amount0, uint amount1);\\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\\n function skim(address to) external;\\n function sync() external;\\n\\n function initialize(address, address) external;\\n}\\n\",\"keccak256\":\"0x7c9bc70e5996c763e02ff38905282bc24fb242b0ef2519a003b36824fc524a4b\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\ninterface IUniswapV2Router01 {\\n function factory() external pure returns (address);\\n function WETH() external pure returns (address);\\n\\n function addLiquidity(\\n address tokenA,\\n address tokenB,\\n uint amountADesired,\\n uint amountBDesired,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB, uint liquidity);\\n function addLiquidityETH(\\n address token,\\n uint amountTokenDesired,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\\n function removeLiquidity(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETH(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountToken, uint amountETH);\\n function removeLiquidityWithPermit(\\n address tokenA,\\n address tokenB,\\n uint liquidity,\\n uint amountAMin,\\n uint amountBMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountA, uint amountB);\\n function removeLiquidityETHWithPermit(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountToken, uint amountETH);\\n function swapExactTokensForTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapTokensForExactTokens(\\n uint amountOut,\\n uint amountInMax,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external returns (uint[] memory amounts);\\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\\n external\\n returns (uint[] memory amounts);\\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\\n external\\n payable\\n returns (uint[] memory amounts);\\n\\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\\n}\\n\",\"keccak256\":\"0x8a3c5c449d4b7cd76513ed6995f4b86e4a86f222c770f8442f5fc128ce29b4d2\"},\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\":{\"content\":\"pragma solidity >=0.6.2;\\n\\nimport './IUniswapV2Router01.sol';\\n\\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\\n function removeLiquidityETHSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline\\n ) external returns (uint amountETH);\\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\\n address token,\\n uint liquidity,\\n uint amountTokenMin,\\n uint amountETHMin,\\n address to,\\n uint deadline,\\n bool approveMax, uint8 v, bytes32 r, bytes32 s\\n ) external returns (uint amountETH);\\n\\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external payable;\\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\\n uint amountIn,\\n uint amountOutMin,\\n address[] calldata path,\\n address to,\\n uint deadline\\n ) external;\\n}\\n\",\"keccak256\":\"0x744e30c133bd0f7ca9e7163433cf6d72f45c6bb1508c2c9c02f1a6db796ae59d\"},\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\":{\"content\":\"pragma solidity >=0.5.0;\\n\\ninterface IWETH {\\n function deposit() external payable;\\n function transfer(address to, uint value) external returns (bool);\\n function withdraw(uint) external;\\n}\\n\",\"keccak256\":\"0xfc10758fd8dba790c39468dccd358cb7cef06ae7c4781832cc7aa76f91f167e6\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"pragma solidity 0.7.4;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function decimals() external pure returns (uint8);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\",\"keccak256\":\"0xa95234db08e761bb358798187dbfa2194379e06ee7ab5c3fe147b21481e5d59d\"},\"contracts/interfaces/IFeeDistributor.sol\":{\"content\":\"interface IFeeDistributor {\\n function distributeFees() external;\\n}\",\"keccak256\":\"0x8cace30edd60bc477fb3fe56655259d416d12002de3ce4e25505088334365eb2\"},\"contracts/vaults/LiquidVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.7.4;\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../interfaces/IERC20.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\\\";\\nimport \\\"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\\\";\\nimport \\\"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\\\";\\nimport \\\"../interfaces/IFeeDistributor.sol\\\";\\n\\ncontract LiquidVault is Ownable {\\n /** Emitted when purchaseLP() is called to track ETH amounts */\\n event EthTransferred(\\n address from,\\n uint amount,\\n uint percentageAmount\\n );\\n\\n /** Emitted when purchaseLP() is called and LP tokens minted */\\n event LPQueued(\\n address holder,\\n uint amount,\\n uint eth,\\n uint infinityToken,\\n uint timestamp\\n );\\n\\n /** Emitted when claimLP() is called */\\n event LPClaimed(\\n address holder,\\n uint amount,\\n uint timestamp,\\n uint exitFee,\\n bool claimed\\n );\\n\\n struct LPbatch {\\n address holder;\\n uint amount;\\n uint timestamp;\\n bool claimed;\\n }\\n\\n struct LiquidVaultConfig {\\n address infinityToken;\\n IUniswapV2Router02 uniswapRouter;\\n IUniswapV2Pair tokenPair;\\n IFeeDistributor feeDistributor;\\n address weth;\\n address payable feeReceiver;\\n uint32 stakeDuration;\\n uint8 donationShare; //0-100\\n uint8 purchaseFee; //0-100\\n }\\n \\n bool public forceUnlock;\\n bool private locked;\\n\\n modifier lock {\\n require(!locked, \\\"LiquidVault: reentrancy violation\\\");\\n locked = true;\\n _;\\n locked = false;\\n }\\n\\n LiquidVaultConfig public config;\\n\\n mapping(address => LPbatch[]) public lockedLP;\\n mapping(address => uint) public queueCounter;\\n\\n function seed(\\n uint32 duration,\\n address infinityToken,\\n address uniswapPair,\\n address uniswapRouter,\\n address feeDistributor,\\n address payable feeReceiver,\\n uint8 donationShare, // LP Token\\n uint8 purchaseFee // ETH\\n ) public onlyOwner {\\n config.infinityToken = infinityToken;\\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\\n config.tokenPair = IUniswapV2Pair(uniswapPair);\\n config.feeDistributor = IFeeDistributor(feeDistributor);\\n config.weth = config.uniswapRouter.WETH();\\n setFeeReceiverAddress(feeReceiver);\\n setParameters(duration, donationShare, purchaseFee);\\n }\\n\\n function getStakeDuration() public view returns (uint) {\\n return forceUnlock ? 0 : config.stakeDuration;\\n }\\n\\n // Could not be canceled if activated\\n function enableLPForceUnlock() public onlyOwner {\\n forceUnlock = true;\\n }\\n\\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\\n require(\\n feeReceiver != address(0),\\n \\\"LiquidVault: ETH receiver is zero address\\\"\\n );\\n\\n config.feeReceiver = feeReceiver;\\n }\\n\\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\\n public\\n onlyOwner\\n {\\n require(\\n donationShare <= 100,\\n \\\"LiquidVault: donation share % between 0 and 100\\\"\\n );\\n require(\\n purchaseFee <= 100,\\n \\\"LiquidVault: purchase fee share % between 0 and 100\\\"\\n );\\n\\n config.stakeDuration = duration * 1 days;\\n config.donationShare = donationShare;\\n config.purchaseFee = purchaseFee;\\n }\\n\\n function purchaseLPFor(address beneficiary) public payable lock {\\n config.feeDistributor.distributeFees();\\n require(msg.value > 0, \\\"LiquidVault: ETH required to mint INFINITY LP\\\");\\n\\n uint feeValue = (config.purchaseFee * msg.value) / 100;\\n uint exchangeValue = msg.value - feeValue;\\n\\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\\n\\n uint infinityRequired;\\n\\n if (address(config.infinityToken) < address(config.weth)) {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve2,\\n reserve1\\n );\\n } else {\\n infinityRequired = config.uniswapRouter.quote(\\n exchangeValue,\\n reserve1,\\n reserve2\\n );\\n }\\n\\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\\n require(\\n balance >= infinityRequired,\\n \\\"LiquidVault: insufficient INFINITY tokens in LiquidVault\\\"\\n );\\n\\n IWETH(config.weth).deposit{ value: exchangeValue }();\\n address tokenPairAddress = address(config.tokenPair);\\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\\n IERC20(config.infinityToken).transfer(\\n tokenPairAddress,\\n infinityRequired\\n );\\n\\n uint liquidityCreated = config.tokenPair.mint(address(this));\\n config.feeReceiver.transfer(feeValue);\\n\\n lockedLP[beneficiary].push(\\n LPbatch({\\n holder: beneficiary,\\n amount: liquidityCreated,\\n timestamp: block.timestamp,\\n claimed: false\\n })\\n );\\n\\n emit LPQueued(\\n beneficiary,\\n liquidityCreated,\\n exchangeValue,\\n infinityRequired,\\n block.timestamp\\n );\\n\\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\\n }\\n\\n //send ETH to match with INFINITY tokens in LiquidVault\\n function purchaseLP() public payable {\\n purchaseLPFor(msg.sender);\\n }\\n\\n function claimLP() public {\\n uint next = queueCounter[msg.sender];\\n require(\\n next < lockedLP[msg.sender].length,\\n \\\"LiquidVault: nothing to claim.\\\"\\n );\\n LPbatch storage batch = lockedLP[msg.sender][next];\\n require(\\n block.timestamp - batch.timestamp > getStakeDuration(),\\n \\\"LiquidVault: LP still locked.\\\"\\n );\\n next++;\\n queueCounter[msg.sender] = next;\\n uint donation = (config.donationShare * batch.amount) / 100;\\n batch.claimed = true;\\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\\n require(\\n config.tokenPair.transfer(address(0), donation),\\n \\\"LiquidVault: donation transfer failed in LP claim.\\\"\\n );\\n require(\\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\\n \\\"LiquidVault: transfer failed in LP claim.\\\"\\n );\\n }\\n\\n function lockedLPLength(address holder) public view returns (uint) {\\n return lockedLP[holder].length;\\n }\\n\\n function getLockedLP(address holder, uint position)\\n public\\n view\\n returns (\\n address,\\n uint,\\n uint,\\n bool\\n )\\n {\\n LPbatch memory batch = lockedLP[holder][position];\\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\\n }\\n}\",\"keccak256\":\"0xf470245efe80b6887c8d5f7a5408c46fca8b4cb1cfcaac363281ce26c031694c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6117ef8061007d6000396000f3fe6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", - "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806387c9082d11610095578063b4a9710111610064578063b4a971011461037c578063bd901bdd146103af578063de44391a146103d5578063dfbcaeb9146103ea578063f2fde38b1461045b576100fe565b806387c9082d146102be5780638da5cb5b146103035780639c4e3148146103345780639f1bfc6c14610367576100fe565b8063715018a6116100d1578063715018a6146101ff57806374d6588b1461021457806379502c551461021c5780637965c96714610295576100fe565b80631a5a3794146101035780631ebaaf66146101465780631faaa66d146101b15780635536998c146101ea575b600080fd5b34801561010f57600080fd5b506101446004803603606081101561012657600080fd5b5063ffffffff8135169060ff6020820135811691604001351661048e565b005b34801561015257600080fd5b5061017f6004803603604081101561016957600080fd5b506001600160a01b0381351690602001356105c8565b604080516001600160a01b03909516855260208501939093528383019190915215156060830152519081900360800190f35b3480156101bd57600080fd5b5061017f600480360360408110156101d457600080fd5b506001600160a01b03813516906020013561065e565b3480156101f657600080fd5b506101446106b1565b34801561020b57600080fd5b50610144610728565b6101446107d4565b34801561022857600080fd5b506102316107df565b604080516001600160a01b039a8b168152988a1660208a01529689168888015294881660608801529287166080870152951660a085015263ffffffff90941660c084015260ff93841660e08401529092166101008201529051908190036101200190f35b3480156102a157600080fd5b506102aa610835565b604080519115158252519081900360200190f35b3480156102ca57600080fd5b506102f1600480360360208110156102e157600080fd5b50356001600160a01b0316610845565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610860565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101446004803603602081101561035757600080fd5b50356001600160a01b031661086f565b34801561037357600080fd5b506102f1610938565b34801561038857600080fd5b506102f16004803603602081101561039f57600080fd5b50356001600160a01b031661096d565b610144600480360360208110156103c557600080fd5b50356001600160a01b031661097f565b3480156103e157600080fd5b50610144611062565b3480156103f657600080fd5b50610144600480360361010081101561040e57600080fd5b5063ffffffff813516906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a0820135169060ff60c082013581169160e0013516611381565b34801561046757600080fd5b506101446004803603602081101561047e57600080fd5b50356001600160a01b03166114ce565b6104966115d0565b6001600160a01b03166104a7610860565b6001600160a01b0316146104f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b60648260ff1611156105335760405162461bcd60e51b815260040180806020018281038252602f815260200180611608602f913960400191505060405180910390fd5b60648160ff1611156105765760405162461bcd60e51b815260040180806020018281038252603381526020018061173a6033913960400191505060405180910390fd5b6006805463ffffffff60a01b1916600160a01b620151809590950263ffffffff16949094029390931760ff60c01b1916600160c01b60ff938416021760ff60c81b1916600160c81b9190921602179055565b6000806000806105d66115d4565b6001600160a01b03871660009081526007602052604090208054879081106105fa57fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff16151560609093018390529a929950975095509350505050565b6007602052816000526040600020818154811061067a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6106b96115d0565b6001600160a01b03166106ca610860565b6001600160a01b031614610713576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b6107306115d0565b6001600160a01b0316610741610860565b6001600160a01b03161461078a576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107dd3361097f565b565b6001546002546003546004546005546006546001600160a01b03958616959485169493841693928316929182169181169063ffffffff600160a01b8204169060ff600160c01b8204811691600160c81b90041689565b600054600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b6000546001600160a01b031690565b6108776115d0565b6001600160a01b0316610888610860565b6001600160a01b0316146108d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166109165760405162461bcd60e51b81526004018080602001828103825260298152602001806116df6029913960400191505060405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600160a01b900460ff1661095f57600654600160a01b900463ffffffff16610962565b60005b63ffffffff16905090565b60086020526000908152604090205481565b600054600160a81b900460ff16156109c85760405162461bcd60e51b81526004018080602001828103825260218152602001806116be6021913960400191505060405180910390fd5b6000805460ff60a81b1916600160a81b17815560048054604080516305dabd6960e51b815290516001600160a01b039092169363bb57ad209382810193919282900301818387803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b5050505060003411610a735760405162461bcd60e51b815260040180806020018281038252602d81526020018061178d602d913960400191505060405180910390fd5b60065460035460408051630240bc6b60e21b81529051606434600160c81b90950460ff16850204938490039260009283926001600160a01b0390921691630902f1ac91600480820192606092909190829003018186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d6060811015610b0057600080fd5b5080516020909101516005546001546dffffffffffffffffffffffffffff93841695509290911692506000916001600160a01b0391821691161015610bcc5760025460408051632b58577b60e21b815260048101879052602481018590526044810186905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519050610c55565b60025460408051632b58577b60e21b815260048101879052602481018690526044810185905290516001600160a01b039092169163ad615dec91606480820192602092909190829003018186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6020811015610c5057600080fd5b505190505b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d6020811015610cca57600080fd5b5051905081811015610d0d5760405162461bcd60e51b81526004018080602001828103825260388152602001806116866038913960400191505060405180910390fd5b60055460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918891600482810192600092919082900301818588803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50506003546005546040805163a9059cbb60e01b81526001600160a01b0393841660048201819052602482018d9052915191965092909116935063a9059cbb925060448083019260209291908290030181600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b50506001546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b5050600354604080516335313c2160e11b815230600482015290516000926001600160a01b031691636a62784291602480830192602092919082900301818787803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050506040513d6020811015610eee57600080fd5b50516006546040519192506001600160a01b03169089156108fc02908a906000818181858888f19350505050158015610f2b573d6000803e3d6000fd5b506001600160a01b0389811660008181526007602090815260408083208151608080820184528682528185018981524283860181815260608086018a8152875460018082018a55988c529a8a902096516004909b0290960180546001600160a01b0319169a909c16999099178b559151948a019490945551600289015590516003909701805460ff19169715159790971790965581519485529184018690528381018c90529183018890529282019290925290517fe7660232e29d90e682443fb9547e347cb9bf2e0819d4b6c656ad7230d4f100e29160a0908290030190a160408051338152602081018990528082018a905290517f33d1666e046acf93d35357bd3ae33df3095c40a5a5de75819698072d97121d289181900360600190a150506000805460ff60a81b1916905550505050505050565b3360009081526008602090815260408083205460079092529091205481106110d1576040805162461bcd60e51b815260206004820152601e60248201527f4c69717569645661756c743a206e6f7468696e6720746f20636c61696d2e0000604482015290519081900360640190fd5b3360009081526007602052604081208054839081106110ec57fe5b90600052602060002090600402019050611104610938565b816002015442031161115d576040805162461bcd60e51b815260206004820152601d60248201527f4c69717569645661756c743a204c50207374696c6c206c6f636b65642e000000604482015290519081900360640190fd5b336000818152600860209081526040918290206001958601908190558486015460065460038701805460ff19169098179788905584519586529285018190524285850152606460ff600160c01b90940484169091020460608501819052959091161515608084015290519093917feb9f916af767932dafd78f28d270d1975fefe77bcb9d160cc653bf9cfc3599719160a0918190039190910190a16003546040805163a9059cbb60e01b81526000600482018190526024820185905291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b81526004018080602001828103825260328152602001806117086032913960400191505060405180910390fd5b600354825460018401546040805163a9059cbb60e01b81526001600160a01b03938416600482015291859003602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505161137c5760405162461bcd60e51b81526004018080602001828103825260298152602001806116376029913960400191505060405180910390fd5b505050565b6113896115d0565b6001600160a01b031661139a610860565b6001600160a01b0316146113e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b038a81169190911790925560028054821688841617908190556003805483168a851617905560048054909216878416178255604080516315ab88c960e31b81529051919093169263ad5c46489281810192602092909190829003018186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b5051600580546001600160a01b0319166001600160a01b039092169190911790556114b98361086f565b6114c488838361048e565b5050505050505050565b6114d66115d0565b6001600160a01b03166114e7610860565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061176d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115755760405162461bcd60e51b81526004018080602001828103825260268152602001806116606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600015158152509056fe4c69717569645661756c743a20646f6e6174696f6e2073686172652025206265747765656e203020616e64203130304c69717569645661756c743a207472616e73666572206661696c656420696e204c5020636c61696d2e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c69717569645661756c743a20696e73756666696369656e7420494e46494e49545920746f6b656e7320696e204c69717569645661756c744c69717569645661756c743a207265656e7472616e63792076696f6c6174696f6e4c69717569645661756c743a20455448207265636569766572206973207a65726f20616464726573734c69717569645661756c743a20646f6e6174696f6e207472616e73666572206661696c656420696e204c5020636c61696d2e4c69717569645661756c743a207075726368617365206665652073686172652025206265747765656e203020616e64203130304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c69717569645661756c743a2045544820726571756972656420746f206d696e7420494e46494e495459204c50a2646970667358221220ed8981c7d680570e386bd9dbb5e01636c5c73416dddecb348c99f9258c7a286a64736f6c63430007040033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "events": { - "EthTransferred(address,uint256,uint256)": { - "notice": "Emitted when purchaseLP() is called to track ETH amounts " - }, - "LPClaimed(address,uint256,uint256,uint256,bool)": { - "notice": "Emitted when claimLP() is called " - }, - "LPQueued(address,uint256,uint256,uint256,uint256)": { - "notice": "Emitted when purchaseLP() is called and LP tokens minted " - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5821, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "forceUnlock", - "offset": 20, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 5823, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "locked", - "offset": 21, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 5843, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "config", - "offset": 0, - "slot": "1", - "type": "t_struct(LiquidVaultConfig)5819_storage" - }, - { - "astId": 5848, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "lockedLP", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)" - }, - { - "astId": 5852, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "queueCounter", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_address_payable": { - "encoding": "inplace", - "label": "address payable", - "numberOfBytes": "20" - }, - "t_array(t_struct(LPbatch)5800_storage)dyn_storage": { - "base": "t_struct(LPbatch)5800_storage", - "encoding": "dynamic_array", - "label": "struct LiquidVault.LPbatch[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IFeeDistributor)4407": { - "encoding": "inplace", - "label": "contract IFeeDistributor", - "numberOfBytes": "20" - }, - "t_contract(IUniswapV2Pair)1205": { - "encoding": "inplace", - "label": "contract IUniswapV2Pair", - "numberOfBytes": "20" - }, - "t_contract(IUniswapV2Router02)1601": { - "encoding": "inplace", - "label": "contract IUniswapV2Router02", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_array(t_struct(LPbatch)5800_storage)dyn_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LiquidVault.LPbatch[])", - "numberOfBytes": "32", - "value": "t_array(t_struct(LPbatch)5800_storage)dyn_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(LPbatch)5800_storage": { - "encoding": "inplace", - "label": "struct LiquidVault.LPbatch", - "members": [ - { - "astId": 5793, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "holder", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5795, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "amount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 5797, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "timestamp", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 5799, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "claimed", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_struct(LiquidVaultConfig)5819_storage": { - "encoding": "inplace", - "label": "struct LiquidVault.LiquidVaultConfig", - "members": [ - { - "astId": 5802, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "infinityToken", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5804, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "uniswapRouter", - "offset": 0, - "slot": "1", - "type": "t_contract(IUniswapV2Router02)1601" - }, - { - "astId": 5806, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "tokenPair", - "offset": 0, - "slot": "2", - "type": "t_contract(IUniswapV2Pair)1205" - }, - { - "astId": 5808, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "feeDistributor", - "offset": 0, - "slot": "3", - "type": "t_contract(IFeeDistributor)4407" - }, - { - "astId": 5810, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "weth", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 5812, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "feeReceiver", - "offset": 0, - "slot": "5", - "type": "t_address_payable" - }, - { - "astId": 5814, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "stakeDuration", - "offset": 20, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 5816, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "donationShare", - "offset": 24, - "slot": "5", - "type": "t_uint8" - }, - { - "astId": 5818, - "contract": "contracts/vaults/LiquidVault.sol:LiquidVault", - "label": "purchaseFee", - "offset": 25, - "slot": "5", - "type": "t_uint8" - } - ], - "numberOfBytes": "192" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - } -} \ No newline at end of file diff --git a/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json b/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json deleted file mode 100644 index dd31a68..0000000 --- a/deployments/hardhat/solcInputs/50935558cf5835f525f697d3157617bd.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "contracts/FeeDistributor.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract FeeDistributor is Ownable {\n using SafeMath for uint;\n\n struct FeeRecipient {\n address liquidVault;\n address secondaryAddress;\n uint256 liquidVaultShare; //percentage between 0 and 100\n uint256 burnPercentage;\n }\n \n IInfinityProtocol public infinity;\n FeeRecipient public recipients;\n\n bool public initialized;\n\n uint private constant MINIMUM_AMOUNT = 1e8;\n\n modifier seeded {\n require(\n initialized,\n \"FeeDistributor: Fees cannot be distributed until Distributor seeded.\"\n );\n _;\n }\n\n function seed(\n address _infinity,\n address _vault,\n address _secondaryAddress,\n uint _liquidVaultShare,\n uint _burnPercentage\n ) external onlyOwner {\n require(\n _liquidVaultShare.add(_burnPercentage) <= 100,\n \"FeeDistributor: liquidVault + burnPercentage incorrect sets\"\n );\n infinity = IInfinityProtocol(_infinity);\n recipients.liquidVault = _vault;\n recipients.secondaryAddress = _secondaryAddress;\n recipients.liquidVaultShare = _liquidVaultShare;\n recipients.burnPercentage = _burnPercentage;\n initialized = true;\n }\n\n function distributeFees() external seeded {\n uint balance = infinity.balanceOf(address(this));\n\n if (balance < MINIMUM_AMOUNT) {\n return;\n }\n\n uint liquidShare;\n uint burningShare;\n uint secondaryShare;\n\n if (recipients.liquidVaultShare > 0) {\n liquidShare = recipients.liquidVaultShare.mul(balance).div(100);\n\n require(\n infinity.transfer(recipients.liquidVault, liquidShare),\n \"FeeDistributor: transfer to LiquidVault failed\"\n );\n }\n\n if (recipients.burnPercentage > 0) {\n burningShare = recipients.burnPercentage.mul(balance).div(100);\n infinity.burn(burningShare);\n }\n\n secondaryShare = balance.sub(liquidShare).sub(burningShare);\n if (secondaryShare > 0) {\n require(\n infinity.transfer(recipients.secondaryAddress, secondaryShare),\n \"FeeDistributor: transfer to the secondary address failed\"\n );\n }\n }\n}" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "contracts/interfaces/IInfinityProtocol.sol": { - "content": "import \"./IERC20.sol\";\n\ninterface IInfinityProtocol is IERC20 {\n function burn(uint amount) external returns (bool);\n}" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "contracts/interfaces/IERC20.sol": { - "content": "pragma solidity 0.7.4;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function decimals() external pure returns (uint8);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}" - }, - "contracts/InfinityProtocol.sol": { - "content": "pragma solidity 0.7.4;\n\nimport \"@openzeppelin/contracts/GSN/Context.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"./interfaces/IInfinityProtocol.sol\";\n\ncontract InfinityProtocol is IInfinityProtocol, Context, Ownable {\n\n using SafeMath for uint;\n using Address for address;\n\n mapping (address => uint) private _rOwned;\n mapping (address => uint) private _tOwned;\n mapping (address => mapping (address => uint)) private _allowances;\n\n mapping (address => bool) private _isExcluded;\n address[] private _excluded;\n address public feeReceiver;\n address public router;\n uint public maxCycles;\n\n string private constant _NAME = \"infinityprotocol.io\";\n string private constant _SYMBOL = \"INFINITY\";\n uint8 private constant _DECIMALS = 8;\n\n uint private constant _MAX = ~uint(0);\n uint private constant _DECIMALFACTOR = 10 ** uint(_DECIMALS);\n uint private constant _GRANULARITY = 100;\n\n uint private _tTotal = 100000000 * _DECIMALFACTOR;\n uint private _rTotal = (_MAX - (_MAX % _tTotal));\n\n uint private _tFeeTotal;\n uint private _tBurnTotal;\n uint private _infinityCycle;\n\n uint private _tTradeCycle;\n uint private _tBurnCycle;\n\n uint private _BURN_FEE;\n uint private _FOT_FEE;\n bool private _feeSet;\n\n uint private constant _MAX_TX_SIZE = 100000000 * _DECIMALFACTOR;\n\n constructor (address _router) public {\n _rOwned[_msgSender()] = _rTotal;\n router = _router;\n setMaxCycles(500);\n emit Transfer(address(0), _msgSender(), _tTotal);\n }\n\n function name() public pure returns (string memory) {\n return _NAME;\n }\n\n function symbol() public pure returns (string memory) {\n return _SYMBOL;\n }\n\n function decimals() public pure override returns (uint8) {\n return _DECIMALS;\n }\n\n function totalSupply() public view override returns (uint) {\n return _tTotal;\n }\n\n function balanceOf(address account) public view override returns (uint) {\n if (_isExcluded[account]) return _tOwned[account];\n return tokenFromReflection(_rOwned[account]);\n }\n\n function transfer(address recipient, uint amount) public override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint amount) public override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n function isExcluded(address account) public view returns (bool) {\n return _isExcluded[account];\n }\n\n function totalFees() public view returns (uint) {\n return _tFeeTotal;\n }\n\n function totalBurn() public view returns (uint) {\n return _tBurnTotal;\n }\n\n function setFeeReceiver(address receiver) external onlyOwner() returns (bool) {\n require(receiver != address(0), \"Zero address not allowed\");\n feeReceiver = receiver;\n return true;\n }\n\n function totalBurnWithFees() public view returns (uint) {\n return _tBurnTotal.add(_tFeeTotal);\n }\n\n function reflectionFromToken(uint transferAmount, bool deductTransferFee) public view returns(uint) {\n require(transferAmount <= _tTotal, \"Amount must be less than supply\");\n if (!deductTransferFee) {\n (uint rAmount,,,,,) = _getValues(transferAmount);\n return rAmount;\n } else {\n (,uint rTransferAmount,,,,) = _getValues(transferAmount);\n return rTransferAmount;\n }\n }\n\n function tokenFromReflection(uint rAmount) public view returns(uint) {\n require(rAmount <= _rTotal, \"Amount must be less than total reflections\");\n uint currentRate = _getRate();\n return rAmount.div(currentRate);\n }\n\n function excludeAccount(address account) external onlyOwner() {\n require(!_isExcluded[account], \"Account is already excluded\");\n require(account != router, 'Not allowed to exclude router');\n require(account != feeReceiver, \"Can not exclude fee receiver\");\n if (_rOwned[account] > 0) {\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\n }\n _isExcluded[account] = true;\n _excluded.push(account);\n }\n\n function includeAccount(address account) external onlyOwner() {\n require(_isExcluded[account], \"Account is already included\");\n for (uint i = 0; i < _excluded.length; i++) {\n if (_excluded[i] == account) {\n _excluded[i] = _excluded[_excluded.length - 1];\n _tOwned[account] = 0;\n _isExcluded[account] = false;\n _excluded.pop();\n break;\n }\n }\n }\n\n function _approve(address owner, address spender, uint amount) private {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n function _transfer(address sender, address recipient, uint amount) private {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n require(amount > 0, \"Transfer amount must be greater than zero\");\n\n // @dev once all cycles are completed, burn fee will be set to 0 and the protocol\n // reaches its final phase, in which no further supply elasticity will take place\n // and fees will stay at 0\n\n if (sender != owner() && recipient != owner())\n require(amount <= _MAX_TX_SIZE, \"Transfer amount exceeds the maxTxAmount.\");\n\n // @dev 50% fee is burn fee, 50% is fot\n if (_BURN_FEE >= 250) {\n\n _tTradeCycle = _tTradeCycle.add(amount);\n\n\n // @dev adjust current burnFee/fotFee depending on the traded tokens\n if (_tTradeCycle >= (0 * _DECIMALFACTOR) && _tTradeCycle <= (1000000 * _DECIMALFACTOR)) {\n _setFees(500);\n } else if (_tTradeCycle > (1000000 * _DECIMALFACTOR) && _tTradeCycle <= (2000000 * _DECIMALFACTOR)) {\n _setFees(550);\n } else if (_tTradeCycle > (2000000 * _DECIMALFACTOR) && _tTradeCycle <= (3000000 * _DECIMALFACTOR)) {\n _setFees(600);\n } else if (_tTradeCycle > (3000000 * _DECIMALFACTOR) && _tTradeCycle <= (4000000 * _DECIMALFACTOR)) {\n _setFees(650);\n } else if (_tTradeCycle > (4000000 * _DECIMALFACTOR) && _tTradeCycle <= (5000000 * _DECIMALFACTOR)) {\n _setFees(700);\n } else if (_tTradeCycle > (5000000 * _DECIMALFACTOR) && _tTradeCycle <= (6000000 * _DECIMALFACTOR)) {\n _setFees(750);\n } else if (_tTradeCycle > (6000000 * _DECIMALFACTOR) && _tTradeCycle <= (7000000 * _DECIMALFACTOR)) {\n _setFees(800);\n } else if (_tTradeCycle > (7000000 * _DECIMALFACTOR) && _tTradeCycle <= (8000000 * _DECIMALFACTOR)) {\n _setFees(850);\n } else if (_tTradeCycle > (8000000 * _DECIMALFACTOR) && _tTradeCycle <= (9000000 * _DECIMALFACTOR)) {\n _setFees(900);\n } else if (_tTradeCycle > (9000000 * _DECIMALFACTOR) && _tTradeCycle <= (10000000 * _DECIMALFACTOR)) {\n _setFees(950);\n } else if (_tTradeCycle > (10000000 * _DECIMALFACTOR) && _tTradeCycle <= (11000000 * _DECIMALFACTOR)) {\n _setFees(1000);\n } else if (_tTradeCycle > (11000000 * _DECIMALFACTOR) && _tTradeCycle <= (12000000 * _DECIMALFACTOR)) {\n _setFees(1050);\n } else if (_tTradeCycle > (12000000 * _DECIMALFACTOR) && _tTradeCycle <= (13000000 * _DECIMALFACTOR)) {\n _setFees(1100);\n } else if (_tTradeCycle > (13000000 * _DECIMALFACTOR) && _tTradeCycle <= (14000000 * _DECIMALFACTOR)) {\n _setFees(1150);\n } else if (_tTradeCycle > (14000000 * _DECIMALFACTOR)) {\n _setFees(1200);\n }\n }\n\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferFromExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\n _transferToExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferStandard(sender, recipient, amount);\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\n _transferBothExcluded(sender, recipient, amount);\n } else {\n _transferStandard(sender, recipient, amount);\n }\n }\n\n function _transferStandard(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferToExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferFromExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _transferBothExcluded(address sender, address recipient, uint transferAmount) private {\n uint currentRate = _getRate();\n (uint rAmount, uint rTransferAmount, uint rFee, uint tTransferAmount, uint transferFee, uint transferBurn) = _getValues(transferAmount);\n uint rBurn = transferBurn.mul(currentRate);\n _tOwned[sender] = _tOwned[sender].sub(transferAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n\n _rOwned[feeReceiver] = _rOwned[feeReceiver].add(rFee);\n\n _burnAndRebase(rBurn, transferFee, transferBurn);\n emit Transfer(sender, recipient, tTransferAmount);\n\n if (transferFee > 0) {\n emit Transfer(sender, feeReceiver, transferFee);\n }\n }\n\n function _burnAndRebase(uint rBurn, uint transferFee, uint transferBurn) private {\n _rTotal = _rTotal.sub(rBurn);\n _tFeeTotal = _tFeeTotal.add(transferFee);\n _tBurnTotal = _tBurnTotal.add(transferBurn);\n _tBurnCycle = _tBurnCycle.add(transferBurn).add(transferFee);\n _tTotal = _tTotal.sub(transferBurn);\n\n\n // @dev after 1,275,000 tokens burnt, supply is expanded by 500,000 tokens \n if (_tBurnCycle >= (1275000 * _DECIMALFACTOR)) {\n //set rebase percent\n uint _tRebaseDelta = 500000 * _DECIMALFACTOR;\n _tBurnCycle = _tBurnCycle.sub((1275000 * _DECIMALFACTOR));\n _tTradeCycle = 0;\n _setFees(500);\n\n _rebase(_tRebaseDelta);\n }\n }\n\n function burn(uint amount) external override returns (bool) {\n address sender = _msgSender();\n uint balance = balanceOf(sender);\n require(balance >= amount, \"Cannot burn more than on balance\");\n require(sender == feeReceiver, \"Only feeReceiver\");\n\n uint rBurn = amount.mul(_getRate());\n _rTotal = _rTotal.sub(rBurn);\n _rOwned[sender] = _rOwned[sender].sub(rBurn);\n\n _tBurnTotal = _tBurnTotal.add(amount);\n _tTotal = _tTotal.sub(amount);\n\n emit Transfer(sender, address(0), amount);\n return true;\n }\n\n function _getValues(uint transferAmount) private view returns (uint, uint, uint, uint, uint, uint) {\n (uint tTransferAmount, uint transferFee, uint transferBurn) = _getTValues(transferAmount, _FOT_FEE, _BURN_FEE);\n (uint rAmount, uint rTransferAmount, uint rFee) = _getRValues(transferAmount, transferFee, transferBurn);\n return (rAmount, rTransferAmount, rFee, tTransferAmount, transferFee, transferBurn);\n }\n\n function _getTValues(uint transferAmount, uint fotFee, uint burnFee) private pure returns (uint, uint, uint) {\n uint transferFee = ((transferAmount.mul(fotFee)).div(_GRANULARITY)).div(100);\n uint transferBurn = ((transferAmount.mul(burnFee)).div(_GRANULARITY)).div(100);\n uint tTransferAmount = transferAmount.sub(transferFee).sub(transferBurn);\n return (tTransferAmount, transferFee, transferBurn);\n }\n\n function _getRValues(uint transferAmount, uint transferFee, uint transferBurn) private view returns (uint, uint, uint) {\n uint currentRate = _getRate();\n uint rAmount = transferAmount.mul(currentRate);\n uint rFee = transferFee.mul(currentRate);\n uint rBurn = transferBurn.mul(currentRate);\n uint rTransferAmount = rAmount.sub(rFee).sub(rBurn);\n return (rAmount, rTransferAmount, rFee);\n }\n\n function _getRate() private view returns(uint) {\n (uint rSupply, uint tSupply) = _getCurrentSupply();\n return rSupply.div(tSupply);\n }\n\n function _getCurrentSupply() private view returns(uint, uint) {\n uint rSupply = _rTotal;\n uint tSupply = _tTotal;\n for (uint i = 0; i < _excluded.length; i++) {\n if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\n }\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n return (rSupply, tSupply);\n }\n\n\n function _setFees(uint fee) private {\n require(fee >= 0 && fee <= 1500, \"fee should be in 0 - 15%\");\n if (_BURN_FEE == fee.div(2)) {\n return;\n }\n\n _BURN_FEE = fee.div(2);\n _FOT_FEE = fee.div(2);\n }\n\n function setInitialFee() external onlyOwner() {\n require(!_feeSet, \"Initial fee already set\");\n _setFees(500);\n _feeSet = true;\n }\n\n function setMaxCycles(uint _maxCycles) public onlyOwner() {\n require(_maxCycles >= _infinityCycle, \"Can not set more than current cycle\");\n maxCycles = _maxCycles;\n }\n\n function getBurnFee() public view returns(uint) {\n return _BURN_FEE;\n }\n\n function getFee() public view returns(uint) {\n return _FOT_FEE;\n }\n\n function _getMaxTxAmount() private pure returns(uint) {\n return _MAX_TX_SIZE;\n }\n\n function getCycle() public view returns(uint) {\n return _infinityCycle;\n }\n\n function getBurnCycle() public view returns(uint) {\n return _tBurnCycle;\n }\n\n function getTradedCycle() public view returns(uint) {\n return _tTradeCycle;\n }\n\n function _rebase(uint supplyDelta) internal {\n _infinityCycle = _infinityCycle.add(1);\n _tTotal = _tTotal.add(supplyDelta);\n\n if (_infinityCycle > maxCycles) {\n _setFees(0);\n }\n }\n}\n" - }, - "@openzeppelin/contracts/GSN/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "contracts/vaults/HodlerVaultSpace.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport '@openzeppelin/contracts/math/SafeMath.sol';\nimport \"../interfaces/IERC20.sol\";\n\ncontract HodlerVaultSpace is Ownable {\n using SafeMath for uint;\n\n /** Emitted when purchaseLP() is called to track INFINITY amounts */\n event InfinityTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address hodler,\n uint amount,\n uint eth,\n uint infinityTokens,\n uint timeStamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address hodler,\n uint amount,\n uint timestamp,\n uint donation\n );\n\n struct LPbatch {\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct HodlerVaultConfig {\n IERC20 infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool private locked;\n bool public forceUnlock;\n\n modifier lock {\n require(!locked, \"HodlerVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n HodlerVaultConfig public config;\n //Front end can loop through this and inspect if enough time has passed\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n receive() external payable {}\n\n function maxTokensToInvest() external view returns (uint) {\n uint totalETH = address(this).balance;\n if (totalETH == 0) {\n return 0;\n }\n\n uint infinityMaxAllowed;\n\n (uint reserve1, uint reserve2,) = config.tokenPair.getReserves();\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve2,\n reserve1\n );\n } else {\n infinityMaxAllowed = config.uniswapRouter.quote(\n totalETH,\n reserve1,\n reserve2\n );\n }\n\n return infinityMaxAllowed;\n }\n\n\n function getLockedLP(address hodler, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[hodler][position];\n return (hodler, batch.amount, batch.timestamp, batch.claimed);\n }\n\n function lockedLPLength(address hodler) external view returns (uint) {\n return lockedLP[hodler].length;\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n function seed(\n uint32 duration,\n IERC20 infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address payable feeReceiver,\n uint8 purchaseFee // INFINITY\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, 0, purchaseFee);\n setFeeReceiver(feeReceiver);\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"HodlerVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"HodlerVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n\n function setFeeReceiver(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"HodlerVaultSpace: fee receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function purchaseLP(uint amount) external lock {\n require(amount > 0, \"HodlerVaultSpace: INFINITY required to mint LP\");\n require(config.infinityToken.balanceOf(msg.sender) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens\");\n require(config.infinityToken.allowance(msg.sender, address(this)) >= amount, \"HodlerVaultSpace: Not enough INFINITY tokens allowance\");\n\n uint infinityFee = amount.mul(config.purchaseFee).div(100);\n uint netInfinity = amount.sub(infinityFee);\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint ethRequired;\n\n if (address(config.infinityToken) > address(config.weth)) {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve2,\n reserve1\n );\n } else {\n ethRequired = config.uniswapRouter.quote(\n netInfinity,\n reserve1,\n reserve2\n );\n }\n\n require(\n address(this).balance >= ethRequired,\n \"HodlerVaultSpace: insufficient ETH on HodlerVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: ethRequired }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, ethRequired);\n config.infinityToken.transferFrom(\n msg.sender,\n tokenPairAddress,\n netInfinity\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n if (infinityFee > 0 && config.feeReceiver != address(0)) {\n config.infinityToken.transferFrom(\n msg.sender,\n config.feeReceiver,\n infinityFee\n );\n }\n\n lockedLP[msg.sender].push(\n LPbatch({\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n msg.sender,\n liquidityCreated,\n ethRequired,\n netInfinity,\n block.timestamp\n );\n\n emit InfinityTransferred(msg.sender, netInfinity, infinityFee);\n }\n\n //pops latest LP if older than period\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"HodlerVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"HodlerVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"HodlerVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(msg.sender, batch.amount - donation),\n \"HodlerVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { - "content": "pragma solidity >=0.6.2;\n\nimport './IUniswapV2Router01.sol';\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountETH);\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external payable;\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external;\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { - "content": "pragma solidity >=0.5.0;\n\ninterface IWETH {\n function deposit() external payable;\n function transfer(address to, uint value) external returns (bool);\n function withdraw(uint) external;\n}\n" - }, - "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { - "content": "pragma solidity >=0.5.0;\n\ninterface IUniswapV2Pair {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external pure returns (string memory);\n function symbol() external pure returns (string memory);\n function decimals() external pure returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n function PERMIT_TYPEHASH() external pure returns (bytes32);\n function nonces(address owner) external view returns (uint);\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n function MINIMUM_LIQUIDITY() external pure returns (uint);\n function factory() external view returns (address);\n function token0() external view returns (address);\n function token1() external view returns (address);\n function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n function price0CumulativeLast() external view returns (uint);\n function price1CumulativeLast() external view returns (uint);\n function kLast() external view returns (uint);\n\n function mint(address to) external returns (uint liquidity);\n function burn(address to) external returns (uint amount0, uint amount1);\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n function skim(address to) external;\n function sync() external;\n\n function initialize(address, address) external;\n}\n" - }, - "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { - "content": "pragma solidity >=0.6.2;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB, uint liquidity);\n function addLiquidityETH(\n address token,\n uint amountTokenDesired,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETH(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline\n ) external returns (uint amountToken, uint amountETH);\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMin,\n uint amountBMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountA, uint amountB);\n function removeLiquidityETHWithPermit(\n address token,\n uint liquidity,\n uint amountTokenMin,\n uint amountETHMin,\n address to,\n uint deadline,\n bool approveMax, uint8 v, bytes32 r, bytes32 s\n ) external returns (uint amountToken, uint amountETH);\n function swapExactTokensForTokens(\n uint amountIn,\n uint amountOutMin,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapTokensForExactTokens(\n uint amountOut,\n uint amountInMax,\n address[] calldata path,\n address to,\n uint deadline\n ) external returns (uint[] memory amounts);\n function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n external\n returns (uint[] memory amounts);\n function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n external\n payable\n returns (uint[] memory amounts);\n\n function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n" - }, - "contracts/vaults/PowerLiquidVault.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract PowerLiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n uint public constant MINIMUM_BUY_PRESSURE_AMOUNT = 1e14; //0,0001 ETH minimum\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"PowerLiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"PowerLiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"PowerLiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"PowerLiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"PowerLiquidVault: insufficient INFINITY tokens in PowerLiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in PowerLiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"PowerLiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"PowerLiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"PowerLiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"PowerLiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function buyPressure() external {\n uint weiBalance = address(this).balance;\n require(\n weiBalance > MINIMUM_BUY_PRESSURE_AMOUNT, \n \"PowerLiquidVault: ETH amount must be > 0,0001 ETH.\"\n );\n\n address[] memory path = new address[](2);\n path[0] = address(config.weth);\n path[1] = address(config.infinityToken);\n\n config.uniswapRouter.swapExactETHForTokens{ value: weiBalance }(\n 0,\n path,\n address(this),\n block.timestamp\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" - }, - "contracts/interfaces/IFeeDistributor.sol": { - "content": "interface IFeeDistributor {\n function distributeFees() external;\n}" - }, - "contracts/vaults/LiquidVault.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract LiquidVault is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct LiquidVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable feeReceiver;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n \n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"LiquidVault: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n LiquidVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable feeReceiver,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) public onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setFeeReceiverAddress(feeReceiver);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() public onlyOwner {\n forceUnlock = true;\n }\n\n function setFeeReceiverAddress(address payable feeReceiver) public onlyOwner {\n require(\n feeReceiver != address(0),\n \"LiquidVault: ETH receiver is zero address\"\n );\n\n config.feeReceiver = feeReceiver;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"LiquidVault: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"LiquidVault: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"LiquidVault: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"LiquidVault: insufficient INFINITY tokens in LiquidVault\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n config.feeReceiver.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send ETH to match with INFINITY tokens in LiquidVault\n function purchaseLP() public payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() public {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"LiquidVault: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"LiquidVault: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"LiquidVault: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"LiquidVault: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) public view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n public\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}" - }, - "contracts/vaults/AcceleratorVaultSpace.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol\";\nimport \"@uniswap/v2-periphery/contracts/interfaces/IWETH.sol\";\nimport \"@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"../interfaces/IFeeDistributor.sol\";\n\ncontract AcceleratorVaultSpace is Ownable {\n /** Emitted when purchaseLP() is called to track ETH amounts */\n event EthTransferred(\n address from,\n uint amount,\n uint percentageAmount\n );\n\n /** Emitted when purchaseLP() is called and LP tokens minted */\n event LPQueued(\n address holder,\n uint amount,\n uint eth,\n uint infinityToken,\n uint timestamp\n );\n\n /** Emitted when claimLP() is called */\n event LPClaimed(\n address holder,\n uint amount,\n uint timestamp,\n uint exitFee,\n bool claimed\n );\n\n struct LPbatch {\n address holder;\n uint amount;\n uint timestamp;\n bool claimed;\n }\n\n struct AcceleratorVaultConfig {\n address infinityToken;\n IUniswapV2Router02 uniswapRouter;\n IUniswapV2Pair tokenPair;\n IFeeDistributor feeDistributor;\n address weth;\n address payable ethHodler;\n uint32 stakeDuration;\n uint8 donationShare; //0-100\n uint8 purchaseFee; //0-100\n }\n\n bool public forceUnlock;\n bool private locked;\n\n modifier lock {\n require(!locked, \"AcceleratorVaultSpace: reentrancy violation\");\n locked = true;\n _;\n locked = false;\n }\n\n AcceleratorVaultConfig public config;\n\n mapping(address => LPbatch[]) public lockedLP;\n mapping(address => uint) public queueCounter;\n\n function seed(\n uint32 duration,\n address infinityToken,\n address uniswapPair,\n address uniswapRouter,\n address feeDistributor,\n address payable ethHodler,\n uint8 donationShare, // LP Token\n uint8 purchaseFee // ETH\n ) external onlyOwner {\n config.infinityToken = infinityToken;\n config.uniswapRouter = IUniswapV2Router02(uniswapRouter);\n config.tokenPair = IUniswapV2Pair(uniswapPair);\n config.feeDistributor = IFeeDistributor(feeDistributor);\n config.weth = config.uniswapRouter.WETH();\n setEthHodlerAddress(ethHodler);\n setParameters(duration, donationShare, purchaseFee);\n }\n\n function getStakeDuration() public view returns (uint) {\n return forceUnlock ? 0 : config.stakeDuration;\n }\n\n // Could not be canceled if activated\n function enableLPForceUnlock() external onlyOwner {\n forceUnlock = true;\n }\n\n function setEthHodlerAddress(address payable ethHodler) public onlyOwner {\n require(\n ethHodler != address(0),\n \"AcceleratorVaultSpace: eth receiver is zero address\"\n );\n\n config.ethHodler = ethHodler;\n }\n\n function setParameters(uint32 duration, uint8 donationShare, uint8 purchaseFee)\n public\n onlyOwner\n {\n require(\n donationShare <= 100,\n \"AcceleratorVaultSpace: donation share % between 0 and 100\"\n );\n require(\n purchaseFee <= 100,\n \"AcceleratorVaultSpace: purchase fee share % between 0 and 100\"\n );\n\n config.stakeDuration = duration * 1 days;\n config.donationShare = donationShare;\n config.purchaseFee = purchaseFee;\n }\n\n function purchaseLPFor(address beneficiary) public payable lock {\n config.feeDistributor.distributeFees();\n require(msg.value > 0, \"AcceleratorVaultSpace: ETH required to mint INFINITY LP\");\n\n uint feeValue = (config.purchaseFee * msg.value) / 100;\n uint exchangeValue = msg.value - feeValue;\n\n (uint reserve1, uint reserve2, ) = config.tokenPair.getReserves();\n\n uint infinityRequired;\n\n if (address(config.infinityToken) < address(config.weth)) {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve2,\n reserve1\n );\n } else {\n infinityRequired = config.uniswapRouter.quote(\n exchangeValue,\n reserve1,\n reserve2\n );\n }\n\n uint balance = IERC20(config.infinityToken).balanceOf(address(this));\n require(\n balance >= infinityRequired,\n \"AcceleratorVaultSpace: insufficient INFINITY tokens in AcceleratorVaultSpace\"\n );\n\n IWETH(config.weth).deposit{ value: exchangeValue }();\n address tokenPairAddress = address(config.tokenPair);\n IWETH(config.weth).transfer(tokenPairAddress, exchangeValue);\n IERC20(config.infinityToken).transfer(\n tokenPairAddress,\n infinityRequired\n );\n\n uint liquidityCreated = config.tokenPair.mint(address(this));\n\n //ETH receiver is hodler vault here\n config.ethHodler.transfer(feeValue);\n\n lockedLP[beneficiary].push(\n LPbatch({\n holder: beneficiary,\n amount: liquidityCreated,\n timestamp: block.timestamp,\n claimed: false\n })\n );\n\n emit LPQueued(\n beneficiary,\n liquidityCreated,\n exchangeValue,\n infinityRequired,\n block.timestamp\n );\n\n emit EthTransferred(msg.sender, exchangeValue, feeValue);\n }\n\n //send eth to match with INFINITY tokens in AcceleratorVaultSpace\n function purchaseLP() external payable {\n purchaseLPFor(msg.sender);\n }\n\n function claimLP() external {\n uint next = queueCounter[msg.sender];\n require(\n next < lockedLP[msg.sender].length,\n \"AcceleratorVaultSpace: nothing to claim.\"\n );\n LPbatch storage batch = lockedLP[msg.sender][next];\n require(\n block.timestamp - batch.timestamp > getStakeDuration(),\n \"AcceleratorVaultSpace: LP still locked.\"\n );\n next++;\n queueCounter[msg.sender] = next;\n uint donation = (config.donationShare * batch.amount) / 100;\n batch.claimed = true;\n emit LPClaimed(msg.sender, batch.amount, block.timestamp, donation, batch.claimed);\n require(\n config.tokenPair.transfer(address(0), donation),\n \"AcceleratorVaultSpace: donation transfer failed in LP claim.\"\n );\n require(\n config.tokenPair.transfer(batch.holder, batch.amount - donation),\n \"AcceleratorVaultSpace: transfer failed in LP claim.\"\n );\n }\n\n function lockedLPLength(address holder) external view returns (uint) {\n return lockedLP[holder].length;\n }\n\n function getLockedLP(address holder, uint position)\n external\n view\n returns (\n address,\n uint,\n uint,\n bool\n )\n {\n LPbatch memory batch = lockedLP[holder][position];\n return (batch.holder, batch.amount, batch.timestamp, batch.claimed);\n }\n}\n" - }, - "@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol": { - "content": "pragma solidity >=0.5.0;\n\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\n\n// library with helper methods for oracles that are concerned with computing average prices\nlibrary UniswapV2OracleLibrary {\n using FixedPoint for *;\n\n // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\n function currentBlockTimestamp() internal view returns (uint32) {\n return uint32(block.timestamp % 2 ** 32);\n }\n\n // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\n function currentCumulativePrices(\n address pair\n ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\n blockTimestamp = currentBlockTimestamp();\n price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\n price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\n\n // if time has elapsed since the last update on the pair, mock the accumulated price values\n (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\n if (blockTimestampLast != blockTimestamp) {\n // subtraction overflow is desired\n uint32 timeElapsed = blockTimestamp - blockTimestampLast;\n // addition overflow is desired\n // counterfactual\n price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\n // counterfactual\n price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\n }\n }\n}\n" - }, - "@uniswap/lib/contracts/libraries/FixedPoint.sol": { - "content": "pragma solidity >=0.4.0;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n // range: [0, 2**112 - 1]\n // resolution: 1 / 2**112\n struct uq112x112 {\n uint224 _x;\n }\n\n // range: [0, 2**144 - 1]\n // resolution: 1 / 2**112\n struct uq144x112 {\n uint _x;\n }\n\n uint8 private constant RESOLUTION = 112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 x) internal pure returns (uq112x112 memory) {\n return uq112x112(uint224(x) << RESOLUTION);\n }\n\n // encodes a uint144 as a UQ144x112\n function encode144(uint144 x) internal pure returns (uq144x112 memory) {\n return uq144x112(uint256(x) << RESOLUTION);\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) {\n require(x != 0, 'FixedPoint: DIV_BY_ZERO');\n return uq112x112(self._x / uint224(x));\n }\n\n // multiply a UQ112x112 by a uint, returning a UQ144x112\n // reverts on overflow\n function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) {\n uint z;\n require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), \"FixedPoint: MULTIPLICATION_OVERFLOW\");\n return uq144x112(z);\n }\n\n // returns a UQ112x112 which represents the ratio of the numerator to the denominator\n // equivalent to encode(numerator).div(denominator)\n function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\n require(denominator > 0, \"FixedPoint: DIV_BY_ZERO\");\n return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\n }\n\n // decode a UQ112x112 into a uint112 by truncating after the radix point\n function decode(uq112x112 memory self) internal pure returns (uint112) {\n return uint112(self._x >> RESOLUTION);\n }\n\n // decode a UQ144x112 into a uint144 by truncating after the radix point\n function decode144(uq144x112 memory self) internal pure returns (uint144) {\n return uint144(self._x >> RESOLUTION);\n }\n}\n" - }, - "contracts/PriceOracle.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.4;\nimport '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';\nimport '@uniswap/lib/contracts/libraries/FixedPoint.sol';\nimport '@uniswap/v2-periphery/contracts/libraries/UniswapV2OracleLibrary.sol';\nimport \"./interfaces/IERC20.sol\";\n\n\ncontract PriceOracle {\n using FixedPoint for *;\n IUniswapV2Pair public immutable pair;\n uint public multiplier;\n uint private priceLast;\n uint public priceCumulativeLast;\n uint32 public blockTimestampLast;\n\n address public tokenA;\n address public tokenB;\n address public token0;\n\n constructor(IUniswapV2Pair _pair, address _tokenA, address _tokenB) public {\n pair = _pair;\n tokenA = _tokenA;\n tokenB = _tokenB;\n (token0, ) = _tokenA < _tokenB\n ? (_tokenA, _tokenB)\n : (_tokenB, _tokenA);\n\n if(token0 == _tokenA) {\n priceCumulativeLast = _pair.price0CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token0()).decimals());\n } else {\n priceCumulativeLast = _pair.price1CumulativeLast();\n multiplier = uint(10)**(IERC20(_pair.token1()).decimals());\n }\n }\n function update() public returns(uint) {\n uint112 reserve0;\n uint112 reserve1;\n (reserve0, reserve1, blockTimestampLast) = pair.getReserves();\n require(reserve0 != 0 && reserve1 != 0, 'PriceOracle: NO_RESERVES');\n\n uint _priceCumulative;\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n uint _price;\n if (_blockTimestamp != _blockTimestampLast) {\n _price = FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) /\n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n priceLast = _price;\n priceCumulativeLast = _priceCumulative;\n blockTimestampLast = _blockTimestamp;\n } else {\n _price = priceLast;\n }\n return _price;\n }\n // note this will always return 0 before update has been called successfully for the first time.\n function consult() external view returns (uint) {\n uint _priceCumulative;\n\n (uint _price0Cumulative, uint _price1Cumulative, uint32 _blockTimestamp) =\n UniswapV2OracleLibrary.currentCumulativePrices(address(pair));\n\n if(token0 == tokenA) {\n _priceCumulative = _price0Cumulative;\n } else {\n _priceCumulative = _price1Cumulative;\n }\n uint _priceCumulativeLast = priceCumulativeLast;\n uint _blockTimestampLast = blockTimestampLast;\n // most recent price is already calculated.\n if (_blockTimestamp == _blockTimestampLast) {\n return priceLast;\n }\n return FixedPoint.uq112x112(uint224((_priceCumulative - _priceCumulativeLast) / \n (_blockTimestamp - _blockTimestampLast))).mul(multiplier).decode144();\n }\n function updateAndConsult() external returns (uint) {\n return update();\n }\n}" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file From 73ee6e6f4b68a6abb262b6535449df4182a93271 Mon Sep 17 00:00:00 2001 From: Alvaro Lamadrid Date: Sun, 11 Jul 2021 03:55:29 -0400 Subject: [PATCH 13/13] ignoring the right way... --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2c2d0f3..e36730f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ cache artifacts #hardhat-deploy -deployments \ No newline at end of file +/deployments \ No newline at end of file