Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 99 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve SAFE Mod... | 19909874 | 56 days ago | IN | 0 ETH | 0.00017042 | ||||
Approve SAFE Mod... | 19877927 | 61 days ago | IN | 0 ETH | 0.00036252 | ||||
Approve SAFE Mod... | 19848336 | 65 days ago | IN | 0 ETH | 0.00025539 | ||||
Modify SAFE Coll... | 19058616 | 175 days ago | IN | 0 ETH | 0.0008271 | ||||
Approve SAFE Mod... | 19052169 | 176 days ago | IN | 0 ETH | 0.00053656 | ||||
Approve SAFE Mod... | 18524416 | 250 days ago | IN | 0 ETH | 0.00086981 | ||||
Approve SAFE Mod... | 18524412 | 250 days ago | IN | 0 ETH | 0.00081016 | ||||
Approve SAFE Mod... | 18524411 | 250 days ago | IN | 0 ETH | 0.00082141 | ||||
Approve SAFE Mod... | 16620544 | 518 days ago | IN | 0 ETH | 0.00194052 | ||||
Approve SAFE Mod... | 16620542 | 518 days ago | IN | 0 ETH | 0.00204914 | ||||
Approve SAFE Mod... | 16620541 | 518 days ago | IN | 0 ETH | 0.00216099 | ||||
Approve SAFE Mod... | 16196939 | 577 days ago | IN | 0 ETH | 0.00068179 | ||||
Approve SAFE Mod... | 16196889 | 577 days ago | IN | 0 ETH | 0.00096756 | ||||
Approve SAFE Mod... | 15935822 | 613 days ago | IN | 0 ETH | 0.00328581 | ||||
Approve SAFE Mod... | 15935819 | 613 days ago | IN | 0 ETH | 0.00330095 | ||||
Approve SAFE Mod... | 15935818 | 613 days ago | IN | 0 ETH | 0.00342301 | ||||
Approve SAFE Mod... | 15720738 | 643 days ago | IN | 0 ETH | 0.00146686 | ||||
Approve SAFE Mod... | 15679475 | 649 days ago | IN | 0 ETH | 0.00012732 | ||||
Approve SAFE Mod... | 15586711 | 662 days ago | IN | 0 ETH | 0.00021312 | ||||
Approve SAFE Mod... | 15552959 | 667 days ago | IN | 0 ETH | 0.00023028 | ||||
Approve SAFE Mod... | 15552935 | 667 days ago | IN | 0 ETH | 0.00023377 | ||||
Approve SAFE Mod... | 15552899 | 667 days ago | IN | 0 ETH | 0.00022015 | ||||
Approve SAFE Mod... | 15552865 | 667 days ago | IN | 0 ETH | 0.00022763 | ||||
Approve SAFE Mod... | 15552844 | 667 days ago | IN | 0 ETH | 0.00022635 | ||||
Approve SAFE Mod... | 15538272 | 669 days ago | IN | 0 ETH | 0.00055789 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11848422 | 1248 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
SAFEEngine
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-13 */ /** *Submitted for verification at Etherscan.io on 2021-02-02 */ /// SAFEEngine.sol -- SAFE database // Copyright (C) 2018 Rain <[email protected]> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity 0.6.7; contract SAFEEngine { // --- Auth --- mapping (address => uint256) public authorizedAccounts; /** * @notice Add auth to an account * @param account Account to add auth to */ function addAuthorization(address account) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); authorizedAccounts[account] = 1; emit AddAuthorization(account); } /** * @notice Remove auth from an account * @param account Account to remove auth from */ function removeAuthorization(address account) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); authorizedAccounts[account] = 0; emit RemoveAuthorization(account); } /** * @notice Checks whether msg.sender can call an authed function **/ modifier isAuthorized { require(authorizedAccounts[msg.sender] == 1, "SAFEEngine/account-not-authorized"); _; } // Who can transfer collateral & debt in/out of a SAFE mapping(address => mapping (address => uint256)) public safeRights; /** * @notice Allow an address to modify your SAFE * @param account Account to give SAFE permissions to */ function approveSAFEModification(address account) external { safeRights[msg.sender][account] = 1; emit ApproveSAFEModification(msg.sender, account); } /** * @notice Deny an address the rights to modify your SAFE * @param account Account that is denied SAFE permissions */ function denySAFEModification(address account) external { safeRights[msg.sender][account] = 0; emit DenySAFEModification(msg.sender, account); } /** * @notice Checks whether msg.sender has the right to modify a SAFE **/ function canModifySAFE(address safe, address account) public view returns (bool) { return either(safe == account, safeRights[safe][account] == 1); } // --- Data --- struct CollateralType { // Total debt issued for this specific collateral type uint256 debtAmount; // [wad] // Accumulator for interest accrued on this collateral type uint256 accumulatedRate; // [ray] // Floor price at which a SAFE is allowed to generate debt uint256 safetyPrice; // [ray] // Maximum amount of debt that can be generated with this collateral type uint256 debtCeiling; // [rad] // Minimum amount of debt that must be generated by a SAFE using this collateral uint256 debtFloor; // [rad] // Price at which a SAFE gets liquidated uint256 liquidationPrice; // [ray] } struct SAFE { // Total amount of collateral locked in a SAFE uint256 lockedCollateral; // [wad] // Total amount of debt generated by a SAFE uint256 generatedDebt; // [wad] } // Data about each collateral type mapping (bytes32 => CollateralType) public collateralTypes; // Data about each SAFE mapping (bytes32 => mapping (address => SAFE )) public safes; // Balance of each collateral type mapping (bytes32 => mapping (address => uint256)) public tokenCollateral; // [wad] // Internal balance of system coins mapping (address => uint256) public coinBalance; // [rad] // Amount of debt held by an account. Coins & debt are like matter and antimatter. They nullify each other mapping (address => uint256) public debtBalance; // [rad] // Total amount of debt that a single safe can generate uint256 public safeDebtCeiling; // [wad] // Total amount of debt (coins) currently issued uint256 public globalDebt; // [rad] // 'Bad' debt that's not covered by collateral uint256 public globalUnbackedDebt; // [rad] // Maximum amount of debt that can be issued uint256 public globalDebtCeiling; // [rad] // Access flag, indicates whether this contract is still active uint256 public contractEnabled; // --- Events --- event AddAuthorization(address account); event RemoveAuthorization(address account); event ApproveSAFEModification(address sender, address account); event DenySAFEModification(address sender, address account); event InitializeCollateralType(bytes32 collateralType); event ModifyParameters(bytes32 parameter, uint256 data); event ModifyParameters(bytes32 collateralType, bytes32 parameter, uint256 data); event DisableContract(); event ModifyCollateralBalance(bytes32 indexed collateralType, address indexed account, int256 wad); event TransferCollateral(bytes32 indexed collateralType, address indexed src, address indexed dst, uint256 wad); event TransferInternalCoins(address indexed src, address indexed dst, uint256 rad); event ModifySAFECollateralization( bytes32 indexed collateralType, address indexed safe, address collateralSource, address debtDestination, int256 deltaCollateral, int256 deltaDebt, uint256 lockedCollateral, uint256 generatedDebt, uint256 globalDebt ); event TransferSAFECollateralAndDebt( bytes32 indexed collateralType, address indexed src, address indexed dst, int256 deltaCollateral, int256 deltaDebt, uint256 srcLockedCollateral, uint256 srcGeneratedDebt, uint256 dstLockedCollateral, uint256 dstGeneratedDebt ); event ConfiscateSAFECollateralAndDebt( bytes32 indexed collateralType, address indexed safe, address collateralCounterparty, address debtCounterparty, int256 deltaCollateral, int256 deltaDebt, uint256 globalUnbackedDebt ); event SettleDebt(address indexed account, uint256 rad, uint256 debtBalance, uint256 coinBalance, uint256 globalUnbackedDebt, uint256 globalDebt); event CreateUnbackedDebt( address indexed debtDestination, address indexed coinDestination, uint256 rad, uint256 debtDstBalance, uint256 coinDstBalance, uint256 globalUnbackedDebt, uint256 globalDebt ); event UpdateAccumulatedRate( bytes32 indexed collateralType, address surplusDst, int256 rateMultiplier, uint256 dstCoinBalance, uint256 globalDebt ); // --- Init --- constructor() public { authorizedAccounts[msg.sender] = 1; safeDebtCeiling = uint256(-1); contractEnabled = 1; emit AddAuthorization(msg.sender); emit ModifyParameters("safeDebtCeiling", uint256(-1)); } // --- Math --- function addition(uint256 x, int256 y) internal pure returns (uint256 z) { z = x + uint256(y); require(y >= 0 || z <= x, "SAFEEngine/add-uint-int-overflow"); require(y <= 0 || z >= x, "SAFEEngine/add-uint-int-underflow"); } function addition(int256 x, int256 y) internal pure returns (int256 z) { z = x + y; require(y >= 0 || z <= x, "SAFEEngine/add-int-int-overflow"); require(y <= 0 || z >= x, "SAFEEngine/add-int-int-underflow"); } function subtract(uint256 x, int256 y) internal pure returns (uint256 z) { z = x - uint256(y); require(y <= 0 || z <= x, "SAFEEngine/sub-uint-int-overflow"); require(y >= 0 || z >= x, "SAFEEngine/sub-uint-int-underflow"); } function subtract(int256 x, int256 y) internal pure returns (int256 z) { z = x - y; require(y <= 0 || z <= x, "SAFEEngine/sub-int-int-overflow"); require(y >= 0 || z >= x, "SAFEEngine/sub-int-int-underflow"); } function multiply(uint256 x, int256 y) internal pure returns (int256 z) { z = int256(x) * y; require(int256(x) >= 0, "SAFEEngine/mul-uint-int-null-x"); require(y == 0 || z / y == int256(x), "SAFEEngine/mul-uint-int-overflow"); } function addition(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "SAFEEngine/add-uint-uint-overflow"); } function subtract(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "SAFEEngine/sub-uint-uint-underflow"); } function multiply(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "SAFEEngine/multiply-uint-uint-overflow"); } // --- Administration --- /** * @notice Creates a brand new collateral type * @param collateralType Collateral type name (e.g ETH-A, TBTC-B) */ function initializeCollateralType(bytes32 collateralType) external isAuthorized { require(collateralTypes[collateralType].accumulatedRate == 0, "SAFEEngine/collateral-type-already-exists"); collateralTypes[collateralType].accumulatedRate = 10 ** 27; emit InitializeCollateralType(collateralType); } /** * @notice Modify general uint256 params * @param parameter The name of the parameter modified * @param data New value for the parameter */ function modifyParameters(bytes32 parameter, uint256 data) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); if (parameter == "globalDebtCeiling") globalDebtCeiling = data; else if (parameter == "safeDebtCeiling") safeDebtCeiling = data; else revert("SAFEEngine/modify-unrecognized-param"); emit ModifyParameters(parameter, data); } /** * @notice Modify collateral specific params * @param collateralType Collateral type we modify params for * @param parameter The name of the parameter modified * @param data New value for the parameter */ function modifyParameters( bytes32 collateralType, bytes32 parameter, uint256 data ) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); if (parameter == "safetyPrice") collateralTypes[collateralType].safetyPrice = data; else if (parameter == "liquidationPrice") collateralTypes[collateralType].liquidationPrice = data; else if (parameter == "debtCeiling") collateralTypes[collateralType].debtCeiling = data; else if (parameter == "debtFloor") collateralTypes[collateralType].debtFloor = data; else revert("SAFEEngine/modify-unrecognized-param"); emit ModifyParameters(collateralType, parameter, data); } /** * @notice Disable this contract (normally called by GlobalSettlement) */ function disableContract() external isAuthorized { contractEnabled = 0; emit DisableContract(); } // --- Fungibility --- /** * @notice Join/exit collateral into and and out of the system * @param collateralType Collateral type we join/exit * @param account Account that gets credited/debited * @param wad Amount of collateral */ function modifyCollateralBalance( bytes32 collateralType, address account, int256 wad ) external isAuthorized { tokenCollateral[collateralType][account] = addition(tokenCollateral[collateralType][account], wad); emit ModifyCollateralBalance(collateralType, account, wad); } /** * @notice Transfer collateral between accounts * @param collateralType Collateral type transferred * @param src Collateral source * @param dst Collateral destination * @param wad Amount of collateral transferred */ function transferCollateral( bytes32 collateralType, address src, address dst, uint256 wad ) external { require(canModifySAFE(src, msg.sender), "SAFEEngine/not-allowed"); tokenCollateral[collateralType][src] = subtract(tokenCollateral[collateralType][src], wad); tokenCollateral[collateralType][dst] = addition(tokenCollateral[collateralType][dst], wad); emit TransferCollateral(collateralType, src, dst, wad); } /** * @notice Transfer internal coins (does not affect external balances from Coin.sol) * @param src Coins source * @param dst Coins destination * @param rad Amount of coins transferred */ function transferInternalCoins(address src, address dst, uint256 rad) external { require(canModifySAFE(src, msg.sender), "SAFEEngine/not-allowed"); coinBalance[src] = subtract(coinBalance[src], rad); coinBalance[dst] = addition(coinBalance[dst], rad); emit TransferInternalCoins(src, dst, rad); } function either(bool x, bool y) internal pure returns (bool z) { assembly{ z := or(x, y)} } function both(bool x, bool y) internal pure returns (bool z) { assembly{ z := and(x, y)} } // --- SAFE Manipulation --- /** * @notice Add/remove collateral or put back/generate more debt in a SAFE * @param collateralType Type of collateral to withdraw/deposit in and from the SAFE * @param safe Target SAFE * @param collateralSource Account we take collateral from/put collateral into * @param debtDestination Account from which we credit/debit coins and debt * @param deltaCollateral Amount of collateral added/extract from the SAFE (wad) * @param deltaDebt Amount of debt to generate/repay (wad) */ function modifySAFECollateralization( bytes32 collateralType, address safe, address collateralSource, address debtDestination, int256 deltaCollateral, int256 deltaDebt ) external { // system is live require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); SAFE memory safeData = safes[collateralType][safe]; CollateralType memory collateralTypeData = collateralTypes[collateralType]; // collateral type has been initialised require(collateralTypeData.accumulatedRate != 0, "SAFEEngine/collateral-type-not-initialized"); safeData.lockedCollateral = addition(safeData.lockedCollateral, deltaCollateral); safeData.generatedDebt = addition(safeData.generatedDebt, deltaDebt); collateralTypeData.debtAmount = addition(collateralTypeData.debtAmount, deltaDebt); int256 deltaAdjustedDebt = multiply(collateralTypeData.accumulatedRate, deltaDebt); uint256 totalDebtIssued = multiply(collateralTypeData.accumulatedRate, safeData.generatedDebt); globalDebt = addition(globalDebt, deltaAdjustedDebt); // either debt has decreased, or debt ceilings are not exceeded require( either( deltaDebt <= 0, both(multiply(collateralTypeData.debtAmount, collateralTypeData.accumulatedRate) <= collateralTypeData.debtCeiling, globalDebt <= globalDebtCeiling) ), "SAFEEngine/ceiling-exceeded" ); // safe is either less risky than before, or it is safe require( either( both(deltaDebt <= 0, deltaCollateral >= 0), totalDebtIssued <= multiply(safeData.lockedCollateral, collateralTypeData.safetyPrice) ), "SAFEEngine/not-safe" ); // safe is either more safe, or the owner consents require(either(both(deltaDebt <= 0, deltaCollateral >= 0), canModifySAFE(safe, msg.sender)), "SAFEEngine/not-allowed-to-modify-safe"); // collateral src consents require(either(deltaCollateral <= 0, canModifySAFE(collateralSource, msg.sender)), "SAFEEngine/not-allowed-collateral-src"); // debt dst consents require(either(deltaDebt >= 0, canModifySAFE(debtDestination, msg.sender)), "SAFEEngine/not-allowed-debt-dst"); // safe has no debt, or a non-dusty amount require(either(safeData.generatedDebt == 0, totalDebtIssued >= collateralTypeData.debtFloor), "SAFEEngine/dust"); // safe didn't go above the safe debt limit if (deltaDebt > 0) { require(safeData.generatedDebt <= safeDebtCeiling, "SAFEEngine/above-debt-limit"); } tokenCollateral[collateralType][collateralSource] = subtract(tokenCollateral[collateralType][collateralSource], deltaCollateral); coinBalance[debtDestination] = addition(coinBalance[debtDestination], deltaAdjustedDebt); safes[collateralType][safe] = safeData; collateralTypes[collateralType] = collateralTypeData; emit ModifySAFECollateralization( collateralType, safe, collateralSource, debtDestination, deltaCollateral, deltaDebt, safeData.lockedCollateral, safeData.generatedDebt, globalDebt ); } // --- SAFE Fungibility --- /** * @notice Transfer collateral and/or debt between SAFEs * @param collateralType Collateral type transferred between SAFEs * @param src Source SAFE * @param dst Destination SAFE * @param deltaCollateral Amount of collateral to take/add into src and give/take from dst (wad) * @param deltaDebt Amount of debt to take/add into src and give/take from dst (wad) */ function transferSAFECollateralAndDebt( bytes32 collateralType, address src, address dst, int256 deltaCollateral, int256 deltaDebt ) external { SAFE storage srcSAFE = safes[collateralType][src]; SAFE storage dstSAFE = safes[collateralType][dst]; CollateralType storage collateralType_ = collateralTypes[collateralType]; srcSAFE.lockedCollateral = subtract(srcSAFE.lockedCollateral, deltaCollateral); srcSAFE.generatedDebt = subtract(srcSAFE.generatedDebt, deltaDebt); dstSAFE.lockedCollateral = addition(dstSAFE.lockedCollateral, deltaCollateral); dstSAFE.generatedDebt = addition(dstSAFE.generatedDebt, deltaDebt); uint256 srcTotalDebtIssued = multiply(srcSAFE.generatedDebt, collateralType_.accumulatedRate); uint256 dstTotalDebtIssued = multiply(dstSAFE.generatedDebt, collateralType_.accumulatedRate); // both sides consent require(both(canModifySAFE(src, msg.sender), canModifySAFE(dst, msg.sender)), "SAFEEngine/not-allowed"); // both sides safe require(srcTotalDebtIssued <= multiply(srcSAFE.lockedCollateral, collateralType_.safetyPrice), "SAFEEngine/not-safe-src"); require(dstTotalDebtIssued <= multiply(dstSAFE.lockedCollateral, collateralType_.safetyPrice), "SAFEEngine/not-safe-dst"); // both sides non-dusty require(either(srcTotalDebtIssued >= collateralType_.debtFloor, srcSAFE.generatedDebt == 0), "SAFEEngine/dust-src"); require(either(dstTotalDebtIssued >= collateralType_.debtFloor, dstSAFE.generatedDebt == 0), "SAFEEngine/dust-dst"); emit TransferSAFECollateralAndDebt( collateralType, src, dst, deltaCollateral, deltaDebt, srcSAFE.lockedCollateral, srcSAFE.generatedDebt, dstSAFE.lockedCollateral, dstSAFE.generatedDebt ); } // --- SAFE Confiscation --- /** * @notice Normally used by the LiquidationEngine in order to confiscate collateral and debt from a SAFE and give them to someone else * @param collateralType Collateral type the SAFE has locked inside * @param safe Target SAFE * @param collateralCounterparty Who we take/give collateral to * @param debtCounterparty Who we take/give debt to * @param deltaCollateral Amount of collateral taken/added into the SAFE (wad) * @param deltaDebt Amount of debt taken/added into the SAFE (wad) */ function confiscateSAFECollateralAndDebt( bytes32 collateralType, address safe, address collateralCounterparty, address debtCounterparty, int256 deltaCollateral, int256 deltaDebt ) external isAuthorized { SAFE storage safe_ = safes[collateralType][safe]; CollateralType storage collateralType_ = collateralTypes[collateralType]; safe_.lockedCollateral = addition(safe_.lockedCollateral, deltaCollateral); safe_.generatedDebt = addition(safe_.generatedDebt, deltaDebt); collateralType_.debtAmount = addition(collateralType_.debtAmount, deltaDebt); int256 deltaTotalIssuedDebt = multiply(collateralType_.accumulatedRate, deltaDebt); tokenCollateral[collateralType][collateralCounterparty] = subtract( tokenCollateral[collateralType][collateralCounterparty], deltaCollateral ); debtBalance[debtCounterparty] = subtract( debtBalance[debtCounterparty], deltaTotalIssuedDebt ); globalUnbackedDebt = subtract( globalUnbackedDebt, deltaTotalIssuedDebt ); emit ConfiscateSAFECollateralAndDebt( collateralType, safe, collateralCounterparty, debtCounterparty, deltaCollateral, deltaDebt, globalUnbackedDebt ); } // --- Settlement --- /** * @notice Nullify an amount of coins with an equal amount of debt * @param rad Amount of debt & coins to destroy */ function settleDebt(uint256 rad) external { address account = msg.sender; debtBalance[account] = subtract(debtBalance[account], rad); coinBalance[account] = subtract(coinBalance[account], rad); globalUnbackedDebt = subtract(globalUnbackedDebt, rad); globalDebt = subtract(globalDebt, rad); emit SettleDebt(account, rad, debtBalance[account], coinBalance[account], globalUnbackedDebt, globalDebt); } /** * @notice Usually called by CoinSavingsAccount in order to create unbacked debt * @param debtDestination Usually AccountingEngine that can settle debt with surplus * @param coinDestination Usually CoinSavingsAccount that passes the new coins to depositors * @param rad Amount of debt to create */ function createUnbackedDebt( address debtDestination, address coinDestination, uint256 rad ) external isAuthorized { debtBalance[debtDestination] = addition(debtBalance[debtDestination], rad); coinBalance[coinDestination] = addition(coinBalance[coinDestination], rad); globalUnbackedDebt = addition(globalUnbackedDebt, rad); globalDebt = addition(globalDebt, rad); emit CreateUnbackedDebt( debtDestination, coinDestination, rad, debtBalance[debtDestination], coinBalance[coinDestination], globalUnbackedDebt, globalDebt ); } // --- Rates --- /** * @notice Usually called by TaxCollector in order to accrue interest on a specific collateral type * @param collateralType Collateral type we accrue interest for * @param surplusDst Destination for amount of surplus created by applying the interest rate to debt created by SAFEs with 'collateralType' * @param rateMultiplier Multiplier applied to the debtAmount in order to calculate the surplus [ray] */ function updateAccumulatedRate( bytes32 collateralType, address surplusDst, int256 rateMultiplier ) external isAuthorized { require(contractEnabled == 1, "SAFEEngine/contract-not-enabled"); CollateralType storage collateralType_ = collateralTypes[collateralType]; collateralType_.accumulatedRate = addition(collateralType_.accumulatedRate, rateMultiplier); int256 deltaSurplus = multiply(collateralType_.debtAmount, rateMultiplier); coinBalance[surplusDst] = addition(coinBalance[surplusDst], deltaSurplus); globalDebt = addition(globalDebt, deltaSurplus); emit UpdateAccumulatedRate( collateralType, surplusDst, rateMultiplier, coinBalance[surplusDst], globalDebt ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ApproveSAFEModification","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"safe","type":"address"},{"indexed":false,"internalType":"address","name":"collateralCounterparty","type":"address"},{"indexed":false,"internalType":"address","name":"debtCounterparty","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"}],"name":"ConfiscateSAFECollateralAndDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtDestination","type":"address"},{"indexed":true,"internalType":"address","name":"coinDestination","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debtDstBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinDstBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"CreateUnbackedDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"DenySAFEModification","type":"event"},{"anonymous":false,"inputs":[],"name":"DisableContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"}],"name":"InitializeCollateralType","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"int256","name":"wad","type":"int256"}],"name":"ModifyCollateralBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"safe","type":"address"},{"indexed":false,"internalType":"address","name":"collateralSource","type":"address"},{"indexed":false,"internalType":"address","name":"debtDestination","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"lockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"generatedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"ModifySAFECollateralization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debtBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalUnbackedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"SettleDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"TransferCollateral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"}],"name":"TransferInternalCoins","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"int256","name":"deltaCollateral","type":"int256"},{"indexed":false,"internalType":"int256","name":"deltaDebt","type":"int256"},{"indexed":false,"internalType":"uint256","name":"srcLockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"srcGeneratedDebt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dstLockedCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dstGeneratedDebt","type":"uint256"}],"name":"TransferSAFECollateralAndDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"surplusDst","type":"address"},{"indexed":false,"internalType":"int256","name":"rateMultiplier","type":"int256"},{"indexed":false,"internalType":"uint256","name":"dstCoinBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalDebt","type":"uint256"}],"name":"UpdateAccumulatedRate","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"approveSAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"canModifySAFE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"collateralTypes","outputs":[{"internalType":"uint256","name":"debtAmount","type":"uint256"},{"internalType":"uint256","name":"accumulatedRate","type":"uint256"},{"internalType":"uint256","name":"safetyPrice","type":"uint256"},{"internalType":"uint256","name":"debtCeiling","type":"uint256"},{"internalType":"uint256","name":"debtFloor","type":"uint256"},{"internalType":"uint256","name":"liquidationPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"collateralCounterparty","type":"address"},{"internalType":"address","name":"debtCounterparty","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"confiscateSAFECollateralAndDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractEnabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"debtDestination","type":"address"},{"internalType":"address","name":"coinDestination","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"createUnbackedDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"denySAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalUnbackedDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"}],"name":"initializeCollateralType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"wad","type":"int256"}],"name":"modifyCollateralBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"collateralSource","type":"address"},{"internalType":"address","name":"debtDestination","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"modifySAFECollateralization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"safeRights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"safes","outputs":[{"internalType":"uint256","name":"lockedCollateral","type":"uint256"},{"internalType":"uint256","name":"generatedDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"settleDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"tokenCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"transferInternalCoins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"transferSAFECollateralAndDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"surplusDst","type":"address"},{"internalType":"int256","name":"rateMultiplier","type":"int256"}],"name":"updateAccumulatedRate","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b503360008181526020818152604091829020600190819055600019600755600b55815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a1604080516e73616665446562744365696c696e6760881b8152600019602082015281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a1612602806100bf6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806350de215d11610104578063d07900bb116100a2578063efabcadc11610071578063efabcadc1461063b578063fabde80c14610671578063fd450fb714610697578063fe4f58901461069f576101da565b8063d07900bb14610576578063d49d7867146105c6578063d4b9311d146105ec578063d94d420814610615576101da565b80638543d5e0116100de5780638543d5e0146104f8578063894ba8331461050057806394f3f81d1461050857806399bec3151461052e576101da565b806350de215d1461046d5780635e412858146104af57806376e0b4ca146104cc576101da565b80632efcc8661161017c578063476bb6ef1161014b578063476bb6ef146103755780634a11825e146103b75780634e14a967146103e95780634e5111a614610431576101da565b80632efcc866146102fa57806335b28153146103025780633d4225041461032857806341b3a0d91461036d576101da565b80631b142820116101b85780631b142820146102795780631d2a783d146102af57806324ba5884146102b757806327a0bb33146102dd576101da565b806306eb54df146101df5780630e9e11d31461021f57806311005b0714610253575b600080fd5b61020d600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106c2565b60408051918252519081900360200190f35b6102516004803603606081101561023557600080fd5b508035906001600160a01b0360208201351690604001356106df565b005b61020d6004803603602081101561026957600080fd5b50356001600160a01b031661085e565b6102516004803603606081101561028f57600080fd5b506001600160a01b03813581169160208101359091169060400135610870565b61020d6109d6565b61020d600480360360208110156102cd57600080fd5b50356001600160a01b03166109dc565b610251600480360360208110156102f357600080fd5b50356109ee565b61020d610aec565b6102516004803603602081101561031857600080fd5b50356001600160a01b0316610af2565b6103546004803603604081101561033e57600080fd5b50803590602001356001600160a01b0316610bd7565b6040805192835260208301919091528051918290030190f35b61020d610bfb565b610251600480360360a081101561038b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060608101359060800135610c01565b610251600480360360608110156103cd57600080fd5b508035906001600160a01b036020820135169060400135610f2a565b610251600480360360c08110156103ff57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611009565b6102516004803603608081101561044757600080fd5b508035906001600160a01b036020820135811691604081013590911690606001356111ca565b61049b6004803603604081101561048357600080fd5b506001600160a01b03813581169160200135166112e7565b604080519115158252519081900360200190f35b610251600480360360208110156104c557600080fd5b5035611327565b61020d600480360360408110156104e257600080fd5b50803590602001356001600160a01b031661141c565b61020d611439565b61025161143f565b6102516004803603602081101561051e57600080fd5b50356001600160a01b03166114bd565b610251600480360360c081101561054457600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a001356115a1565b6105936004803603602081101561058c57600080fd5b5035611bd0565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610251600480360360208110156105dc57600080fd5b50356001600160a01b0316611c07565b6102516004803603606081101561060257600080fd5b5080359060208101359060400135611c6b565b6102516004803603602081101561062b57600080fd5b50356001600160a01b0316611e3a565b6102516004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611e9e565b61020d6004803603602081101561068757600080fd5b50356001600160a01b0316611fa0565b61020d611fb2565b610251600480360360408110156106b557600080fd5b5080359060200135611fb8565b600160209081526000928352604080842090915290825290205481565b3360009081526020819052604090205460011461072d5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114610772576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6000838152600260205260409020600181015461078f90836120d0565b600182015580546000906107a3908461217f565b6001600160a01b0385166000908152600560205260409020549091506107c990826120d0565b6001600160a01b0385166000908152600560205260409020556008546107ef90826120d0565b60088190556001600160a01b038516600081815260056020908152604091829020548251938452908301879052828201526060820192909252905186917f5b9f54db46fa62a65324e3e9cad8e6fa0deb965ce36134b30377d7edd3a8136f919081900360800190a25050505050565b60066020526000908152604090205481565b336000908152602081905260409020546001146108be5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b6001600160a01b0383166000908152600660205260409020546108e1908261223e565b6001600160a01b03808516600090815260066020908152604080832094909455918516815260059091522054610917908261223e565b6001600160a01b03831660009081526005602052604090205560095461093d908261223e565b60095560085461094d908261223e565b60088190556001600160a01b0384811660008181526006602090815260408083205494881680845260058352928190205460095482518981529384019690965282820152606082019490945260808101949094529151919290917fede723541c3aae745504c3732f6a7161031353ddf05caba15d48b1edd35646b99181900360a00190a3505050565b60095481565b60006020819052908152604090205481565b33600081815260066020526040902054610a089083612280565b6001600160a01b038216600090815260066020908152604080832093909355600590522054610a379083612280565b6001600160a01b038216600090815260056020526040902055600954610a5d9083612280565b600955600854610a6d9083612280565b60088190556001600160a01b03821660008181526006602090815260408083205460058352928190205460095482518981529384019490945282820152606082019290925260808101939093525190917f11000f3497809a546a9de313df16f9ce615e1c65098ba758180e1cac823ed415919081900360a00190a25050565b600a5481565b33600090815260208190526040902054600114610b405760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114610b85576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60036020908152600092835260408084209091529082529020805460019091015482565b600b5481565b60008581526003602090815260408083206001600160a01b0388811685529083528184209087168452818420898552600290935292208254610c4390866122c2565b83556001830154610c5490856122c2565b60018401558154610c6590866120d0565b82556001820154610c7690856120d0565b82600101819055506000610c9284600101548360010154612371565b90506000610ca884600101548460010154612371565b9050610cc6610cb78a336112e7565b610cc18a336112e7565b6123c7565b610d10576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b610d2285600001548460020154612371565b821115610d76576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d737263000000000000000000604482015290519081900360640190fd5b610d8884600001548460020154612371565b811115610ddc576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d647374000000000000000000604482015290519081900360640190fd5b610df4836004015483101586600101546000146123cb565b610e3b576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f647573742d73726360681b604482015290519081900360640190fd5b610e53836004015482101585600101546000146123cb565b610e9a576040805162461bcd60e51b815260206004820152601360248201527214d05191515b99da5b994bd91d5cdd0b591cdd606a1b604482015290519081900360640190fd5b876001600160a01b0316896001600160a01b03168b7f4b49cc19514005253f36d0517c21b92404f50cc0d9e0c070af00b96e296b08358a8a8a600001548b600101548b600001548c6001015460405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a450505050505050505050565b33600090815260208190526040902054600114610f785760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b60008381526004602090815260408083206001600160a01b0386168452909152902054610fa590826120d0565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518481529251919286927f488ac1e40bb6e5ee1f88b998568d1de4cb595e9ce0e0d4e4d4cc4c202053f107929181900390910190a3505050565b336000908152602081905260409020546001146110575760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b60008681526003602090815260408083206001600160a01b038916845282528083208984526002909252909120815461109090856120d0565b825560018201546110a190846120d0565b600183015580546110b290846120d0565b815560018101546000906110c6908561217f565b60008a81526004602090815260408083206001600160a01b038c1684529091529020549091506110f690866122c2565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461113390826122c2565b6001600160a01b03871660009081526006602052604090205560095461115990826122c2565b6009819055604080516001600160a01b038a8116825289811660208301528183018990526060820188905260808201939093529051918a16918b917f9bef7b734be54aaed05e906c2ccf923767f44a93d136b674e212ce858a6d031c919081900360a00190a3505050505050505050565b6111d483336112e7565b61121e576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b038716845290915290205461124b9082612280565b60008581526004602090815260408083206001600160a01b038881168552925280832093909355841681522054611282908261223e565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805185815290519287169288927fb08760a077e71005cf3651212fdbd4028d6ebc8e1844c0475f36000f2756c0d7928290030190a450505050565b6001600160a01b03828116600081815260016020818152604080842095871680855295909152822054919361131e931491146123cb565b90505b92915050565b336000908152602081905260409020546001146113755760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600081815260026020526040902060010154156113c35760405162461bcd60e51b81526004018080602001828103825260298152602001806124cf6029913960400191505060405180910390fd5b6000818152600260209081526040918290206b033b2e3c9fd0803ce8000000600190910155815183815291517f715b265758bcd4ecd311bede8dcca05c4b5819e0a2a5c4103abd702862ae2c359281900390910190a150565b600460209081526000928352604080842090915290825290205481565b60085481565b3360009081526020819052604090205460011461148d5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b6000600b8190556040517f2d4b4ecff7bd7503135271925520a2f6c0d98c9473ffc1a1e72c92502f51b25e9190a1565b3360009081526020819052604090205460011461150b5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114611550576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b546001146115e6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6115ee6123cf565b5060008681526003602090815260408083206001600160a01b0389168452825291829020825180840190935280548352600101549082015261162e6123e9565b50600087815260026020818152604092839020835160c0810185528154815260018201549281018390529281015493830193909352600383015460608301526004830154608083015260059092015460a0820152906116be5760405162461bcd60e51b815260040180806020018281038252602a8152602001806124f8602a913960400191505060405180910390fd5b81516116ca90856120d0565b825260208201516116db90846120d0565b602083015280516116ec90846120d0565b81526020810151600090611700908561217f565b9050600061171683602001518560200151612371565b9050611724600854836120d0565b600881905550611760600086131561175b856060015161174c87600001518860200151612371565b1115600a5460085411156123c7565b6123cb565b6117b1576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f6365696c696e672d65786365656465640000000000604482015290519081900360640190fd5b6117e06117c6600087131560008912156123c7565b6117d886600001518660400151612371565b8311156123cb565b611827576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f6e6f742d7361666560681b604482015290519081900360640190fd5b61184661183c600087131560008912156123c7565b61175b8b336112e7565b6118815760405162461bcd60e51b81526004018080602001828103825260258152602001806124206025913960400191505060405180910390fd5b611893600087131561175b8a336112e7565b6118ce5760405162461bcd60e51b81526004018080602001828103825260258152602001806124aa6025913960400191505060405180910390fd5b6118e0600086121561175b89336112e7565b611931576040805162461bcd60e51b815260206004820152601f60248201527f53414645456e67696e652f6e6f742d616c6c6f7765642d646562742d64737400604482015290519081900360640190fd5b611949846020015160001484608001518310156123cb565b61198c576040805162461bcd60e51b815260206004820152600f60248201526e14d05191515b99da5b994bd91d5cdd608a1b604482015290519081900360640190fd5b60008513156119f057600754846020015111156119f0576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f61626f76652d646562742d6c696d69740000000000604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c168452909152902054611a1d90876122c2565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a168252600590522054611a5a90836120d0565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050155905050886001600160a01b03168a7f182725621f9c0d485fb256f86699c82616bd6e4670325087fd08f643cab7d9178a8a8a8a8a600001518b6020015160085460405180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b0316815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a350505050505050505050565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b3360008181526001602090815260408083206001600160a01b0386168085529083528184209390935580519384529083019190915280517fb1b0368dbc2a1d366ba32be3f455812a3db862c3f52fd3434020a262442b1bb09281900390910190a150565b33600090815260208190526040902054600114611cb95760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114611cfe576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b816a736166657479507269636560a81b1415611d2e57600083815260026020819052604090912001819055611df5565b816f6c69717569646174696f6e507269636560801b1415611d62576000838152600260205260409020600501819055611df5565b816a646562744365696c696e6760a81b1415611d91576000838152600260205260409020600301819055611df5565b81683232b13a233637b7b960b91b1415611dbe576000838152600260205260409020600401819055611df5565b60405162461bcd60e51b81526004018080602001828103825260248152602001806124656024913960400191505060405180910390fd5b604080518481526020810184905280820183905290517fc59b1109b54f213212d2f5af5c1dae5e887f9daa63b595578fae847cb048e8f49181900360600190a1505050565b3360008181526001602081815260408084206001600160a01b0387168086529083529381902092909255815193845283019190915280517ff7db8b086d1ab5e5802059364bff5428c7622c6d4623f9780947306d492770539281900390910190a150565b611ea883336112e7565b611ef2576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611f159082612280565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611f44908261223e565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927f4cd53b0b754082a31f5a6f3dc965c36d1d901c309830e0b4c17949aff97f0b1492918290030190a3505050565b60056020526000908152604090205481565b60075481565b336000908152602081905260409020546001146120065760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b5460011461204b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b8170676c6f62616c446562744365696c696e6760781b141561207157600a819055612091565b816e73616665446562744365696c696e6760881b1415611dbe5760078190555b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b8181016000821215806120e35750828111155b612134576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f6164642d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b6000821315806121445750828110155b6113215760405162461bcd60e51b81526004018080602001828103825260218152602001806125446021913960400191505060405180910390fd5b81810260008312156121d8576040805162461bcd60e51b815260206004820152601e60248201527f53414645456e67696e652f6d756c2d75696e742d696e742d6e756c6c2d780000604482015290519081900360640190fd5b8115806121ed5750828282816121ea57fe5b05145b611321576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f6d756c2d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b808201828110156113215760405162461bcd60e51b81526004018080602001828103825260218152602001806125866021913960400191505060405180910390fd5b808203828111156113215760405162461bcd60e51b81526004018080602001828103825260228152602001806125226022913960400191505060405180910390fd5b8082036000821315806122d55750828111155b612326576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f7375622d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b6000821215806123365750828110155b6113215760405162461bcd60e51b81526004018080602001828103825260218152602001806124896021913960400191505060405180910390fd5b600081158061238c5750508082028282828161238957fe5b04145b6113215760405162461bcd60e51b81526004018080602001828103825260268152602001806125a76026913960400191505060405180910390fd5b1690565b1790565b604051806040016040528060008152602001600081525090565b6040518060c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe53414645456e67696e652f6e6f742d616c6c6f7765642d746f2d6d6f646966792d7361666553414645456e67696e652f636f6e74726163742d6e6f742d656e61626c65640053414645456e67696e652f6d6f646966792d756e7265636f676e697a65642d706172616d53414645456e67696e652f7375622d75696e742d696e742d756e646572666c6f7753414645456e67696e652f6e6f742d616c6c6f7765642d636f6c6c61746572616c2d73726353414645456e67696e652f636f6c6c61746572616c2d747970652d616c72656164792d65786973747353414645456e67696e652f636f6c6c61746572616c2d747970652d6e6f742d696e697469616c697a656453414645456e67696e652f7375622d75696e742d75696e742d756e646572666c6f7753414645456e67696e652f6164642d75696e742d696e742d756e646572666c6f7753414645456e67696e652f6163636f756e742d6e6f742d617574686f72697a656453414645456e67696e652f6164642d75696e742d75696e742d6f766572666c6f7753414645456e67696e652f6d756c7469706c792d75696e742d75696e742d6f766572666c6f77a2646970667358221220b984909f35a410f65749fd6fea7c79754913d1b3d33734d672f025667996763264736f6c63430006070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806350de215d11610104578063d07900bb116100a2578063efabcadc11610071578063efabcadc1461063b578063fabde80c14610671578063fd450fb714610697578063fe4f58901461069f576101da565b8063d07900bb14610576578063d49d7867146105c6578063d4b9311d146105ec578063d94d420814610615576101da565b80638543d5e0116100de5780638543d5e0146104f8578063894ba8331461050057806394f3f81d1461050857806399bec3151461052e576101da565b806350de215d1461046d5780635e412858146104af57806376e0b4ca146104cc576101da565b80632efcc8661161017c578063476bb6ef1161014b578063476bb6ef146103755780634a11825e146103b75780634e14a967146103e95780634e5111a614610431576101da565b80632efcc866146102fa57806335b28153146103025780633d4225041461032857806341b3a0d91461036d576101da565b80631b142820116101b85780631b142820146102795780631d2a783d146102af57806324ba5884146102b757806327a0bb33146102dd576101da565b806306eb54df146101df5780630e9e11d31461021f57806311005b0714610253575b600080fd5b61020d600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106c2565b60408051918252519081900360200190f35b6102516004803603606081101561023557600080fd5b508035906001600160a01b0360208201351690604001356106df565b005b61020d6004803603602081101561026957600080fd5b50356001600160a01b031661085e565b6102516004803603606081101561028f57600080fd5b506001600160a01b03813581169160208101359091169060400135610870565b61020d6109d6565b61020d600480360360208110156102cd57600080fd5b50356001600160a01b03166109dc565b610251600480360360208110156102f357600080fd5b50356109ee565b61020d610aec565b6102516004803603602081101561031857600080fd5b50356001600160a01b0316610af2565b6103546004803603604081101561033e57600080fd5b50803590602001356001600160a01b0316610bd7565b6040805192835260208301919091528051918290030190f35b61020d610bfb565b610251600480360360a081101561038b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060608101359060800135610c01565b610251600480360360608110156103cd57600080fd5b508035906001600160a01b036020820135169060400135610f2a565b610251600480360360c08110156103ff57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611009565b6102516004803603608081101561044757600080fd5b508035906001600160a01b036020820135811691604081013590911690606001356111ca565b61049b6004803603604081101561048357600080fd5b506001600160a01b03813581169160200135166112e7565b604080519115158252519081900360200190f35b610251600480360360208110156104c557600080fd5b5035611327565b61020d600480360360408110156104e257600080fd5b50803590602001356001600160a01b031661141c565b61020d611439565b61025161143f565b6102516004803603602081101561051e57600080fd5b50356001600160a01b03166114bd565b610251600480360360c081101561054457600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a001356115a1565b6105936004803603602081101561058c57600080fd5b5035611bd0565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610251600480360360208110156105dc57600080fd5b50356001600160a01b0316611c07565b6102516004803603606081101561060257600080fd5b5080359060208101359060400135611c6b565b6102516004803603602081101561062b57600080fd5b50356001600160a01b0316611e3a565b6102516004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611e9e565b61020d6004803603602081101561068757600080fd5b50356001600160a01b0316611fa0565b61020d611fb2565b610251600480360360408110156106b557600080fd5b5080359060200135611fb8565b600160209081526000928352604080842090915290825290205481565b3360009081526020819052604090205460011461072d5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114610772576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6000838152600260205260409020600181015461078f90836120d0565b600182015580546000906107a3908461217f565b6001600160a01b0385166000908152600560205260409020549091506107c990826120d0565b6001600160a01b0385166000908152600560205260409020556008546107ef90826120d0565b60088190556001600160a01b038516600081815260056020908152604091829020548251938452908301879052828201526060820192909252905186917f5b9f54db46fa62a65324e3e9cad8e6fa0deb965ce36134b30377d7edd3a8136f919081900360800190a25050505050565b60066020526000908152604090205481565b336000908152602081905260409020546001146108be5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b6001600160a01b0383166000908152600660205260409020546108e1908261223e565b6001600160a01b03808516600090815260066020908152604080832094909455918516815260059091522054610917908261223e565b6001600160a01b03831660009081526005602052604090205560095461093d908261223e565b60095560085461094d908261223e565b60088190556001600160a01b0384811660008181526006602090815260408083205494881680845260058352928190205460095482518981529384019690965282820152606082019490945260808101949094529151919290917fede723541c3aae745504c3732f6a7161031353ddf05caba15d48b1edd35646b99181900360a00190a3505050565b60095481565b60006020819052908152604090205481565b33600081815260066020526040902054610a089083612280565b6001600160a01b038216600090815260066020908152604080832093909355600590522054610a379083612280565b6001600160a01b038216600090815260056020526040902055600954610a5d9083612280565b600955600854610a6d9083612280565b60088190556001600160a01b03821660008181526006602090815260408083205460058352928190205460095482518981529384019490945282820152606082019290925260808101939093525190917f11000f3497809a546a9de313df16f9ce615e1c65098ba758180e1cac823ed415919081900360a00190a25050565b600a5481565b33600090815260208190526040902054600114610b405760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114610b85576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60036020908152600092835260408084209091529082529020805460019091015482565b600b5481565b60008581526003602090815260408083206001600160a01b0388811685529083528184209087168452818420898552600290935292208254610c4390866122c2565b83556001830154610c5490856122c2565b60018401558154610c6590866120d0565b82556001820154610c7690856120d0565b82600101819055506000610c9284600101548360010154612371565b90506000610ca884600101548460010154612371565b9050610cc6610cb78a336112e7565b610cc18a336112e7565b6123c7565b610d10576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b610d2285600001548460020154612371565b821115610d76576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d737263000000000000000000604482015290519081900360640190fd5b610d8884600001548460020154612371565b811115610ddc576040805162461bcd60e51b815260206004820152601760248201527f53414645456e67696e652f6e6f742d736166652d647374000000000000000000604482015290519081900360640190fd5b610df4836004015483101586600101546000146123cb565b610e3b576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f647573742d73726360681b604482015290519081900360640190fd5b610e53836004015482101585600101546000146123cb565b610e9a576040805162461bcd60e51b815260206004820152601360248201527214d05191515b99da5b994bd91d5cdd0b591cdd606a1b604482015290519081900360640190fd5b876001600160a01b0316896001600160a01b03168b7f4b49cc19514005253f36d0517c21b92404f50cc0d9e0c070af00b96e296b08358a8a8a600001548b600101548b600001548c6001015460405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a450505050505050505050565b33600090815260208190526040902054600114610f785760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b60008381526004602090815260408083206001600160a01b0386168452909152902054610fa590826120d0565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518481529251919286927f488ac1e40bb6e5ee1f88b998568d1de4cb595e9ce0e0d4e4d4cc4c202053f107929181900390910190a3505050565b336000908152602081905260409020546001146110575760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b60008681526003602090815260408083206001600160a01b038916845282528083208984526002909252909120815461109090856120d0565b825560018201546110a190846120d0565b600183015580546110b290846120d0565b815560018101546000906110c6908561217f565b60008a81526004602090815260408083206001600160a01b038c1684529091529020549091506110f690866122c2565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461113390826122c2565b6001600160a01b03871660009081526006602052604090205560095461115990826122c2565b6009819055604080516001600160a01b038a8116825289811660208301528183018990526060820188905260808201939093529051918a16918b917f9bef7b734be54aaed05e906c2ccf923767f44a93d136b674e212ce858a6d031c919081900360a00190a3505050505050505050565b6111d483336112e7565b61121e576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b038716845290915290205461124b9082612280565b60008581526004602090815260408083206001600160a01b038881168552925280832093909355841681522054611282908261223e565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805185815290519287169288927fb08760a077e71005cf3651212fdbd4028d6ebc8e1844c0475f36000f2756c0d7928290030190a450505050565b6001600160a01b03828116600081815260016020818152604080842095871680855295909152822054919361131e931491146123cb565b90505b92915050565b336000908152602081905260409020546001146113755760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600081815260026020526040902060010154156113c35760405162461bcd60e51b81526004018080602001828103825260298152602001806124cf6029913960400191505060405180910390fd5b6000818152600260209081526040918290206b033b2e3c9fd0803ce8000000600190910155815183815291517f715b265758bcd4ecd311bede8dcca05c4b5819e0a2a5c4103abd702862ae2c359281900390910190a150565b600460209081526000928352604080842090915290825290205481565b60085481565b3360009081526020819052604090205460011461148d5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b6000600b8190556040517f2d4b4ecff7bd7503135271925520a2f6c0d98c9473ffc1a1e72c92502f51b25e9190a1565b3360009081526020819052604090205460011461150b5760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114611550576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b546001146115e6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b6115ee6123cf565b5060008681526003602090815260408083206001600160a01b0389168452825291829020825180840190935280548352600101549082015261162e6123e9565b50600087815260026020818152604092839020835160c0810185528154815260018201549281018390529281015493830193909352600383015460608301526004830154608083015260059092015460a0820152906116be5760405162461bcd60e51b815260040180806020018281038252602a8152602001806124f8602a913960400191505060405180910390fd5b81516116ca90856120d0565b825260208201516116db90846120d0565b602083015280516116ec90846120d0565b81526020810151600090611700908561217f565b9050600061171683602001518560200151612371565b9050611724600854836120d0565b600881905550611760600086131561175b856060015161174c87600001518860200151612371565b1115600a5460085411156123c7565b6123cb565b6117b1576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f6365696c696e672d65786365656465640000000000604482015290519081900360640190fd5b6117e06117c6600087131560008912156123c7565b6117d886600001518660400151612371565b8311156123cb565b611827576040805162461bcd60e51b815260206004820152601360248201527253414645456e67696e652f6e6f742d7361666560681b604482015290519081900360640190fd5b61184661183c600087131560008912156123c7565b61175b8b336112e7565b6118815760405162461bcd60e51b81526004018080602001828103825260258152602001806124206025913960400191505060405180910390fd5b611893600087131561175b8a336112e7565b6118ce5760405162461bcd60e51b81526004018080602001828103825260258152602001806124aa6025913960400191505060405180910390fd5b6118e0600086121561175b89336112e7565b611931576040805162461bcd60e51b815260206004820152601f60248201527f53414645456e67696e652f6e6f742d616c6c6f7765642d646562742d64737400604482015290519081900360640190fd5b611949846020015160001484608001518310156123cb565b61198c576040805162461bcd60e51b815260206004820152600f60248201526e14d05191515b99da5b994bd91d5cdd608a1b604482015290519081900360640190fd5b60008513156119f057600754846020015111156119f0576040805162461bcd60e51b815260206004820152601b60248201527f53414645456e67696e652f61626f76652d646562742d6c696d69740000000000604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c168452909152902054611a1d90876122c2565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a168252600590522054611a5a90836120d0565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050155905050886001600160a01b03168a7f182725621f9c0d485fb256f86699c82616bd6e4670325087fd08f643cab7d9178a8a8a8a8a600001518b6020015160085460405180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b0316815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a350505050505050505050565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b3360008181526001602090815260408083206001600160a01b0386168085529083528184209390935580519384529083019190915280517fb1b0368dbc2a1d366ba32be3f455812a3db862c3f52fd3434020a262442b1bb09281900390910190a150565b33600090815260208190526040902054600114611cb95760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b54600114611cfe576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b816a736166657479507269636560a81b1415611d2e57600083815260026020819052604090912001819055611df5565b816f6c69717569646174696f6e507269636560801b1415611d62576000838152600260205260409020600501819055611df5565b816a646562744365696c696e6760a81b1415611d91576000838152600260205260409020600301819055611df5565b81683232b13a233637b7b960b91b1415611dbe576000838152600260205260409020600401819055611df5565b60405162461bcd60e51b81526004018080602001828103825260248152602001806124656024913960400191505060405180910390fd5b604080518481526020810184905280820183905290517fc59b1109b54f213212d2f5af5c1dae5e887f9daa63b595578fae847cb048e8f49181900360600190a1505050565b3360008181526001602081815260408084206001600160a01b0387168086529083529381902092909255815193845283019190915280517ff7db8b086d1ab5e5802059364bff5428c7622c6d4623f9780947306d492770539281900390910190a150565b611ea883336112e7565b611ef2576040805162461bcd60e51b815260206004820152601660248201527514d05191515b99da5b994bdb9bdd0b585b1b1bddd95960521b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611f159082612280565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611f44908261223e565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927f4cd53b0b754082a31f5a6f3dc965c36d1d901c309830e0b4c17949aff97f0b1492918290030190a3505050565b60056020526000908152604090205481565b60075481565b336000908152602081905260409020546001146120065760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b600b5460011461204b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612445833981519152604482015290519081900360640190fd5b8170676c6f62616c446562744365696c696e6760781b141561207157600a819055612091565b816e73616665446562744365696c696e6760881b1415611dbe5760078190555b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b8181016000821215806120e35750828111155b612134576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f6164642d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b6000821315806121445750828110155b6113215760405162461bcd60e51b81526004018080602001828103825260218152602001806125446021913960400191505060405180910390fd5b81810260008312156121d8576040805162461bcd60e51b815260206004820152601e60248201527f53414645456e67696e652f6d756c2d75696e742d696e742d6e756c6c2d780000604482015290519081900360640190fd5b8115806121ed5750828282816121ea57fe5b05145b611321576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f6d756c2d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b808201828110156113215760405162461bcd60e51b81526004018080602001828103825260218152602001806125866021913960400191505060405180910390fd5b808203828111156113215760405162461bcd60e51b81526004018080602001828103825260228152602001806125226022913960400191505060405180910390fd5b8082036000821315806122d55750828111155b612326576040805162461bcd60e51b815260206004820181905260248201527f53414645456e67696e652f7375622d75696e742d696e742d6f766572666c6f77604482015290519081900360640190fd5b6000821215806123365750828110155b6113215760405162461bcd60e51b81526004018080602001828103825260218152602001806124896021913960400191505060405180910390fd5b600081158061238c5750508082028282828161238957fe5b04145b6113215760405162461bcd60e51b81526004018080602001828103825260268152602001806125a76026913960400191505060405180910390fd5b1690565b1790565b604051806040016040528060008152602001600081525090565b6040518060c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe53414645456e67696e652f6e6f742d616c6c6f7765642d746f2d6d6f646966792d7361666553414645456e67696e652f636f6e74726163742d6e6f742d656e61626c65640053414645456e67696e652f6d6f646966792d756e7265636f676e697a65642d706172616d53414645456e67696e652f7375622d75696e742d696e742d756e646572666c6f7753414645456e67696e652f6e6f742d616c6c6f7765642d636f6c6c61746572616c2d73726353414645456e67696e652f636f6c6c61746572616c2d747970652d616c72656164792d65786973747353414645456e67696e652f636f6c6c61746572616c2d747970652d6e6f742d696e697469616c697a656453414645456e67696e652f7375622d75696e742d75696e742d756e646572666c6f7753414645456e67696e652f6164642d75696e742d696e742d756e646572666c6f7753414645456e67696e652f6163636f756e742d6e6f742d617574686f72697a656453414645456e67696e652f6164642d75696e742d75696e742d6f766572666c6f7753414645456e67696e652f6d756c7469706c792d75696e742d75696e742d6f766572666c6f77a2646970667358221220b984909f35a410f65749fd6fea7c79754913d1b3d33734d672f025667996763264736f6c63430006070033
Deployed Bytecode Sourcemap
873:24956:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;873:24956:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1967:66:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;1967:66:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24914:912;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24914:912:0;;;-1:-1:-1;;;;;24914:912:0;;;;;;;;;;:::i;:::-;;4496:69;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4496:69:0;-1:-1:-1;;;;;4496:69:0;;:::i;23694:738::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;23694:738:0;;;;;;;;;;;;;;;;;:::i;4857:34::-;;;:::i;921:54::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;921:54:0;-1:-1:-1;;;;;921:54:0;;:::i;22873:479::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22873:479:0;;:::i;4958:33::-;;;:::i;1085:231::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1085:231:0;-1:-1:-1;;;;;1085:231:0;;:::i;4053:63::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4053:63:0;;;;;;-1:-1:-1;;;;;4053:63:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5078:31;;;:::i;18637:2008::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18637:2008:0;;;-1:-1:-1;;;;;18637:2008:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;12237:328::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12237:328:0;;;-1:-1:-1;;;;;12237:328:0;;;;;;;;;;:::i;21240:1455::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21240:1455:0;;;-1:-1:-1;;;;;21240:1455:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12831:494::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;12831:494:0;;;-1:-1:-1;;;;;12831:494:0;;;;;;;;;;;;;;;;;;;:::i;2756:162::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;2756:162:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9817:330;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9817:330:0;;:::i;4163:73::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4163:73:0;;;;;;-1:-1:-1;;;;;4163:73:0;;:::i;4754:26::-;;;:::i;11838:120::-;;;:::i;1435:237::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1435:237:0;-1:-1:-1;;;;;1435:237:0;;:::i;14691:3494::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;14691:3494:0;;;-1:-1:-1;;;;;14691:3494:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3944:73::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3944:73:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2493:167;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2493:167:0;-1:-1:-1;;;;;2493:167:0;;:::i;10996:742::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10996:742:0;;;;;;;;;;;;:::i;2170:173::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2170:173:0;-1:-1:-1;;;;;2170:173:0;;:::i;13555:337::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13555:337:0;;;;;;;;;;;;;;;;;:::i;4294:69::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4294:69:0;-1:-1:-1;;;;;4294:69:0;;:::i;4649:30::-;;;:::i;10325:422::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10325:422:0;;;;;;;:::i;1967:66::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24914:912::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25087:15:::1;;25106:1;25087:20;25079:64;;;::::0;;-1:-1:-1;;;25079:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25079:64:0;;;;;;;;;;;;;::::1;;25154:38;25195:31:::0;;;:15:::1;:31;::::0;;;;25287::::1;::::0;::::1;::::0;25278:57:::1;::::0;25320:14;25278:8:::1;:57::i;:::-;25237:31;::::0;::::1;:98:::0;25396:26;;25346:19:::1;::::0;25387:52:::1;::::0;25424:14;25387:8:::1;:52::i;:::-;-1:-1:-1::0;;;;;25500:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;25346:93;;-1:-1:-1;25491:47:0::1;::::0;25346:93;25491:8:::1;:47::i;:::-;-1:-1:-1::0;;;;;25450:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:88;25599:10:::1;::::0;25590:34:::1;::::0;25611:12;25590:8:::1;:34::i;:::-;25549:10;:75:::0;;;-1:-1:-1;;;;;25759:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;;;25640:178;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;25676:14;;25640:178:::1;::::0;;;;;;;;::::1;1890:1;;24914:912:::0;;;:::o;4496:69::-;;;;;;;;;;;;;:::o;23694:738::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23893:28:0;::::1;;::::0;;;:11:::1;:28;::::0;;;;;23884:43:::1;::::0;23923:3;23884:8:::1;:43::i;:::-;-1:-1:-1::0;;;;;23852:28:0;;::::1;;::::0;;;:11:::1;:28;::::0;;;;;;;:75;;;;23979:28;;::::1;::::0;;:11:::1;:28:::0;;;;;23970:43:::1;::::0;24009:3;23970:8:::1;:43::i;:::-;-1:-1:-1::0;;;;;23938:28:0;::::1;;::::0;;;:11:::1;:28;::::0;;;;:75;24065:18:::1;::::0;24056:33:::1;::::0;24085:3;24056:8:::1;:33::i;:::-;24024:18;:65:::0;24141:10:::1;::::0;24132:25:::1;::::0;24153:3;24132:8:::1;:25::i;:::-;24100:10;:57:::0;;;-1:-1:-1;;;;;24173:251:0;;::::1;24284:28;::::0;;;:11:::1;:28;::::0;;;;;;;;24173:251;;::::1;24327:28:::0;;;:11:::1;:28:::0;;;;;;;24370:18:::1;::::0;24173:251;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;23694:738:::0;;;:::o;4857:34::-;;;;:::o;921:54::-;;;;;;;;;;;;;;:::o;22873:479::-;22950:10;22926:15;23004:20;;;:11;:20;;;;;;22995:35;;23026:3;22995:8;:35::i;:::-;-1:-1:-1;;;;;22971:20:0;;;;;;:11;:20;;;;;;;;:59;;;;23074:11;:20;;;;23065:35;;23096:3;23065:8;:35::i;:::-;-1:-1:-1;;;;;23041:20:0;;;;;;:11;:20;;;;;:59;23144:18;;23135:33;;23164:3;23135:8;:33::i;:::-;23111:18;:57;23212:10;;23203:25;;23224:3;23203:8;:25::i;:::-;23179:10;:49;;;-1:-1:-1;;;;;23244:100:0;;23269:20;;;;:11;:20;;;;;;;;;23291:11;:20;;;;;;;23313:18;;23244:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22873:479;;:::o;4958:33::-;;;;:::o;1085:231::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1169:15:::1;;1188:1;1169:20;1161:64;;;::::0;;-1:-1:-1;;;1161:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;1161:64:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;1236:27:0;::::1;:18;:27:::0;;;::::1;::::0;;;;;;;;1266:1:::1;1236:31:::0;;1283:25;;;;;;;::::1;::::0;;;;;;;;::::1;1085:231:::0;:::o;4053:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5078:31::-;;;;:::o;18637:2008::-;18840:20;18863:21;;;:5;:21;;;;;;;;-1:-1:-1;;;;;18863:26:0;;;;;;;;;;;18923;;;;;;;;19001:31;;;:15;:31;;;;;19081:24;;19072:51;;19107:15;19072:8;:51::i;:::-;19045:78;;19170:21;;;;19161:42;;19193:9;19161:8;:42::i;:::-;19134:21;;;:69;19250:24;;19241:51;;19276:15;19241:8;:51::i;:::-;19214:78;;19339:21;;;;19330:42;;19362:9;19330:8;:42::i;:::-;19303:7;:21;;:69;;;;19385:26;19414:64;19423:7;:21;;;19446:15;:31;;;19414:8;:64::i;:::-;19385:93;;19489:26;19518:64;19527:7;:21;;;19550:15;:31;;;19518:8;:64::i;:::-;19489:93;;19634:68;19639:30;19653:3;19658:10;19639:13;:30::i;:::-;19671;19685:3;19690:10;19671:13;:30::i;:::-;19634:4;:68::i;:::-;19626:103;;;;;-1:-1:-1;;;19626:103:0;;;;;;;;;;;;-1:-1:-1;;;19626:103:0;;;;;;;;;;;;;;;19800:63;19809:7;:24;;;19835:15;:27;;;19800:8;:63::i;:::-;19778:18;:85;;19770:121;;;;;-1:-1:-1;;;19770:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19932:63;19941:7;:24;;;19967:15;:27;;;19932:8;:63::i;:::-;19910:18;:85;;19902:121;;;;;-1:-1:-1;;;19902:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20077:83;20106:15;:25;;;20084:18;:47;;20133:7;:21;;;20158:1;20133:26;20077:6;:83::i;:::-;20069:115;;;;;-1:-1:-1;;;20069:115:0;;;;;;;;;;;;-1:-1:-1;;;20069:115:0;;;;;;;;;;;;;;;20203:83;20232:15;:25;;;20210:18;:47;;20259:7;:21;;;20284:1;20259:26;20203:6;:83::i;:::-;20195:115;;;;;-1:-1:-1;;;20195:115:0;;;;;;;;;;;;-1:-1:-1;;;20195:115:0;;;;;;;;;;;;;;;20419:3;-1:-1:-1;;;;;20328:309:0;20401:3;-1:-1:-1;;;;;20328:309:0;20372:14;20328:309;20437:15;20467:9;20491:7;:24;;;20530:7;:21;;;20566:7;:24;;;20605:7;:21;;;20328:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18637:2008;;;;;;;;;;:::o;12237:328::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12442:31:::1;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;12442:40:0;::::1;::::0;;;;;;;;12433:55:::1;::::0;12484:3;12433:8:::1;:55::i;:::-;12390:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;12390:40:0;::::1;::::0;;;;;;;;;;:98;;;;12504:53;;;;;;;12390:40;;12406:14;;12504:53:::1;::::0;;;;;;;;;::::1;12237:328:::0;;;:::o;21240:1455::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21513:18:::1;21534:21:::0;;;:5:::1;:21;::::0;;;;;;;-1:-1:-1;;;;;21534:27:0;::::1;::::0;;;;;;;21613:31;;;:15:::1;:31:::0;;;;;;21691:22;;21682:49:::1;::::0;21715:15;21682:8:::1;:49::i;:::-;21657:74:::0;;21773:19:::1;::::0;::::1;::::0;21764:40:::1;::::0;21794:9;21764:8:::1;:40::i;:::-;21742:19;::::0;::::1;:62:::0;21853:26;;21844:47:::1;::::0;21881:9;21844:8:::1;:47::i;:::-;21815:76:::0;;21943:31:::1;::::0;::::1;::::0;21815:26:::1;::::0;21934:52:::1;::::0;21976:9;21934:8:::1;:52::i;:::-;22078:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;22078:55:0;::::1;::::0;;;;;;;;21904:82;;-1:-1:-1;22057:115:0::1;::::0;22146:15;22057:8:::1;:115::i;:::-;21999:31;::::0;;;:15:::1;:31;::::0;;;;;;;-1:-1:-1;;;;;21999:55:0;;::::1;::::0;;;;;;;;:173;;;;22236:29;;::::1;::::0;;:11:::1;:29:::0;;;;22215:94:::1;::::0;22278:20;22215:8:::1;:94::i;:::-;-1:-1:-1::0;;;;;22183:29:0;::::1;;::::0;;;:11:::1;:29;::::0;;;;:126;22362:18:::1;::::0;22341:83:::1;::::0;22393:20;22341:8:::1;:83::i;:::-;22320:18;:104:::0;;;22442:245:::1;::::0;;-1:-1:-1;;;;;22442:245:0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;22488:14;;22442:245:::1;::::0;;;;;;;;::::1;1890:1;;;21240:1455:::0;;;;;;:::o;12831:494::-;12993:30;13007:3;13012:10;12993:13;:30::i;:::-;12985:65;;;;;-1:-1:-1;;;12985:65:0;;;;;;;;;;;;-1:-1:-1;;;12985:65:0;;;;;;;;;;;;;;;13109:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;13109:36:0;;;;;;;;;;13100:51;;13147:3;13100:8;:51::i;:::-;13061:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;13061:36:0;;;;;;;;;;:90;;;;13210:36;;;;;;13201:51;;13248:3;13201:8;:51::i;:::-;13162:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;13162:36:0;;;;;;;;;;;;;:90;;;;13268:49;;;;;;;;;;;13178:14;;13268:49;;;;;;;;12831:494;;;;:::o;2756:162::-;-1:-1:-1;;;;;2862:15:0;;;2831:4;2879:16;;;:10;:16;;;;;;;;2862:15;;;2879:25;;;;;;;;;;2831:4;;2855:55;;2862:15;;2879:30;2855:6;:55::i;:::-;2848:62;;2756:162;;;;;:::o;9817:330::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9916:31:::1;::::0;;;:15:::1;:31;::::0;;;;:47:::1;;::::0;:52;9908:106:::1;;;;-1:-1:-1::0;;;9908:106:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10025:31;::::0;;;:15:::1;:31;::::0;;;;;;;;10075:8:::1;10025:47;::::0;;::::1;:58:::0;10099:40;;;;;;;::::1;::::0;;;;;;;;::::1;9817:330:::0;:::o;4163:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;4754:26::-;;;;:::o;11838:120::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11916:1:::1;11898:15;:19:::0;;;11933:17:::1;::::0;::::1;::::0;11916:1;11933:17:::1;11838:120::o:0;1435:237::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1522:15:::1;;1541:1;1522:20;1514:64;;;::::0;;-1:-1:-1;;;1514:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;1514:64:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;1589:27:0;::::1;1619:1;1589:27:::0;;;::::1;::::0;;;;;;;:31;;;;1636:28;;;;;;;::::1;::::0;;;;;;;;::::1;1435:237:::0;:::o;14691:3494::-;14975:15;;14994:1;14975:20;14967:64;;;;;-1:-1:-1;;;14967:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14967:64:0;;;;;;;;;;;;;;;15044:20;;:::i;:::-;-1:-1:-1;15067:21:0;;;;:5;:21;;;;;;;;-1:-1:-1;;;;;15067:27:0;;;;;;;;;;15044:50;;;;;;;;;;;;;;;;;;;15105:40;;:::i;:::-;-1:-1:-1;15148:31:0;;;;:15;:31;;;;;;;;;15105:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15239:94;;;;-1:-1:-1;;;15239:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15388:25;;15379:52;;15415:15;15379:8;:52::i;:::-;15346:85;;15484:22;;;;15475:43;;15508:9;15475:8;:43::i;:::-;15442:22;;;:76;15571:29;;15562:50;;15602:9;15562:8;:50::i;:::-;15529:83;;15661:34;;;;15529:29;;15652:55;;15697:9;15652:8;:55::i;:::-;15625:82;;15718:23;15745:68;15754:18;:34;;;15790:8;:22;;;15745:8;:68::i;:::-;15718:95;;15851:39;15860:10;;15872:17;15851:8;:39::i;:::-;15824:10;:66;;;;15996:228;16030:1;16017:9;:14;;16046:163;16130:18;:30;;;16051:75;16060:18;:29;;;16091:18;:34;;;16051:8;:75::i;:::-;:109;;16191:17;;16177:10;;:31;;16046:4;:163::i;:::-;15996:6;:228::i;:::-;15976:301;;;;;-1:-1:-1;;;15976:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16373:177;16394:42;16412:1;16399:9;:14;;16434:1;16415:15;:20;;16394:4;:42::i;:::-;16470:67;16479:8;:25;;;16506:18;:30;;;16470:8;:67::i;:::-;16451:15;:86;;16373:6;:177::i;:::-;16353:242;;;;;-1:-1:-1;;;16353:242:0;;;;;;;;;;;;-1:-1:-1;;;16353:242:0;;;;;;;;;;;;;;;16676:83;16683:42;16701:1;16688:9;:14;;16723:1;16704:15;:20;;16683:4;:42::i;:::-;16727:31;16741:4;16747:10;16727:13;:31::i;16676:83::-;16668:133;;;;-1:-1:-1;;;16668:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16856:73;16882:1;16863:15;:20;;16885:43;16899:16;16917:10;16885:13;:43::i;16856:73::-;16848:123;;;;-1:-1:-1;;;16848:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17020:66;17040:1;17027:9;:14;;17043:42;17057:15;17074:10;17043:13;:42::i;17020:66::-;17012:110;;;;;-1:-1:-1;;;17012:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17195:84;17202:8;:22;;;17228:1;17202:27;17250:18;:28;;;17231:15;:47;;17195:6;:84::i;:::-;17187:112;;;;;-1:-1:-1;;;17187:112:0;;;;;;;;;;;;-1:-1:-1;;;17187:112:0;;;;;;;;;;;;;;;17381:1;17369:9;:13;17365:125;;;17431:15;;17405:8;:22;;;:41;;17397:81;;;;;-1:-1:-1;;;17397:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17574:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;17574:49:0;;;;;;;;;;17565:76;;17625:15;17565:8;:76::i;:::-;17502:31;;;;:15;:31;;;;;;;;-1:-1:-1;;;;;17502:49:0;;;;;;;;;;;:139;;;;17694:28;;;;;:11;:28;;;;17685:57;;17724:17;17685:8;:57::i;:::-;17654:11;:28;17666:15;-1:-1:-1;;;;;17654:28:0;-1:-1:-1;;;;;17654:28:0;;;;;;;;;;;;:88;;;;17785:8;17755:5;:21;17761:14;17755:21;;;;;;;;;;;:27;17777:4;-1:-1:-1;;;;;17755:27:0;-1:-1:-1;;;;;17755:27:0;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;17838:18;17804:15;:31;17820:14;17804:31;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17945:4;-1:-1:-1;;;;;17874:303:0;17916:14;17874:303;17964:16;17995:15;18025;18055:9;18079:8;:25;;;18119:8;:22;;;18156:10;;17874:303;;;;-1:-1:-1;;;;;17874:303:0;-1:-1:-1;;;;;17874:303:0;;;;;;-1:-1:-1;;;;;17874:303:0;-1:-1:-1;;;;;17874:303:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14691:3494;;;;;;;;;;:::o;3944:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2493:167::-;2571:10;2594:1;2560:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;2560:31:0;;;;;;;;;;;:35;;;;2611:41;;;;;;;;;;;;;;;;;;;;;;;;2493:167;:::o;10996:742::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11154:15:::1;;11173:1;11154:20;11146:64;;;::::0;;-1:-1:-1;;;11146:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;11146:64:0;;;;;;;;;;;;;::::1;;11225:9;-1:-1:-1::0;;;11225:26:0::1;11221:444;;;11253:31;::::0;;;:15:::1;:31;::::0;;;;;;;:43:::1;:50:::0;;;11221:444:::1;;;11323:9;-1:-1:-1::0;;;11323:31:0::1;11319:346;;;11356:31;::::0;;;:15:::1;:31;::::0;;;;:48:::1;;:55:::0;;;11319:346:::1;;;11431:9;-1:-1:-1::0;;;11431:26:0::1;11427:238;;;11459:31;::::0;;;:15:::1;:31;::::0;;;;:43:::1;;:50:::0;;;11427:238:::1;;;11529:9;-1:-1:-1::0;;;11529:24:0::1;11525:140;;;11555:31;::::0;;;:15:::1;:31;::::0;;;;:41:::1;;:48:::0;;;11525:140:::1;;;11619:46;;-1:-1:-1::0;;;11619:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11525:140;11681:49;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;10996:742:::0;;;:::o;2170:173::-;2251:10;2240:22;;;;2274:1;2240:22;;;;;;;;-1:-1:-1;;;;;2240:31:0;;;;;;;;;;;;:35;;;;2291:44;;;;;;;;;;;;;;;;;;;;;;;2170:173;:::o;13555:337::-;13653:30;13667:3;13672:10;13653:13;:30::i;:::-;13645:65;;;;;-1:-1:-1;;;13645:65:0;;;;;;;;;;;;-1:-1:-1;;;13645:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13749:16:0;;;;;;:11;:16;;;;;;13740:31;;13767:3;13740:8;:31::i;:::-;-1:-1:-1;;;;;13721:16:0;;;;;;;:11;:16;;;;;;:50;;;;13810:16;;;;;;;13801:31;;13828:3;13801:8;:31::i;:::-;-1:-1:-1;;;;;13782:16:0;;;;;;;:11;:16;;;;;;;;;:50;;;;13848:36;;;;;;;13782:16;;13848:36;;;;;;;;;;;;;13555:337;;;:::o;4294:69::-;;;;;;;;;;;;;:::o;4649:30::-;;;;:::o;10325:422::-;1825:10;1806:18;:30;;;;;;;;;;;1840:1;1806:35;1798:81;;;;-1:-1:-1;;;1798:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10425:15:::1;;10444:1;10425:20;10417:64;;;::::0;;-1:-1:-1;;;10417:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;10417:64:0;;;;;;;;;;;;;::::1;;10496:9;-1:-1:-1::0;;;10496:32:0::1;10492:198;;;10530:17;:24:::0;;;10492:198:::1;;;10574:9;-1:-1:-1::0;;;10574:30:0::1;10570:120;;;10606:15;:22:::0;;;10570:120:::1;10706:33;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;10325:422:::0;;:::o;7854:255::-;7942:14;;;7916:9;7975:6;;;;:16;;;7990:1;7985;:6;;7975:16;7967:61;;;;;-1:-1:-1;;;7967:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8052:1;8047;:6;;:16;;;;8062:1;8057;:6;;8047:16;8039:62;;;;-1:-1:-1;;;8039:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8872:260;8959:13;;;8934:8;8991:14;;;8983:57;;;;;-1:-1:-1;;;8983:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9059:6;;;:28;;;9085:1;9073;9069;:5;;;;;;:18;9059:28;9051:73;;;;;-1:-1:-1;;;9051:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9138:155;9236:5;;;9231:16;;;;9223:62;;;;-1:-1:-1;;;9223:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9299:156;9397:5;;;9392:16;;;;9384:63;;;;-1:-1:-1;;;9384:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8363:255;8451:14;;;8425:9;8484:6;;;;:16;;;8499:1;8494;:6;;8484:16;8476:61;;;;;-1:-1:-1;;;8476:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8561:1;8556;:6;;:16;;;;8571:1;8566;:6;;8556:16;8548:62;;;;-1:-1:-1;;;8548:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9461:174;9524:9;9554:6;;;:30;;-1:-1:-1;;9569:5:0;;;9583:1;9578;9569:5;9578:1;9564:15;;;;;:20;9554:30;9546:81;;;;-1:-1:-1;;;9546:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14011:104;14098:9;;14091:17::o;13900:105::-;13989:8;;13982:16::o;873:24956::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://b984909f35a410f65749fd6fea7c79754913d1b3d33734d672f0256679967632
Loading...
Loading
Loading...
Loading
OVERVIEW
The SAFE Engine stores all SAFEs' states and system coin balances, as well as the amount of collateral and debt each address has. This contract is self-contained and has no external dependencies.Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.