@dolomite-exchange/dolomite-margin 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/contracts/Account.json +11 -11
- package/build/contracts/Actions.json +11 -11
- package/build/contracts/Address.json +1 -1
- package/build/contracts/Admin.json +23 -23
- package/build/contracts/AdminImpl.json +35 -307
- package/build/contracts/AdvancedMath.json +7 -7
- package/build/contracts/AmmRebalancerProxy.json +577 -621
- package/build/contracts/AmmRebalancerProxyV1.json +78 -32
- package/build/contracts/Babylonian.json +1 -1
- package/build/contracts/Bits.json +9 -9
- package/build/contracts/Cache.json +13 -13
- package/build/contracts/ChainlinkPriceOracleV1.json +16 -16
- package/build/contracts/Context.json +1 -1
- package/build/contracts/CustomTestToken.json +9 -9
- package/build/contracts/Decimal.json +9 -9
- package/build/contracts/DelayedMultiSig.json +9 -9
- package/build/contracts/DolomiteAmmERC20.json +11 -11
- package/build/contracts/DolomiteAmmFactory.json +14 -52
- package/build/contracts/DolomiteAmmLibrary.json +24 -24
- package/build/contracts/DolomiteAmmPair.json +27 -27
- package/build/contracts/DolomiteAmmRouterProxy.json +30 -363
- package/build/contracts/DolomiteMargin.json +21 -67
- package/build/contracts/DoubleExponentInterestSetter.json +15 -21
- package/build/contracts/EnumerableSet.json +7 -7
- package/build/contracts/ErroringOmiseToken.json +9 -9
- package/build/contracts/ErroringToken.json +10 -10
- package/build/contracts/Events.json +17 -17
- package/build/contracts/ExcessivelySafeCall.json +35 -35
- package/build/contracts/Exchange.json +15 -15
- package/build/contracts/Expiry.json +36 -36
- package/build/contracts/Getters.json +33 -33
- package/build/contracts/IAutoTrader.json +9 -9
- package/build/contracts/ICallee.json +7 -7
- package/build/contracts/IChainlinkAggregator.json +5 -5
- package/build/contracts/IDolomiteAmmERC20.json +5 -5
- package/build/contracts/IDolomiteAmmFactory.json +9 -9
- package/build/contracts/IDolomiteAmmPair.json +9 -9
- package/build/contracts/IDolomiteMargin.json +23 -23
- package/build/contracts/IERC20.json +1 -1
- package/build/contracts/IERC20Detailed.json +5 -5
- package/build/contracts/IExchangeWrapper.json +5 -5
- package/build/contracts/IExpiry.json +9 -9
- package/build/contracts/IInterestSetter.json +7 -7
- package/build/contracts/ILiquidationCallback.json +7 -7
- package/build/contracts/IMakerOracle.json +5 -5
- package/build/contracts/IOasisDex.json +5 -5
- package/build/contracts/IPriceOracle.json +7 -7
- package/build/contracts/IRecyclable.json +9 -9
- package/build/contracts/ITransferProxy.json +5 -5
- package/build/contracts/IUniswapV2Callee.json +5 -5
- package/build/contracts/IUniswapV2Factory.json +5 -5
- package/build/contracts/IUniswapV2Pair.json +5 -5
- package/build/contracts/IUniswapV2Router.json +5 -5
- package/build/contracts/IWETH.json +5 -5
- package/build/contracts/Interest.json +15 -15
- package/build/contracts/LiquidateOrVaporizeImpl.json +32 -83
- package/build/contracts/LiquidatorProxyHelper.json +23 -23
- package/build/contracts/LiquidatorProxyV1.json +30 -36
- package/build/contracts/LiquidatorProxyV1WithAmm.json +49 -105
- package/build/contracts/Math.json +1 -1
- package/build/contracts/Migrations.json +8 -14
- package/build/contracts/Monetary.json +7 -7
- package/build/contracts/MultiCall.json +8 -14
- package/build/contracts/MultiSig.json +7 -7
- package/build/contracts/OmiseToken.json +8 -8
- package/build/contracts/OnlyDolomiteMargin.json +11 -11
- package/build/contracts/Operation.json +15 -15
- package/build/contracts/OperationImpl.json +39 -47
- package/build/contracts/Ownable.json +1 -1
- package/build/contracts/PartiallyDelayedMultiSig.json +9 -9
- package/build/contracts/PayableProxy.json +17 -23
- package/build/contracts/Permission.json +11 -11
- package/build/contracts/PolynomialInterestSetter.json +13 -13
- package/build/contracts/RecyclableTokenProxy.json +25 -25
- package/build/contracts/ReentrancyGuard.json +1 -1
- package/build/contracts/Require.json +7 -7
- package/build/contracts/SafeERC20.json +1 -1
- package/build/contracts/SafeETH.json +7 -7
- package/build/contracts/SafeLiquidationCallback.json +17 -17
- package/build/contracts/SafeMath.json +1 -1
- package/build/contracts/SignedOperationProxy.json +21 -104
- package/build/contracts/SimpleFeeOwner.json +18 -63
- package/build/contracts/State.json +9 -9
- package/build/contracts/Storage.json +37 -37
- package/build/contracts/TestAmmRebalancerProxy.json +32 -58
- package/build/contracts/TestAutoTrader.json +22 -22
- package/build/contracts/TestBtcUsdChainlinkAggregator.json +10 -10
- package/build/contracts/TestCallee.json +19 -19
- package/build/contracts/TestChainlinkPriceOracleV1.json +10 -94
- package/build/contracts/TestCounter.json +7 -7
- package/build/contracts/TestDaiUsdChainlinkAggregator.json +11 -11
- package/build/contracts/TestDolomiteMargin.json +22 -22
- package/build/contracts/TestDoubleExponentInterestSetter.json +10 -10
- package/build/contracts/TestEthUsdChainlinkAggregator.json +11 -11
- package/build/contracts/TestExchangeWrapper.json +28 -28
- package/build/contracts/TestInterestSetter.json +13 -13
- package/build/contracts/TestLib.json +22 -22
- package/build/contracts/TestLinkUsdChainlinkAggregator.json +11 -11
- package/build/contracts/TestLiquidateCallback.json +719 -719
- package/build/contracts/TestLiquidationCallback.json +13 -13
- package/build/contracts/TestLrcEthChainlinkAggregator.json +11 -11
- package/build/contracts/TestMakerOracle.json +10 -10
- package/build/contracts/TestMaticUsdChainlinkAggregator.json +10 -10
- package/build/contracts/TestOasisDex.json +12 -12
- package/build/contracts/TestOperationImpl.json +14 -14
- package/build/contracts/TestPolynomialInterestSetter.json +10 -10
- package/build/contracts/TestPriceAggregator.json +9 -9
- package/build/contracts/TestPriceOracle.json +13 -13
- package/build/contracts/TestRecyclableToken.json +9 -9
- package/build/contracts/TestSimpleCallee.json +15 -15
- package/build/contracts/TestToken.json +9 -9
- package/build/contracts/TestTrader.json +17 -17
- package/build/contracts/TestUniswapAmmRebalancerProxy.json +16 -16
- package/build/contracts/TestUsdcUsdChainlinkAggregator.json +11 -11
- package/build/contracts/TestWETH.json +9 -9
- package/build/contracts/Time.json +9 -9
- package/build/contracts/Token.json +9 -9
- package/build/contracts/TokenA.json +10 -10
- package/build/contracts/TokenB.json +10 -10
- package/build/contracts/TokenC.json +10 -10
- package/build/contracts/TokenD.json +10 -10
- package/build/contracts/TokenE.json +10 -10
- package/build/contracts/TokenF.json +10 -10
- package/build/contracts/TransferProxy.json +22 -28
- package/build/contracts/TypedSignature.json +9 -9
- package/build/contracts/Types.json +9 -9
- package/build/contracts/UQ112x112.json +7 -7
- package/build/contracts/UniswapV2ERC20.json +7 -7
- package/build/contracts/UniswapV2Factory.json +12 -12
- package/build/contracts/UniswapV2Library.json +20 -20
- package/build/contracts/UniswapV2Pair.json +17 -17
- package/build/contracts/UniswapV2Router02.json +16 -16
- package/build/contracts/WETH9.json +1 -1
- package/contracts/external/amm/DolomiteAmmERC20.sol +135 -0
- package/contracts/external/amm/DolomiteAmmFactory.sol +122 -0
- package/contracts/external/amm/DolomiteAmmPair.sol +573 -0
- package/contracts/external/amm/SimpleFeeOwner.sol +107 -0
- package/contracts/external/helpers/LiquidatorProxyHelper.sol +252 -0
- package/contracts/external/helpers/OnlyDolomiteMargin.sol +63 -0
- package/contracts/external/interestsetters/DoubleExponentInterestSetter.sol +212 -0
- package/contracts/external/interestsetters/PolynomialInterestSetter.sol +205 -0
- package/contracts/external/interfaces/IChainlinkAggregator.sol +33 -0
- package/contracts/external/interfaces/IDolomiteAmmERC20.sol +52 -0
- package/contracts/external/interfaces/IDolomiteAmmFactory.sol +42 -0
- package/contracts/external/interfaces/IDolomiteAmmPair.sol +116 -0
- package/contracts/external/interfaces/IExpiry.sol +70 -0
- package/contracts/external/interfaces/IMakerOracle.sol +52 -0
- package/contracts/external/interfaces/IOasisDex.sol +326 -0
- package/contracts/external/interfaces/ITransferProxy.sol +53 -0
- package/contracts/external/interfaces/IUniswapV2Router.sol +134 -0
- package/contracts/external/lib/AdvancedMath.sol +23 -0
- package/contracts/external/lib/DolomiteAmmLibrary.sol +323 -0
- package/contracts/external/lib/TypedSignature.sol +120 -0
- package/contracts/external/lib/UQ112x112.sol +22 -0
- package/contracts/external/multisig/DelayedMultiSig.sol +206 -0
- package/contracts/external/multisig/MultiSig.sol +571 -0
- package/contracts/external/multisig/PartiallyDelayedMultiSig.sol +174 -0
- package/contracts/external/oracles/ChainlinkPriceOracleV1.sol +197 -0
- package/contracts/external/oracles/TestChainlinkPriceOracleV1.sol +98 -0
- package/contracts/external/proxies/AmmRebalancerProxyV1.sol +465 -0
- package/contracts/external/proxies/DolomiteAmmRouterProxy.sol +877 -0
- package/contracts/external/proxies/LiquidatorProxyV1.sol +507 -0
- package/contracts/external/proxies/LiquidatorProxyV1WithAmm.sol +574 -0
- package/contracts/external/proxies/PayableProxy.sol +146 -0
- package/contracts/external/proxies/RecyclableTokenProxy.sol +463 -0
- package/contracts/external/proxies/SignedOperationProxy.sol +553 -0
- package/contracts/external/proxies/TransferProxy.sol +207 -0
- package/contracts/external/traders/Expiry.sol +532 -0
- package/contracts/external/uniswap-v2/UniswapV2ERC20.sol +118 -0
- package/contracts/external/uniswap-v2/UniswapV2Factory.sol +67 -0
- package/contracts/external/uniswap-v2/UniswapV2Pair.sol +283 -0
- package/contracts/external/uniswap-v2/UniswapV2Router02.sol +566 -0
- package/contracts/external/uniswap-v2/interfaces/IUniswapV2Callee.sol +13 -0
- package/contracts/external/uniswap-v2/interfaces/IUniswapV2Factory.sol +18 -0
- package/contracts/external/uniswap-v2/interfaces/IUniswapV2Pair.sol +67 -0
- package/contracts/external/uniswap-v2/interfaces/IWETH.sol +7 -0
- package/contracts/external/uniswap-v2/libraries/SafeETH.sol +29 -0
- package/contracts/external/uniswap-v2/libraries/UniswapV2Library.sol +117 -0
- package/contracts/external/utils/MultiCall.sol +95 -0
- package/contracts/protocol/impl/artifacts/OperationImpl.json +80 -0
- package/contracts/protocol/impl/artifacts/OperationImpl_metadata.json +193 -0
- package/dist/build/published_contracts/AdminImpl.json +2 -2
- package/dist/build/published_contracts/AmmRebalancerProxyV1.json +5 -0
- package/dist/build/published_contracts/ChainlinkPriceOracleV1.json +1 -1
- package/dist/build/published_contracts/DolomiteAmmFactory.json +1 -1
- package/dist/build/published_contracts/DolomiteAmmRouterProxy.json +1 -1
- package/dist/build/published_contracts/DoubleExponentInterestSetter.json +2 -2
- package/dist/build/published_contracts/Expiry.json +1 -1
- package/dist/build/published_contracts/LiquidatorProxyV1.json +1 -1
- package/dist/build/published_contracts/LiquidatorProxyV1WithAmm.json +1 -1
- package/dist/build/published_contracts/MultiCall.json +1 -1
- package/dist/build/published_contracts/PayableProxy.json +2 -2
- package/dist/build/published_contracts/SignedOperationProxy.json +2 -2
- package/dist/build/published_contracts/SimpleFeeOwner.json +1 -1
- package/dist/build/published_contracts/TestUniswapAmmRebalancerProxy.json +140 -0
- package/dist/build/published_contracts/TransferProxy.json +1 -1
- package/dist/src/lib/Contracts.d.ts +3 -1
- package/dist/src/lib/Contracts.js +7 -3
- package/dist/src/lib/Contracts.js.map +1 -1
- package/package.json +2 -1
|
@@ -645,15 +645,15 @@
|
|
|
645
645
|
"type": "function"
|
|
646
646
|
}
|
|
647
647
|
],
|
|
648
|
-
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expiry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxExpirationTimestamp\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"contract IExpiry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MARKET_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_EXPIRATION_TIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKEN\",\"outputs\":[{\"internalType\":\"contract IERC20Detailed\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositIntoDolomiteMargin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountPar\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isExpired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRecycled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"recycle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"supplyAmount\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"borrowToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"borrowAmount\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"exchangeWrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOpen\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"name\":\"trade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"userToAccountNumberHasWithdrawnAfterRecycle\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"}],\"name\":\"withdrawAfterRecycle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromDolomiteMargin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Dolomite * Contract for wrapping around tokens to control how they are deposited into DolomiteMargin, to be combined with \\\"market recycling\\\" so \\\"throwaway tokens\\\" like options contracts that are represented as tokens can be used with the protocol and their market IDs can be safely reclaimed. * This contract works by serving as a proxy account for a user. Meaning, a user deposits funds into DolomiteMargin using this contract's address as the `owner` and the user's address (converted to a uint) as the `number`. As a consequence and tradeoff, users can only have one margin position open per instance of this contract (per option token). * The reason why this contract works well with a recycling strategy is because all usages of the instance's `marketId` are confined to this address as the `owner`. So, if the `marketId` is reused, it doesn't impact the user's balance, since a new instance of `RecyclableTokenProxy` will be deployed for the recycled marketId. Then, the new instance of `RecyclableTokenProxy` would serve as the new address for the user to interact with DolomiteMargin, masking/hiding the user's old (potentially) non-zero balance for that `marketId`. As a visualization, balances are mapped like so: * `owner` --> `accountNumber` --> `marketId` * `owner` corresponds with `address(this)`, `accountNumber` is the user's address, and `marketId` is recycled. * Since `owner` constantly chances, the value of the mapping is able to reset, each time DolomiteMargin recycles a market. * NOTE: Contracts that reference this token and implement IExchangeWrapper must set an allowance for this contract to spend `TOKEN` on the IExchangeWrapper implementor (TOKEN.approve(RecyclableTokenProxy, uint(-1)); call from IExchangeWrapper). * Another note on balances: Part of the idea behind the implementation is to restrict usage of the recyclable token to only be held in `address(this)` owner address / Account.Info. The only time this marketId may reside in an `owner` that is NOT this contract is after a liquidation. This should not matter though, since the liquidator will withdraw the token to sell all of it for the owed collateral. So, after the liquidation transaction is over, the liquidator should have a zero balance anyway. Keeping the this token in the liquidators DolomiteMargin account, would cause catastrophic issues for the protocol when the `marketId` is recycled, since the liquidator's balance would be dirty upon reuse of the `marketId`. To mitigate this issue, a special liquidation contract should be created that purposely performs a withdrawal (down to zero) of this recyclable token's underlying `TOKEN`. Even if an implementing liquidation contract messes this up, there is a check done in `OperationImpl._verifyFinalState` that prevents this from happening.\",\"methods\":{\"isExpired()\":{\"return\":\"true if this recyclable contract is expired, or false if it's not yet.\"}},\"title\":\"RecyclableTokenProxy\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/RecyclableTokenProxy.sol\":\"RecyclableTokenProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xfc9ce2f5a274ec66668c133f09fe213bc1a6a739f9147f4357a3493094de8deb\",\"urls\":[\"bzz-raw://e45442587f111fa0d85dd85a4e07993f5fecd1afce4f457ed21441f8b0abb937\",\"dweb:/ipfs/QmaNq3j3PUwb8Wrx2gEmFFsVa2GByDEkDCPGdwo2qvMeKh\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xee5f04a47950c59594d8eeaefe44bfd9411331e481d10bb2e27dd5fa1c6a8921\",\"urls\":[\"bzz-raw://ea04d35f178214100d5602acddc65fe655df17f8ad75354193ef2ceaefbc7baa\",\"dweb:/ipfs/QmX384XSTcm7H8thzMEvkonVJBaPpTVgQHYZRug1rWBCNb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/RecyclableTokenProxy.sol\":{\"keccak256\":\"0x82c27ef196504874aebac1f7f0a93803aea53f7c62abbfec4e71c2952a87a815\",\"urls\":[\"bzz-raw://e9ed4412b0074df9a26fa1c67e86f4445b8e7981969b800357d5e5112db66da1\",\"dweb:/ipfs/QmUPGAXwUo6VETuX5xRFg6BtUcTwfxi8Bv4Fbqb48Lut2w\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x1e73364879c267fdd2bfd871e62ee58ee3d65fbef3b71e3cc104fbff499eca6c\",\"urls\":[\"bzz-raw://e3b1327980a5949afd52cff4713f47ee4fdee9a8b376ceaa3402f5c9696b8c1b\",\"dweb:/ipfs/QmbhQzVEdaraPJizT5DTtk6CDzH3guHNipHW5T23uTtFkX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IRecyclable.sol\":{\"keccak256\":\"0x68843eafdee387608bd2e757c91e90c5044fc3724ea3ad5042117ab4af49d639\",\"urls\":[\"bzz-raw://14b71da16f79b9b5356dfb8d9243a141bb87b209e30fc99c9278c9a01e62a1a0\",\"dweb:/ipfs/QmNhdGQbhSBSJ8dTqSuntaqA3ChhkKpwLuhDfS5UGQ461A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x73e75454568c5dfc3bdcf7dbf2ddce6ab8d3d317618bc1f1957f7667e15d3799\",\"urls\":[\"bzz-raw://7b1c8a9a79c8ffdbb0fa633f713ae3dfeac93b31d2b1639614ac32d473fb8250\",\"dweb:/ipfs/QmfARP93W2mgeVwD9Lkd3yVmbCLF2Mos7o8HJ1x6WYQmxZ\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0xf930fbde3ab43ec8f079dbad062453b502542f53b7eec670c8e86c7a2e47dd9a\",\"urls\":[\"bzz-raw://e1c402fc55471e8372be478e99f91c28373f096e31f0ef1d5072dfdb81541c29\",\"dweb:/ipfs/QmTc8WSfFCbxNQqNpq1vptUVFxteKQ8HWEhyXREyPZ2neu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x6f2c9955d65c522b80f4b8792f076512d2df947d2112cbc4d98a4781ed42ede2\",\"urls\":[\"bzz-raw://7d8ec81683520c06baeef3f7e06cd82bd6fd5fa611f26857f475f6c829540aff\",\"dweb:/ipfs/QmTDkFzKnrpiV1UKnSoiZAHPuguWzokrr4pFbSPvyaSo56\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
|
|
649
|
-
"bytecode": "0x60806040523480156200001157600080fd5b50604051620038e3380380620038e38339810160408190526200003491620000b1565b60018054600160a01b6001600160a01b03199182166001600160a01b039788161760ff60a01b1916179091556002805482169486169490941790935560038054909316919093161790556000556005805460ff1916905562000155565b80516200009e8162000130565b92915050565b80516200009e816200014a565b60008060008060808587031215620000c857600080fd5b6000620000d6878762000091565b9450506020620000e98782880162000091565b9350506040620000fc8782880162000091565b92505060606200010f87828801620000a4565b91505092959194509250565b60006001600160a01b0382166200009e565b90565b6200013b816200011b565b81146200014757600080fd5b50565b6200013b816200012d565b61377e80620001656000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a3b5f6a011610097578063d7a1e94211610071578063d7a1e942146102ff578063dc94897714610307578063dd62ed3e1461031a578063f6caa61914610328576101a3565b8063a3b5f6a0146102c6578063a9059cbb146102d9578063c3a6eb9c146102ec576101a3565b806382bfefc8116100c857806382bfefc8146102a357806395b5b196146102ab57806395d89b41146102be576101a3565b806370a08231146102755780638129fc1c1461028857806381e99ac414610290576101a3565b806323b872dd116101505780634530a2d71161012a5780634530a2d714610252578063454dab231461025a578063516885be14610262576101a3565b806323b872dd146102225780632f13b60c14610235578063313ce5671461023d576101a3565b80631061d1ab116101815780631061d1ab146101f057806315c14a4a1461020557806318160ddd1461021a576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630f23cbaa146101e6575b600080fd5b6101b0610348565b6040516101bd9190613498565b60405180910390f35b6101d96101d4366004612b5b565b61047a565b6040516101bd919061344e565b6101ee610483565b005b6101f861060b565b6040516101bd9190613512565b61020d610611565b6040516101bd919061345c565b6101f8610620565b6101d9610230366004612b0e565b6106bb565b6101d9610b6c565b610245610b74565b6040516101bd9190613520565b61020d610c54565b6101f8610c63565b6101ee610270366004612d75565b610c69565b6101f8610283366004612a98565b610fb2565b6101ee6110e6565b6101f861029e366004612c13565b611368565b61020d61137c565b6101ee6102b9366004612d75565b61138b565b6101b061158a565b6101d96102d4366004612b5b565b6116a5565b6101d96102e7366004612b5b565b6116c5565b6101ee6102fa366004612c6d565b611837565b6101d9611a25565b6101ee610315366004612ca9565b611a2e565b6101f86101d4366004612ad4565b61033b610336366004612c13565b611e73565b6040516101bd9190613504565b60025460405160609160009183916001600160a01b03169061038e907f06fdde03000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526103a891613324565b600060405180830381855afa9150503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b50915091508180156103fb575060008151115b1561043c57808060200190516104149190810190612bde565b60405160200161042491906133cd565b60405160208183030381529060405292505050610477565b6040518060400160405280601a81526020017f52656379636c61626c653a20446f6c6f6d69746520546f6b656e000000000000815250925050505b90565b60005b92915050565b60015433906104df906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b60048054600180546040517f0339a0c40000000000000000000000000000000000000000000000000000000081526105dd946001600160a01b0390921692630339a0c49261052d920161348a565b60006040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105819190810190612b8b565b60008151811061058d57fe5b6020026020010151147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c61626c6500000000000000000000000000000000000061204c565b50600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6001546001600160a01b031681565b600254604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561067e57600080fd5b505afa158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106b69190810190612c8b565b905090565b600154600090339061071a906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6107706001600160a01b03851633147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c696420726563697069656e7400000000000000000000000000000061204c565b6005546107c29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526108b29330936001600160a01b039091169263062bd3e9926108119201613512565b60206040518083038186803b15801561082957600080fd5b505afa15801561083d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108619190810190612ab6565b6001600160a01b0316147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642073746174650000000000000000000000000000000000000061204c565b6001600160a01b038516301415610aaa57600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610a5a936001600160a01b03169263cb04a34c9261091092909101613512565b604080518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061095f9190810190612c4f565b602001516002546040517f70a082310000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909216916001600160a01b03909116906370a08231906109c19030906004016133d8565b60206040518083038186803b1580156109d957600080fd5b505afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a119190810190612c8b565b10157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e73756666696369656e742062616c616e636520666f72206465706f73697461204c565b836001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a9d9190613512565b60405180910390a3610b61565b600254610ac8906001600160a01b031686308663ffffffff61209b16565b600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610b15936001600160a01b03169263cb04a34c9261091092909101613512565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b589190613512565b60405180910390a35b506001949350505050565b600054421190565b60025460405160009182916060916001600160a01b031690610bba907f313ce567000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f1981840301815290829052610bd491613324565b600060405180830381855afa9150503d8060008114610c0f576040519150601f19603f3d011682016040523d82523d6000602084013e610c14565b606091505b5091509150818015610c27575060008151115b15610c495780806020019051610c409190810190612d94565b92505050610477565b601292505050610477565b6003546001600160a01b031681565b60045481565b60015474010000000000000000000000000000000000000000900460ff16610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b60405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055600554610d409060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74206465706f736974207768656e2072656379636c65640000000061204c565b610d96610d4b610b6c565b157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b6574206973206578706972656400000000000000000000000000000060005461213c565b600254610db4906001600160a01b031633308463ffffffff61209b16565b604080516001808252818301909252606091816020015b610dd361274a565b815260200190600190039081610dcb5790505090506040518060400160405280306001600160a01b03168152602001610e0c338661219e565b81525081600081518110610e1c57fe5b6020908102919091010152604080516001808252818301909252606091816020015b610e46612761565b815260200190600190039081610e3e5750506040805161010081018252600080825260208083018290528351608081018552600181529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001306001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590610f3b9085908590600401613429565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b6001546000906001600160a01b038381169116141561106b576002546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370a08231906110149030906004016133d8565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c8b565b90506110e1565b6001600160a01b038216600090815260066020908152604080832083805290915281205460ff16156110a15760009150506110e1565b6110c76040518060400160405280856001600160a01b0316815260200183815250611e73565b602001516fffffffffffffffffffffffffffffffff169150505b919050565b6001543390611142906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6111926004546000147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f616c726561647920696e697469616c697a65640000000000000000000000000061204c565b6001546040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638fae3be1906111db9030906004016133d8565b60206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b9190810190612c8b565b60048181556001546040517f5ac7d17c000000000000000000000000000000000000000000000000000000008152611312936001600160a01b0390921692635ac7d17c9261127b92909101613512565b60206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112cb9190810190612bc0565b7f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b65742063616e6e6f7420616c6c6f7720626f72726f77696e6700000061204c565b6113654260005410157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642065787069726174696f6e2074696d657374616d700000000060005461213c565b50565b600061047d8260000151836020015161219e565b6002546001600160a01b031681565b60015474010000000000000000000000000000000000000000900460ff166113df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556005546114599060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207769746864726177207768656e2072656379636c656400000061204c565b604080516001808252818301909252606091816020015b61147861274a565b8152602001906001900390816114705790505090506040518060400160405280306001600160a01b031681526020016114b1338661219e565b815250816000815181106114c157fe5b6020908102919091010152604080516001808252818301909252606091816020015b6114eb612761565b8152602001906001900390816114e35750506040805161010081018252600181526000602080830182905283516080810185528281529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001336001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60025460405160609160009183916001600160a01b0316906115d0907f95d89b41000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526115ea91613324565b600060405180830381855afa9150503d8060008114611625576040519150601f19603f3d011682016040523d82523d6000602084013e61162a565b606091505b509150915081801561163d575060008151115b1561166657808060200190516116569190810190612bde565b60405160200161042491906133b6565b6040518060400160405280600b81526020017f72444f4c4f5f544f4b454e00000000000000000000000000000000000000000081525092505050610477565b600660209081526000928352604080842090915290825290205460ff1681565b6001546000903390611724906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526117739330936001600160a01b039091169263062bd3e9926108119201613512565b6005546117c59060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b6002546117e2906001600160a01b0316858563ffffffff6121d216565b836001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516118259190613512565b60405180910390a35060019392505050565b6005546118889060ff167f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c6564207965740000000000000000000000000000000061204c565b3360009081526006602090815260408083208484529091529020546118f29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f7573657220616c7265616479207769746864726577000000000000000000000061204c565b33600081815260066020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554825180840190935230835261136593926001600160a01b03919091169163c8e188269190810161196a858861219e565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526119a79392016134e9565b604080518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f69190810190612c31565b602001516002546001600160a01b031691906fffffffffffffffffffffffffffffffff1663ffffffff6121d216565b60055460ff1681565b600554611a809060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616465207768656e2072656379636c656400000000000061204c565b611a8b610d4b610b6c565b611ad94284117f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f206c6f77000000008661213c565b611b2a6000548411157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f20686967680000008661213c565b600480546001546040517f8fae3be100000000000000000000000000000000000000000000000000000000815291926000926001600160a01b0390921691638fae3be191611b7a918c91016133d8565b60206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bca9190810190612c8b565b60408051600180825281830190925291925060609190816020015b611bed61274a565b815260200190600190039081611be55790505090506040518060400160405280306001600160a01b03168152602001611c26338e61219e565b81525081600081518110611c3657fe5b60209081029190910101526040805160028082526060828101909352816020015b611c5f612761565b815260200190600190039081611c5757505060408051610100810182526004815260006020820152919250810187611c97578c611c99565b8a5b815260200187611ca95785611cab565b845b815260200187611cbb5784611cbd565b855b8152602001896001600160a01b03168152602001600081526020018681525081600081518110611ce957fe5b6020908102919091010152604080516101008101909152806008815260200160008152602001604051806080016040528060001515815260200160006001811115611d3057fe5b815260200160008152602001600081525081526020016000815260200160008152602001600360009054906101000a90046001600160a01b03166001600160a01b03168152602001600081526020016000611dad85600081518110611d9157fe5b6020026020010151878b611da6576000611da8565b8c5b61220d565b604051602001611dbe92919061346a565b60405160208183030381529060405281525081600181518110611ddd57fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590611e339085908590600401613429565b600060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050505050505050505050505050565b611e7b61274a565b81516001600160a01b0316600090815260066020908152604080832082860151845290915290205460ff1615611eb3576110646122a2565b600154604080518082019091523081526001600160a01b039091169063c8e188269060208101611ee286611368565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152611f1f9392016134e9565b604080518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c31565b8361204657611f7c836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000611fa6846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd08561235e565b6040516120069594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613358565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610cbd91600401613498565b50505050565b826120965761205a826122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612084836122c2565b60405160200161200693929190613330565b505050565b6040516120469085907f23b872dd00000000000000000000000000000000000000000000000000000000906120d8908790879087906024016133e6565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124c8565b836120465761214a836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612174846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd0856125fb565b600082826040516020016121b392919061340e565b60408051601f1981840301815291905280516020909101209392505050565b6040516120969084907fa9059cbb00000000000000000000000000000000000000000000000000000000906120d8908690869060240161340e565b604080516001808252818301909252606091829190816020015b61222f6127b3565b81526020019060019003908161222757905050905060405180608001604052808681526020018581526020018460001461226b5742850361226e565b60005b63ffffffff168152602001600115158152508160008151811061228d57fe5b602090810291909101015290505b9392505050565b6122aa61274a565b50604080518082019091526000808252602082015290565b606080826040516020016122d691906132fa565b60408051601f19818403018152919052905060205b80156123435781516000199091019082908290811061230657fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561233e57600101815290506110e1565b6122eb565b5060408051600080825260208201909252905b509392505050565b60408051602a80825260608281019093526001600160a01b038416918391602082018180388339019050509050603060f81b8160008151811061239d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b816001815181106123de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156123565760028102612429600f85166126ec565b83826029038151811061243857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c935061247a600f85166126ec565b83826028038151811061248957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101612410565b6124da826001600160a01b031661270e565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134d9565b60006060836001600160a01b03168360405161252c9190613324565b6000604051808303816000865af19150503d8060008114612569576040519150601f19603f3d011682016040523d82523d6000602084013e61256e565b606091505b5091509150816125aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134a9565b80511561204657808060200190516125c59190810190612bc0565b612046576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134b9565b60608161263c575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526110e1565b8160005b811561265457600101600a82049150612640565b6060816040519080825280601f01601f191660200182016040528015612681576020820181803883390190505b508593509050815b80156126e35760001901600a840660300160f81b8282815181106126a957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612689565b50949350505050565b6000600a82101561270457506030810160f81b6110e1565b5060570160f81b90565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061274257508115155b949350505050565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201529081016127816127e1565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b60405180608001604052806127c661274a565b81526000602082018190526040820181905260609091015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b803561047d816136f6565b805161047d816136f6565b600082601f83011261283157600080fd5b815161284461283f82613555565b61352e565b9150818183526020840193506020810190508385602084028201111561286957600080fd5b60005b83811015612895578161287f8882612a82565b845250602092830192919091019060010161286c565b5050505092915050565b803561047d8161370a565b805161047d8161370a565b600082601f8301126128c657600080fd5b81356128d461283f82613576565b915080825260208301602083018583830111156128f057600080fd5b6128fb8382846136a0565b50505092915050565b803561047d81613713565b600082601f83011261292057600080fd5b815161292e61283f82613576565b9150808252602083016020830185838301111561294a57600080fd5b6128fb8382846136ac565b60006080828403121561296757600080fd5b612971608061352e565b9050600061297f848461289f565b825250602061299084848301612904565b60208301525060406129a484828501612904565b60408301525060606129b884828501612a77565b60608301525092915050565b6000604082840312156129d657600080fd5b6129e0604061352e565b905060006129ee848461280a565b82525060206129ff84848301612a77565b60208301525092915050565b600060408284031215612a1d57600080fd5b612a27604061352e565b90506000612a3584846128aa565b82525060206129ff84848301612a6c565b600060408284031215612a5857600080fd5b612a62604061352e565b90506000612a3584845b805161047d81613720565b803561047d81613729565b805161047d81613729565b805161047d81613732565b600060208284031215612aaa57600080fd5b6000612742848461280a565b600060208284031215612ac857600080fd5b60006127428484612815565b60008060408385031215612ae757600080fd5b6000612af3858561280a565b9250506020612b048582860161280a565b9150509250929050565b600080600060608486031215612b2357600080fd5b6000612b2f868661280a565b9350506020612b408682870161280a565b9250506040612b5186828701612a77565b9150509250925092565b60008060408385031215612b6e57600080fd5b6000612b7a858561280a565b9250506020612b0485828601612a77565b600060208284031215612b9d57600080fd5b815167ffffffffffffffff811115612bb457600080fd5b61274284828501612820565b600060208284031215612bd257600080fd5b600061274284846128aa565b600060208284031215612bf057600080fd5b815167ffffffffffffffff811115612c0757600080fd5b6127428482850161290f565b600060408284031215612c2557600080fd5b600061274284846129c4565b600060408284031215612c4357600080fd5b60006127428484612a0b565b600060408284031215612c6157600080fd5b60006127428484612a46565b600060208284031215612c7f57600080fd5b60006127428484612a77565b600060208284031215612c9d57600080fd5b60006127428484612a82565b6000806000806000806000806101c0898b031215612cc657600080fd5b6000612cd28b8b612a77565b9850506020612ce38b828c01612955565b97505060a0612cf48b828c0161280a565b96505060c0612d058b828c01612955565b955050610140612d178b828c0161280a565b945050610160612d298b828c01612a77565b935050610180612d3b8b828c0161289f565b9250506101a089013567ffffffffffffffff811115612d5957600080fd5b612d658b828c016128b5565b9150509295985092959890939650565b60008060408385031215612d8857600080fd5b6000612b7a8585612a77565b600060208284031215612da657600080fd5b60006127428484612a8d565b600061229b838361314f565b6000612dca8383613244565b505060400190565b6000612dde838361328c565b505060a00190565b612def816135b1565b82525050565b6000612e00826135a4565b612e0a81856135a8565b935083602082028501612e1c8561359e565b8060005b85811015612e565784840389528151612e398582612db2565b9450612e448361359e565b60209a909a0199925050600101612e20565b5091979650505050505050565b6000612e6e826135a4565b612e7881856135a8565b9350612e838361359e565b8060005b83811015612eb1578151612e9b8882612dbe565b9750612ea68361359e565b925050600101612e87565b509495945050505050565b6000612ec7826135a4565b612ed181856135a8565b9350612edc8361359e565b8060005b83811015612eb1578151612ef48882612dd2565b9750612eff8361359e565b925050600101612ee0565b612def816135bc565b612def612f1f826135c1565b610477565b612def612f1f826135e6565b612def612f1f82610477565b612def612f1f8261360b565b6000612f53826135a4565b612f5d81856110e1565b9350612f6d8185602086016136ac565b9290920192915050565b6000612f82826135a4565b612f8c81856135a8565b9350612f9c8185602086016136ac565b612fa5816136d8565b9093019392505050565b612def81613674565b612def8161367f565b612def8161368a565b612def81613695565b6000612fe06001836110e1565b7f7200000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006130196020836135a8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613052600c836110e1565b7f52656379636c61626c653a2000000000000000000000000000000000000000008152600c0192915050565b600061308b602a836135a8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006130ea601f836135a8565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613123601f836135a8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516000906101608401906131648582612fb8565b50602083015161317760208601826132df565b50604083015161318a60408601826131fa565b50606083015161319d60c08601826132df565b5060808301516131b060e08601826132df565b5060a08301516131c4610100860182612de6565b5060c08301516131d86101208601826132df565b5060e08301518482036101408601526131f18282612f77565b95945050505050565b8051608083019061320b8482612f0a565b50602082015161321e6020850182612fc1565b5060408201516132316040850182612fc1565b50606082015161204660608501826132df565b805160408301906132558482612de6565b50602082015161204660208501826132df565b805160408301906132798482612f0a565b50602082015161204660208501826132d6565b805160a083019061329d8482613244565b5060208201516132b060408501826132df565b5060408201516132c360608501826132e8565b5060608201516120466080850182612f0a565b612def81613644565b612def81610477565b612def81613665565b612def8161366e565b60006133068284612f30565b50602001919050565b600061331b8284612f3c565b50600401919050565b600061229b8284612f48565b600061333c8286612f48565b91506133488285612f24565b6002820191506131f18284612f48565b60006133648289612f48565b91506133708288612f24565b6002820191506133808287612f48565b915061338c8286612f24565b60028201915061339c8285612f48565b91506133a88284612f13565b506001019695505050505050565b60006133c182612fd3565b915061229b8284612f48565b60006133c182613045565b6020810161047d8284612de6565b606081016133f48286612de6565b6134016020830185612de6565b61274260408301846132df565b6040810161341c8285612de6565b61229b60208301846132df565b6040808252810161343a8185612e63565b905081810360208301526127428184612df5565b6020810161047d8284612f0a565b6020810161047d8284612faf565b604081016134788285612fc1565b81810360208301526127428184612ebc565b6020810161047d8284612fca565b6020808252810161229b8184612f77565b6020808252810161047d8161300c565b6020808252810161047d8161307e565b6020808252810161047d816130dd565b6020808252810161047d81613116565b606081016134f78285613244565b61229b60408301846132df565b6040810161047d8284613268565b6020810161047d82846132df565b6020810161047d82846132f1565b60405181810167ffffffffffffffff8111828210171561354d57600080fd5b604052919050565b600067ffffffffffffffff82111561356c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561358d57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061047d82613659565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b806110e1816136e2565b806110e1816136ec565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061047d826135b1565b600061047d82613630565b600061047d8261363a565b600061047d82610477565b82818337506000910152565b60005b838110156136c75781810151838201526020016136af565b838111156120465750506000910152565b601f01601f191690565b6009811061136557fe5b6002811061136557fe5b6136ff816135b1565b811461136557600080fd5b6136ff816135bc565b6002811061136557600080fd5b6136ff81613644565b6136ff81610477565b6136ff8161366e56fea365627a7a72315820bccbb28e55c056eded0b870ad7be6365a92f6e700daa27c49fcb933f4ccbb5696c6578706572696d656e74616cf564736f6c63430005100040",
|
|
650
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a3b5f6a011610097578063d7a1e94211610071578063d7a1e942146102ff578063dc94897714610307578063dd62ed3e1461031a578063f6caa61914610328576101a3565b8063a3b5f6a0146102c6578063a9059cbb146102d9578063c3a6eb9c146102ec576101a3565b806382bfefc8116100c857806382bfefc8146102a357806395b5b196146102ab57806395d89b41146102be576101a3565b806370a08231146102755780638129fc1c1461028857806381e99ac414610290576101a3565b806323b872dd116101505780634530a2d71161012a5780634530a2d714610252578063454dab231461025a578063516885be14610262576101a3565b806323b872dd146102225780632f13b60c14610235578063313ce5671461023d576101a3565b80631061d1ab116101815780631061d1ab146101f057806315c14a4a1461020557806318160ddd1461021a576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630f23cbaa146101e6575b600080fd5b6101b0610348565b6040516101bd9190613498565b60405180910390f35b6101d96101d4366004612b5b565b61047a565b6040516101bd919061344e565b6101ee610483565b005b6101f861060b565b6040516101bd9190613512565b61020d610611565b6040516101bd919061345c565b6101f8610620565b6101d9610230366004612b0e565b6106bb565b6101d9610b6c565b610245610b74565b6040516101bd9190613520565b61020d610c54565b6101f8610c63565b6101ee610270366004612d75565b610c69565b6101f8610283366004612a98565b610fb2565b6101ee6110e6565b6101f861029e366004612c13565b611368565b61020d61137c565b6101ee6102b9366004612d75565b61138b565b6101b061158a565b6101d96102d4366004612b5b565b6116a5565b6101d96102e7366004612b5b565b6116c5565b6101ee6102fa366004612c6d565b611837565b6101d9611a25565b6101ee610315366004612ca9565b611a2e565b6101f86101d4366004612ad4565b61033b610336366004612c13565b611e73565b6040516101bd9190613504565b60025460405160609160009183916001600160a01b03169061038e907f06fdde03000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526103a891613324565b600060405180830381855afa9150503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b50915091508180156103fb575060008151115b1561043c57808060200190516104149190810190612bde565b60405160200161042491906133cd565b60405160208183030381529060405292505050610477565b6040518060400160405280601a81526020017f52656379636c61626c653a20446f6c6f6d69746520546f6b656e000000000000815250925050505b90565b60005b92915050565b60015433906104df906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b60048054600180546040517f0339a0c40000000000000000000000000000000000000000000000000000000081526105dd946001600160a01b0390921692630339a0c49261052d920161348a565b60006040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105819190810190612b8b565b60008151811061058d57fe5b6020026020010151147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c61626c6500000000000000000000000000000000000061204c565b50600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6001546001600160a01b031681565b600254604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561067e57600080fd5b505afa158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106b69190810190612c8b565b905090565b600154600090339061071a906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6107706001600160a01b03851633147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c696420726563697069656e7400000000000000000000000000000061204c565b6005546107c29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526108b29330936001600160a01b039091169263062bd3e9926108119201613512565b60206040518083038186803b15801561082957600080fd5b505afa15801561083d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108619190810190612ab6565b6001600160a01b0316147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642073746174650000000000000000000000000000000000000061204c565b6001600160a01b038516301415610aaa57600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610a5a936001600160a01b03169263cb04a34c9261091092909101613512565b604080518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061095f9190810190612c4f565b602001516002546040517f70a082310000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909216916001600160a01b03909116906370a08231906109c19030906004016133d8565b60206040518083038186803b1580156109d957600080fd5b505afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a119190810190612c8b565b10157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e73756666696369656e742062616c616e636520666f72206465706f73697461204c565b836001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a9d9190613512565b60405180910390a3610b61565b600254610ac8906001600160a01b031686308663ffffffff61209b16565b600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610b15936001600160a01b03169263cb04a34c9261091092909101613512565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b589190613512565b60405180910390a35b506001949350505050565b600054421190565b60025460405160009182916060916001600160a01b031690610bba907f313ce567000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f1981840301815290829052610bd491613324565b600060405180830381855afa9150503d8060008114610c0f576040519150601f19603f3d011682016040523d82523d6000602084013e610c14565b606091505b5091509150818015610c27575060008151115b15610c495780806020019051610c409190810190612d94565b92505050610477565b601292505050610477565b6003546001600160a01b031681565b60045481565b60015474010000000000000000000000000000000000000000900460ff16610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b60405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055600554610d409060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74206465706f736974207768656e2072656379636c65640000000061204c565b610d96610d4b610b6c565b157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b6574206973206578706972656400000000000000000000000000000060005461213c565b600254610db4906001600160a01b031633308463ffffffff61209b16565b604080516001808252818301909252606091816020015b610dd361274a565b815260200190600190039081610dcb5790505090506040518060400160405280306001600160a01b03168152602001610e0c338661219e565b81525081600081518110610e1c57fe5b6020908102919091010152604080516001808252818301909252606091816020015b610e46612761565b815260200190600190039081610e3e5750506040805161010081018252600080825260208083018290528351608081018552600181529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001306001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590610f3b9085908590600401613429565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b6001546000906001600160a01b038381169116141561106b576002546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370a08231906110149030906004016133d8565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c8b565b90506110e1565b6001600160a01b038216600090815260066020908152604080832083805290915281205460ff16156110a15760009150506110e1565b6110c76040518060400160405280856001600160a01b0316815260200183815250611e73565b602001516fffffffffffffffffffffffffffffffff169150505b919050565b6001543390611142906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6111926004546000147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f616c726561647920696e697469616c697a65640000000000000000000000000061204c565b6001546040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638fae3be1906111db9030906004016133d8565b60206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b9190810190612c8b565b60048181556001546040517f5ac7d17c000000000000000000000000000000000000000000000000000000008152611312936001600160a01b0390921692635ac7d17c9261127b92909101613512565b60206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112cb9190810190612bc0565b7f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b65742063616e6e6f7420616c6c6f7720626f72726f77696e6700000061204c565b6113654260005410157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642065787069726174696f6e2074696d657374616d700000000060005461213c565b50565b600061047d8260000151836020015161219e565b6002546001600160a01b031681565b60015474010000000000000000000000000000000000000000900460ff166113df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556005546114599060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207769746864726177207768656e2072656379636c656400000061204c565b604080516001808252818301909252606091816020015b61147861274a565b8152602001906001900390816114705790505090506040518060400160405280306001600160a01b031681526020016114b1338661219e565b815250816000815181106114c157fe5b6020908102919091010152604080516001808252818301909252606091816020015b6114eb612761565b8152602001906001900390816114e35750506040805161010081018252600181526000602080830182905283516080810185528281529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001336001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60025460405160609160009183916001600160a01b0316906115d0907f95d89b41000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526115ea91613324565b600060405180830381855afa9150503d8060008114611625576040519150601f19603f3d011682016040523d82523d6000602084013e61162a565b606091505b509150915081801561163d575060008151115b1561166657808060200190516116569190810190612bde565b60405160200161042491906133b6565b6040518060400160405280600b81526020017f72444f4c4f5f544f4b454e00000000000000000000000000000000000000000081525092505050610477565b600660209081526000928352604080842090915290825290205460ff1681565b6001546000903390611724906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526117739330936001600160a01b039091169263062bd3e9926108119201613512565b6005546117c59060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b6002546117e2906001600160a01b0316858563ffffffff6121d216565b836001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516118259190613512565b60405180910390a35060019392505050565b6005546118889060ff167f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c6564207965740000000000000000000000000000000061204c565b3360009081526006602090815260408083208484529091529020546118f29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f7573657220616c7265616479207769746864726577000000000000000000000061204c565b33600081815260066020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554825180840190935230835261136593926001600160a01b03919091169163c8e188269190810161196a858861219e565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526119a79392016134e9565b604080518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f69190810190612c31565b602001516002546001600160a01b031691906fffffffffffffffffffffffffffffffff1663ffffffff6121d216565b60055460ff1681565b600554611a809060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616465207768656e2072656379636c656400000000000061204c565b611a8b610d4b610b6c565b611ad94284117f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f206c6f77000000008661213c565b611b2a6000548411157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f20686967680000008661213c565b600480546001546040517f8fae3be100000000000000000000000000000000000000000000000000000000815291926000926001600160a01b0390921691638fae3be191611b7a918c91016133d8565b60206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bca9190810190612c8b565b60408051600180825281830190925291925060609190816020015b611bed61274a565b815260200190600190039081611be55790505090506040518060400160405280306001600160a01b03168152602001611c26338e61219e565b81525081600081518110611c3657fe5b60209081029190910101526040805160028082526060828101909352816020015b611c5f612761565b815260200190600190039081611c5757505060408051610100810182526004815260006020820152919250810187611c97578c611c99565b8a5b815260200187611ca95785611cab565b845b815260200187611cbb5784611cbd565b855b8152602001896001600160a01b03168152602001600081526020018681525081600081518110611ce957fe5b6020908102919091010152604080516101008101909152806008815260200160008152602001604051806080016040528060001515815260200160006001811115611d3057fe5b815260200160008152602001600081525081526020016000815260200160008152602001600360009054906101000a90046001600160a01b03166001600160a01b03168152602001600081526020016000611dad85600081518110611d9157fe5b6020026020010151878b611da6576000611da8565b8c5b61220d565b604051602001611dbe92919061346a565b60405160208183030381529060405281525081600181518110611ddd57fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590611e339085908590600401613429565b600060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050505050505050505050505050565b611e7b61274a565b81516001600160a01b0316600090815260066020908152604080832082860151845290915290205460ff1615611eb3576110646122a2565b600154604080518082019091523081526001600160a01b039091169063c8e188269060208101611ee286611368565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152611f1f9392016134e9565b604080518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c31565b8361204657611f7c836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000611fa6846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd08561235e565b6040516120069594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613358565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610cbd91600401613498565b50505050565b826120965761205a826122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612084836122c2565b60405160200161200693929190613330565b505050565b6040516120469085907f23b872dd00000000000000000000000000000000000000000000000000000000906120d8908790879087906024016133e6565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124c8565b836120465761214a836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612174846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd0856125fb565b600082826040516020016121b392919061340e565b60408051601f1981840301815291905280516020909101209392505050565b6040516120969084907fa9059cbb00000000000000000000000000000000000000000000000000000000906120d8908690869060240161340e565b604080516001808252818301909252606091829190816020015b61222f6127b3565b81526020019060019003908161222757905050905060405180608001604052808681526020018581526020018460001461226b5742850361226e565b60005b63ffffffff168152602001600115158152508160008151811061228d57fe5b602090810291909101015290505b9392505050565b6122aa61274a565b50604080518082019091526000808252602082015290565b606080826040516020016122d691906132fa565b60408051601f19818403018152919052905060205b80156123435781516000199091019082908290811061230657fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561233e57600101815290506110e1565b6122eb565b5060408051600080825260208201909252905b509392505050565b60408051602a80825260608281019093526001600160a01b038416918391602082018180388339019050509050603060f81b8160008151811061239d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b816001815181106123de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156123565760028102612429600f85166126ec565b83826029038151811061243857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c935061247a600f85166126ec565b83826028038151811061248957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101612410565b6124da826001600160a01b031661270e565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134d9565b60006060836001600160a01b03168360405161252c9190613324565b6000604051808303816000865af19150503d8060008114612569576040519150601f19603f3d011682016040523d82523d6000602084013e61256e565b606091505b5091509150816125aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134a9565b80511561204657808060200190516125c59190810190612bc0565b612046576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134b9565b60608161263c575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526110e1565b8160005b811561265457600101600a82049150612640565b6060816040519080825280601f01601f191660200182016040528015612681576020820181803883390190505b508593509050815b80156126e35760001901600a840660300160f81b8282815181106126a957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612689565b50949350505050565b6000600a82101561270457506030810160f81b6110e1565b5060570160f81b90565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061274257508115155b949350505050565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201529081016127816127e1565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b60405180608001604052806127c661274a565b81526000602082018190526040820181905260609091015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b803561047d816136f6565b805161047d816136f6565b600082601f83011261283157600080fd5b815161284461283f82613555565b61352e565b9150818183526020840193506020810190508385602084028201111561286957600080fd5b60005b83811015612895578161287f8882612a82565b845250602092830192919091019060010161286c565b5050505092915050565b803561047d8161370a565b805161047d8161370a565b600082601f8301126128c657600080fd5b81356128d461283f82613576565b915080825260208301602083018583830111156128f057600080fd5b6128fb8382846136a0565b50505092915050565b803561047d81613713565b600082601f83011261292057600080fd5b815161292e61283f82613576565b9150808252602083016020830185838301111561294a57600080fd5b6128fb8382846136ac565b60006080828403121561296757600080fd5b612971608061352e565b9050600061297f848461289f565b825250602061299084848301612904565b60208301525060406129a484828501612904565b60408301525060606129b884828501612a77565b60608301525092915050565b6000604082840312156129d657600080fd5b6129e0604061352e565b905060006129ee848461280a565b82525060206129ff84848301612a77565b60208301525092915050565b600060408284031215612a1d57600080fd5b612a27604061352e565b90506000612a3584846128aa565b82525060206129ff84848301612a6c565b600060408284031215612a5857600080fd5b612a62604061352e565b90506000612a3584845b805161047d81613720565b803561047d81613729565b805161047d81613729565b805161047d81613732565b600060208284031215612aaa57600080fd5b6000612742848461280a565b600060208284031215612ac857600080fd5b60006127428484612815565b60008060408385031215612ae757600080fd5b6000612af3858561280a565b9250506020612b048582860161280a565b9150509250929050565b600080600060608486031215612b2357600080fd5b6000612b2f868661280a565b9350506020612b408682870161280a565b9250506040612b5186828701612a77565b9150509250925092565b60008060408385031215612b6e57600080fd5b6000612b7a858561280a565b9250506020612b0485828601612a77565b600060208284031215612b9d57600080fd5b815167ffffffffffffffff811115612bb457600080fd5b61274284828501612820565b600060208284031215612bd257600080fd5b600061274284846128aa565b600060208284031215612bf057600080fd5b815167ffffffffffffffff811115612c0757600080fd5b6127428482850161290f565b600060408284031215612c2557600080fd5b600061274284846129c4565b600060408284031215612c4357600080fd5b60006127428484612a0b565b600060408284031215612c6157600080fd5b60006127428484612a46565b600060208284031215612c7f57600080fd5b60006127428484612a77565b600060208284031215612c9d57600080fd5b60006127428484612a82565b6000806000806000806000806101c0898b031215612cc657600080fd5b6000612cd28b8b612a77565b9850506020612ce38b828c01612955565b97505060a0612cf48b828c0161280a565b96505060c0612d058b828c01612955565b955050610140612d178b828c0161280a565b945050610160612d298b828c01612a77565b935050610180612d3b8b828c0161289f565b9250506101a089013567ffffffffffffffff811115612d5957600080fd5b612d658b828c016128b5565b9150509295985092959890939650565b60008060408385031215612d8857600080fd5b6000612b7a8585612a77565b600060208284031215612da657600080fd5b60006127428484612a8d565b600061229b838361314f565b6000612dca8383613244565b505060400190565b6000612dde838361328c565b505060a00190565b612def816135b1565b82525050565b6000612e00826135a4565b612e0a81856135a8565b935083602082028501612e1c8561359e565b8060005b85811015612e565784840389528151612e398582612db2565b9450612e448361359e565b60209a909a0199925050600101612e20565b5091979650505050505050565b6000612e6e826135a4565b612e7881856135a8565b9350612e838361359e565b8060005b83811015612eb1578151612e9b8882612dbe565b9750612ea68361359e565b925050600101612e87565b509495945050505050565b6000612ec7826135a4565b612ed181856135a8565b9350612edc8361359e565b8060005b83811015612eb1578151612ef48882612dd2565b9750612eff8361359e565b925050600101612ee0565b612def816135bc565b612def612f1f826135c1565b610477565b612def612f1f826135e6565b612def612f1f82610477565b612def612f1f8261360b565b6000612f53826135a4565b612f5d81856110e1565b9350612f6d8185602086016136ac565b9290920192915050565b6000612f82826135a4565b612f8c81856135a8565b9350612f9c8185602086016136ac565b612fa5816136d8565b9093019392505050565b612def81613674565b612def8161367f565b612def8161368a565b612def81613695565b6000612fe06001836110e1565b7f7200000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006130196020836135a8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613052600c836110e1565b7f52656379636c61626c653a2000000000000000000000000000000000000000008152600c0192915050565b600061308b602a836135a8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006130ea601f836135a8565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613123601f836135a8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516000906101608401906131648582612fb8565b50602083015161317760208601826132df565b50604083015161318a60408601826131fa565b50606083015161319d60c08601826132df565b5060808301516131b060e08601826132df565b5060a08301516131c4610100860182612de6565b5060c08301516131d86101208601826132df565b5060e08301518482036101408601526131f18282612f77565b95945050505050565b8051608083019061320b8482612f0a565b50602082015161321e6020850182612fc1565b5060408201516132316040850182612fc1565b50606082015161204660608501826132df565b805160408301906132558482612de6565b50602082015161204660208501826132df565b805160408301906132798482612f0a565b50602082015161204660208501826132d6565b805160a083019061329d8482613244565b5060208201516132b060408501826132df565b5060408201516132c360608501826132e8565b5060608201516120466080850182612f0a565b612def81613644565b612def81610477565b612def81613665565b612def8161366e565b60006133068284612f30565b50602001919050565b600061331b8284612f3c565b50600401919050565b600061229b8284612f48565b600061333c8286612f48565b91506133488285612f24565b6002820191506131f18284612f48565b60006133648289612f48565b91506133708288612f24565b6002820191506133808287612f48565b915061338c8286612f24565b60028201915061339c8285612f48565b91506133a88284612f13565b506001019695505050505050565b60006133c182612fd3565b915061229b8284612f48565b60006133c182613045565b6020810161047d8284612de6565b606081016133f48286612de6565b6134016020830185612de6565b61274260408301846132df565b6040810161341c8285612de6565b61229b60208301846132df565b6040808252810161343a8185612e63565b905081810360208301526127428184612df5565b6020810161047d8284612f0a565b6020810161047d8284612faf565b604081016134788285612fc1565b81810360208301526127428184612ebc565b6020810161047d8284612fca565b6020808252810161229b8184612f77565b6020808252810161047d8161300c565b6020808252810161047d8161307e565b6020808252810161047d816130dd565b6020808252810161047d81613116565b606081016134f78285613244565b61229b60408301846132df565b6040810161047d8284613268565b6020810161047d82846132df565b6020810161047d82846132f1565b60405181810167ffffffffffffffff8111828210171561354d57600080fd5b604052919050565b600067ffffffffffffffff82111561356c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561358d57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061047d82613659565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b806110e1816136e2565b806110e1816136ec565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061047d826135b1565b600061047d82613630565b600061047d8261363a565b600061047d82610477565b82818337506000910152565b60005b838110156136c75781810151838201526020016136af565b838111156120465750506000910152565b601f01601f191690565b6009811061136557fe5b6002811061136557fe5b6136ff816135b1565b811461136557600080fd5b6136ff816135bc565b6002811061136557600080fd5b6136ff81613644565b6136ff81610477565b6136ff8161366e56fea365627a7a72315820bccbb28e55c056eded0b870ad7be6365a92f6e700daa27c49fcb933f4ccbb5696c6578706572696d656e74616cf564736f6c63430005100040",
|
|
648
|
+
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expiry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxExpirationTimestamp\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"contract IExpiry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MARKET_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_EXPIRATION_TIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKEN\",\"outputs\":[{\"internalType\":\"contract IERC20Detailed\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositIntoDolomiteMargin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountPar\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isExpired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRecycled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"recycle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"supplyAmount\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"borrowToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"borrowAmount\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"exchangeWrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOpen\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"name\":\"trade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"userToAccountNumberHasWithdrawnAfterRecycle\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"}],\"name\":\"withdrawAfterRecycle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromDolomiteMargin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Dolomite * Contract for wrapping around tokens to control how they are deposited into DolomiteMargin, to be combined with \\\"market recycling\\\" so \\\"throwaway tokens\\\" like options contracts that are represented as tokens can be used with the protocol and their market IDs can be safely reclaimed. * This contract works by serving as a proxy account for a user. Meaning, a user deposits funds into DolomiteMargin using this contract's address as the `owner` and the user's address (converted to a uint) as the `number`. As a consequence and tradeoff, users can only have one margin position open per instance of this contract (per option token). * The reason why this contract works well with a recycling strategy is because all usages of the instance's `marketId` are confined to this address as the `owner`. So, if the `marketId` is reused, it doesn't impact the user's balance, since a new instance of `RecyclableTokenProxy` will be deployed for the recycled marketId. Then, the new instance of `RecyclableTokenProxy` would serve as the new address for the user to interact with DolomiteMargin, masking/hiding the user's old (potentially) non-zero balance for that `marketId`. As a visualization, balances are mapped like so: * `owner` --> `accountNumber` --> `marketId` * `owner` corresponds with `address(this)`, `accountNumber` is the user's address, and `marketId` is recycled. * Since `owner` constantly chances, the value of the mapping is able to reset, each time DolomiteMargin recycles a market. * NOTE: Contracts that reference this token and implement IExchangeWrapper must set an allowance for this contract to spend `TOKEN` on the IExchangeWrapper implementor (TOKEN.approve(RecyclableTokenProxy, uint(-1)); call from IExchangeWrapper). * Another note on balances: Part of the idea behind the implementation is to restrict usage of the recyclable token to only be held in `address(this)` owner address / Account.Info. The only time this marketId may reside in an `owner` that is NOT this contract is after a liquidation. This should not matter though, since the liquidator will withdraw the token to sell all of it for the owed collateral. So, after the liquidation transaction is over, the liquidator should have a zero balance anyway. Keeping the this token in the liquidators DolomiteMargin account, would cause catastrophic issues for the protocol when the `marketId` is recycled, since the liquidator's balance would be dirty upon reuse of the `marketId`. To mitigate this issue, a special liquidation contract should be created that purposely performs a withdrawal (down to zero) of this recyclable token's underlying `TOKEN`. Even if an implementing liquidation contract messes this up, there is a check done in `OperationImpl._verifyFinalState` that prevents this from happening.\",\"methods\":{\"isExpired()\":{\"return\":\"true if this recyclable contract is expired, or false if it's not yet.\"}},\"title\":\"RecyclableTokenProxy\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/RecyclableTokenProxy.sol\":\"RecyclableTokenProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xfc9ce2f5a274ec66668c133f09fe213bc1a6a739f9147f4357a3493094de8deb\",\"urls\":[\"bzz-raw://e45442587f111fa0d85dd85a4e07993f5fecd1afce4f457ed21441f8b0abb937\",\"dweb:/ipfs/QmaNq3j3PUwb8Wrx2gEmFFsVa2GByDEkDCPGdwo2qvMeKh\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xee5f04a47950c59594d8eeaefe44bfd9411331e481d10bb2e27dd5fa1c6a8921\",\"urls\":[\"bzz-raw://ea04d35f178214100d5602acddc65fe655df17f8ad75354193ef2ceaefbc7baa\",\"dweb:/ipfs/QmX384XSTcm7H8thzMEvkonVJBaPpTVgQHYZRug1rWBCNb\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/RecyclableTokenProxy.sol\":{\"keccak256\":\"0x82c27ef196504874aebac1f7f0a93803aea53f7c62abbfec4e71c2952a87a815\",\"urls\":[\"bzz-raw://e9ed4412b0074df9a26fa1c67e86f4445b8e7981969b800357d5e5112db66da1\",\"dweb:/ipfs/QmUPGAXwUo6VETuX5xRFg6BtUcTwfxi8Bv4Fbqb48Lut2w\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x1e73364879c267fdd2bfd871e62ee58ee3d65fbef3b71e3cc104fbff499eca6c\",\"urls\":[\"bzz-raw://e3b1327980a5949afd52cff4713f47ee4fdee9a8b376ceaa3402f5c9696b8c1b\",\"dweb:/ipfs/QmbhQzVEdaraPJizT5DTtk6CDzH3guHNipHW5T23uTtFkX\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IRecyclable.sol\":{\"keccak256\":\"0x68843eafdee387608bd2e757c91e90c5044fc3724ea3ad5042117ab4af49d639\",\"urls\":[\"bzz-raw://14b71da16f79b9b5356dfb8d9243a141bb87b209e30fc99c9278c9a01e62a1a0\",\"dweb:/ipfs/QmNhdGQbhSBSJ8dTqSuntaqA3ChhkKpwLuhDfS5UGQ461A\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x73e75454568c5dfc3bdcf7dbf2ddce6ab8d3d317618bc1f1957f7667e15d3799\",\"urls\":[\"bzz-raw://7b1c8a9a79c8ffdbb0fa633f713ae3dfeac93b31d2b1639614ac32d473fb8250\",\"dweb:/ipfs/QmfARP93W2mgeVwD9Lkd3yVmbCLF2Mos7o8HJ1x6WYQmxZ\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0xf930fbde3ab43ec8f079dbad062453b502542f53b7eec670c8e86c7a2e47dd9a\",\"urls\":[\"bzz-raw://e1c402fc55471e8372be478e99f91c28373f096e31f0ef1d5072dfdb81541c29\",\"dweb:/ipfs/QmTc8WSfFCbxNQqNpq1vptUVFxteKQ8HWEhyXREyPZ2neu\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x6f2c9955d65c522b80f4b8792f076512d2df947d2112cbc4d98a4781ed42ede2\",\"urls\":[\"bzz-raw://7d8ec81683520c06baeef3f7e06cd82bd6fd5fa611f26857f475f6c829540aff\",\"dweb:/ipfs/QmTDkFzKnrpiV1UKnSoiZAHPuguWzokrr4pFbSPvyaSo56\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
|
|
649
|
+
"bytecode": "0x60806040523480156200001157600080fd5b50604051620038e3380380620038e38339810160408190526200003491620000b1565b60018054600160a01b6001600160a01b03199182166001600160a01b039788161760ff60a01b1916179091556002805482169486169490941790935560038054909316919093161790556000556005805460ff1916905562000155565b80516200009e8162000130565b92915050565b80516200009e816200014a565b60008060008060808587031215620000c857600080fd5b6000620000d6878762000091565b9450506020620000e98782880162000091565b9350506040620000fc8782880162000091565b92505060606200010f87828801620000a4565b91505092959194509250565b60006001600160a01b0382166200009e565b90565b6200013b816200011b565b81146200014757600080fd5b50565b6200013b816200012d565b61377e80620001656000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a3b5f6a011610097578063d7a1e94211610071578063d7a1e942146102ff578063dc94897714610307578063dd62ed3e1461031a578063f6caa61914610328576101a3565b8063a3b5f6a0146102c6578063a9059cbb146102d9578063c3a6eb9c146102ec576101a3565b806382bfefc8116100c857806382bfefc8146102a357806395b5b196146102ab57806395d89b41146102be576101a3565b806370a08231146102755780638129fc1c1461028857806381e99ac414610290576101a3565b806323b872dd116101505780634530a2d71161012a5780634530a2d714610252578063454dab231461025a578063516885be14610262576101a3565b806323b872dd146102225780632f13b60c14610235578063313ce5671461023d576101a3565b80631061d1ab116101815780631061d1ab146101f057806315c14a4a1461020557806318160ddd1461021a576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630f23cbaa146101e6575b600080fd5b6101b0610348565b6040516101bd9190613498565b60405180910390f35b6101d96101d4366004612b5b565b61047a565b6040516101bd919061344e565b6101ee610483565b005b6101f861060b565b6040516101bd9190613512565b61020d610611565b6040516101bd919061345c565b6101f8610620565b6101d9610230366004612b0e565b6106bb565b6101d9610b6c565b610245610b74565b6040516101bd9190613520565b61020d610c54565b6101f8610c63565b6101ee610270366004612d75565b610c69565b6101f8610283366004612a98565b610fb2565b6101ee6110e6565b6101f861029e366004612c13565b611368565b61020d61137c565b6101ee6102b9366004612d75565b61138b565b6101b061158a565b6101d96102d4366004612b5b565b6116a5565b6101d96102e7366004612b5b565b6116c5565b6101ee6102fa366004612c6d565b611837565b6101d9611a25565b6101ee610315366004612ca9565b611a2e565b6101f86101d4366004612ad4565b61033b610336366004612c13565b611e73565b6040516101bd9190613504565b60025460405160609160009183916001600160a01b03169061038e907f06fdde03000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526103a891613324565b600060405180830381855afa9150503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b50915091508180156103fb575060008151115b1561043c57808060200190516104149190810190612bde565b60405160200161042491906133cd565b60405160208183030381529060405292505050610477565b6040518060400160405280601a81526020017f52656379636c61626c653a20446f6c6f6d69746520546f6b656e000000000000815250925050505b90565b60005b92915050565b60015433906104df906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b60048054600180546040517f0339a0c40000000000000000000000000000000000000000000000000000000081526105dd946001600160a01b0390921692630339a0c49261052d920161348a565b60006040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105819190810190612b8b565b60008151811061058d57fe5b6020026020010151147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c61626c6500000000000000000000000000000000000061204c565b50600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6001546001600160a01b031681565b600254604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561067e57600080fd5b505afa158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106b69190810190612c8b565b905090565b600154600090339061071a906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6107706001600160a01b03851633147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c696420726563697069656e7400000000000000000000000000000061204c565b6005546107c29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526108b29330936001600160a01b039091169263062bd3e9926108119201613512565b60206040518083038186803b15801561082957600080fd5b505afa15801561083d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108619190810190612ab6565b6001600160a01b0316147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642073746174650000000000000000000000000000000000000061204c565b6001600160a01b038516301415610aaa57600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610a5a936001600160a01b03169263cb04a34c9261091092909101613512565b604080518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061095f9190810190612c4f565b602001516002546040517f70a082310000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909216916001600160a01b03909116906370a08231906109c19030906004016133d8565b60206040518083038186803b1580156109d957600080fd5b505afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a119190810190612c8b565b10157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e73756666696369656e742062616c616e636520666f72206465706f73697461204c565b836001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a9d9190613512565b60405180910390a3610b61565b600254610ac8906001600160a01b031686308663ffffffff61209b16565b600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610b15936001600160a01b03169263cb04a34c9261091092909101613512565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b589190613512565b60405180910390a35b506001949350505050565b600054421190565b60025460405160009182916060916001600160a01b031690610bba907f313ce567000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f1981840301815290829052610bd491613324565b600060405180830381855afa9150503d8060008114610c0f576040519150601f19603f3d011682016040523d82523d6000602084013e610c14565b606091505b5091509150818015610c27575060008151115b15610c495780806020019051610c409190810190612d94565b92505050610477565b601292505050610477565b6003546001600160a01b031681565b60045481565b60015474010000000000000000000000000000000000000000900460ff16610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b60405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055600554610d409060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74206465706f736974207768656e2072656379636c65640000000061204c565b610d96610d4b610b6c565b157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b6574206973206578706972656400000000000000000000000000000060005461213c565b600254610db4906001600160a01b031633308463ffffffff61209b16565b604080516001808252818301909252606091816020015b610dd361274a565b815260200190600190039081610dcb5790505090506040518060400160405280306001600160a01b03168152602001610e0c338661219e565b81525081600081518110610e1c57fe5b6020908102919091010152604080516001808252818301909252606091816020015b610e46612761565b815260200190600190039081610e3e5750506040805161010081018252600080825260208083018290528351608081018552600181529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001306001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590610f3b9085908590600401613429565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b6001546000906001600160a01b038381169116141561106b576002546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370a08231906110149030906004016133d8565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c8b565b90506110e1565b6001600160a01b038216600090815260066020908152604080832083805290915281205460ff16156110a15760009150506110e1565b6110c76040518060400160405280856001600160a01b0316815260200183815250611e73565b602001516fffffffffffffffffffffffffffffffff169150505b919050565b6001543390611142906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6111926004546000147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f616c726561647920696e697469616c697a65640000000000000000000000000061204c565b6001546040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638fae3be1906111db9030906004016133d8565b60206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b9190810190612c8b565b60048181556001546040517f5ac7d17c000000000000000000000000000000000000000000000000000000008152611312936001600160a01b0390921692635ac7d17c9261127b92909101613512565b60206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112cb9190810190612bc0565b7f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b65742063616e6e6f7420616c6c6f7720626f72726f77696e6700000061204c565b6113654260005410157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642065787069726174696f6e2074696d657374616d700000000060005461213c565b50565b600061047d8260000151836020015161219e565b6002546001600160a01b031681565b60015474010000000000000000000000000000000000000000900460ff166113df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556005546114599060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207769746864726177207768656e2072656379636c656400000061204c565b604080516001808252818301909252606091816020015b61147861274a565b8152602001906001900390816114705790505090506040518060400160405280306001600160a01b031681526020016114b1338661219e565b815250816000815181106114c157fe5b6020908102919091010152604080516001808252818301909252606091816020015b6114eb612761565b8152602001906001900390816114e35750506040805161010081018252600181526000602080830182905283516080810185528281529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001336001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60025460405160609160009183916001600160a01b0316906115d0907f95d89b41000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526115ea91613324565b600060405180830381855afa9150503d8060008114611625576040519150601f19603f3d011682016040523d82523d6000602084013e61162a565b606091505b509150915081801561163d575060008151115b1561166657808060200190516116569190810190612bde565b60405160200161042491906133b6565b6040518060400160405280600b81526020017f72444f4c4f5f544f4b454e00000000000000000000000000000000000000000081525092505050610477565b600660209081526000928352604080842090915290825290205460ff1681565b6001546000903390611724906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526117739330936001600160a01b039091169263062bd3e9926108119201613512565b6005546117c59060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b6002546117e2906001600160a01b0316858563ffffffff6121d216565b836001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516118259190613512565b60405180910390a35060019392505050565b6005546118889060ff167f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c6564207965740000000000000000000000000000000061204c565b3360009081526006602090815260408083208484529091529020546118f29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f7573657220616c7265616479207769746864726577000000000000000000000061204c565b33600081815260066020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554825180840190935230835261136593926001600160a01b03919091169163c8e188269190810161196a858861219e565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526119a79392016134e9565b604080518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f69190810190612c31565b602001516002546001600160a01b031691906fffffffffffffffffffffffffffffffff1663ffffffff6121d216565b60055460ff1681565b600554611a809060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616465207768656e2072656379636c656400000000000061204c565b611a8b610d4b610b6c565b611ad94284117f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f206c6f77000000008661213c565b611b2a6000548411157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f20686967680000008661213c565b600480546001546040517f8fae3be100000000000000000000000000000000000000000000000000000000815291926000926001600160a01b0390921691638fae3be191611b7a918c91016133d8565b60206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bca9190810190612c8b565b60408051600180825281830190925291925060609190816020015b611bed61274a565b815260200190600190039081611be55790505090506040518060400160405280306001600160a01b03168152602001611c26338e61219e565b81525081600081518110611c3657fe5b60209081029190910101526040805160028082526060828101909352816020015b611c5f612761565b815260200190600190039081611c5757505060408051610100810182526004815260006020820152919250810187611c97578c611c99565b8a5b815260200187611ca95785611cab565b845b815260200187611cbb5784611cbd565b855b8152602001896001600160a01b03168152602001600081526020018681525081600081518110611ce957fe5b6020908102919091010152604080516101008101909152806008815260200160008152602001604051806080016040528060001515815260200160006001811115611d3057fe5b815260200160008152602001600081525081526020016000815260200160008152602001600360009054906101000a90046001600160a01b03166001600160a01b03168152602001600081526020016000611dad85600081518110611d9157fe5b6020026020010151878b611da6576000611da8565b8c5b61220d565b604051602001611dbe92919061346a565b60405160208183030381529060405281525081600181518110611ddd57fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590611e339085908590600401613429565b600060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050505050505050505050505050565b611e7b61274a565b81516001600160a01b0316600090815260066020908152604080832082860151845290915290205460ff1615611eb3576110646122a2565b600154604080518082019091523081526001600160a01b039091169063c8e188269060208101611ee286611368565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152611f1f9392016134e9565b604080518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c31565b8361204657611f7c836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000611fa6846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd08561235e565b6040516120069594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613358565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610cbd91600401613498565b50505050565b826120965761205a826122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612084836122c2565b60405160200161200693929190613330565b505050565b6040516120469085907f23b872dd00000000000000000000000000000000000000000000000000000000906120d8908790879087906024016133e6565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124c8565b836120465761214a836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612174846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd0856125fb565b600082826040516020016121b392919061340e565b60408051601f1981840301815291905280516020909101209392505050565b6040516120969084907fa9059cbb00000000000000000000000000000000000000000000000000000000906120d8908690869060240161340e565b604080516001808252818301909252606091829190816020015b61222f6127b3565b81526020019060019003908161222757905050905060405180608001604052808681526020018581526020018460001461226b5742850361226e565b60005b63ffffffff168152602001600115158152508160008151811061228d57fe5b602090810291909101015290505b9392505050565b6122aa61274a565b50604080518082019091526000808252602082015290565b606080826040516020016122d691906132fa565b60408051601f19818403018152919052905060205b80156123435781516000199091019082908290811061230657fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561233e57600101815290506110e1565b6122eb565b5060408051600080825260208201909252905b509392505050565b60408051602a80825260608281019093526001600160a01b038416918391602082018180388339019050509050603060f81b8160008151811061239d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b816001815181106123de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156123565760028102612429600f85166126ec565b83826029038151811061243857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c935061247a600f85166126ec565b83826028038151811061248957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101612410565b6124da826001600160a01b031661270e565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134d9565b60006060836001600160a01b03168360405161252c9190613324565b6000604051808303816000865af19150503d8060008114612569576040519150601f19603f3d011682016040523d82523d6000602084013e61256e565b606091505b5091509150816125aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134a9565b80511561204657808060200190516125c59190810190612bc0565b612046576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134b9565b60608161263c575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526110e1565b8160005b811561265457600101600a82049150612640565b6060816040519080825280601f01601f191660200182016040528015612681576020820181803883390190505b508593509050815b80156126e35760001901600a840660300160f81b8282815181106126a957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612689565b50949350505050565b6000600a82101561270457506030810160f81b6110e1565b5060570160f81b90565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061274257508115155b949350505050565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201529081016127816127e1565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b60405180608001604052806127c661274a565b81526000602082018190526040820181905260609091015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b803561047d816136f6565b805161047d816136f6565b600082601f83011261283157600080fd5b815161284461283f82613555565b61352e565b9150818183526020840193506020810190508385602084028201111561286957600080fd5b60005b83811015612895578161287f8882612a82565b845250602092830192919091019060010161286c565b5050505092915050565b803561047d8161370a565b805161047d8161370a565b600082601f8301126128c657600080fd5b81356128d461283f82613576565b915080825260208301602083018583830111156128f057600080fd5b6128fb8382846136a0565b50505092915050565b803561047d81613713565b600082601f83011261292057600080fd5b815161292e61283f82613576565b9150808252602083016020830185838301111561294a57600080fd5b6128fb8382846136ac565b60006080828403121561296757600080fd5b612971608061352e565b9050600061297f848461289f565b825250602061299084848301612904565b60208301525060406129a484828501612904565b60408301525060606129b884828501612a77565b60608301525092915050565b6000604082840312156129d657600080fd5b6129e0604061352e565b905060006129ee848461280a565b82525060206129ff84848301612a77565b60208301525092915050565b600060408284031215612a1d57600080fd5b612a27604061352e565b90506000612a3584846128aa565b82525060206129ff84848301612a6c565b600060408284031215612a5857600080fd5b612a62604061352e565b90506000612a3584845b805161047d81613720565b803561047d81613729565b805161047d81613729565b805161047d81613732565b600060208284031215612aaa57600080fd5b6000612742848461280a565b600060208284031215612ac857600080fd5b60006127428484612815565b60008060408385031215612ae757600080fd5b6000612af3858561280a565b9250506020612b048582860161280a565b9150509250929050565b600080600060608486031215612b2357600080fd5b6000612b2f868661280a565b9350506020612b408682870161280a565b9250506040612b5186828701612a77565b9150509250925092565b60008060408385031215612b6e57600080fd5b6000612b7a858561280a565b9250506020612b0485828601612a77565b600060208284031215612b9d57600080fd5b815167ffffffffffffffff811115612bb457600080fd5b61274284828501612820565b600060208284031215612bd257600080fd5b600061274284846128aa565b600060208284031215612bf057600080fd5b815167ffffffffffffffff811115612c0757600080fd5b6127428482850161290f565b600060408284031215612c2557600080fd5b600061274284846129c4565b600060408284031215612c4357600080fd5b60006127428484612a0b565b600060408284031215612c6157600080fd5b60006127428484612a46565b600060208284031215612c7f57600080fd5b60006127428484612a77565b600060208284031215612c9d57600080fd5b60006127428484612a82565b6000806000806000806000806101c0898b031215612cc657600080fd5b6000612cd28b8b612a77565b9850506020612ce38b828c01612955565b97505060a0612cf48b828c0161280a565b96505060c0612d058b828c01612955565b955050610140612d178b828c0161280a565b945050610160612d298b828c01612a77565b935050610180612d3b8b828c0161289f565b9250506101a089013567ffffffffffffffff811115612d5957600080fd5b612d658b828c016128b5565b9150509295985092959890939650565b60008060408385031215612d8857600080fd5b6000612b7a8585612a77565b600060208284031215612da657600080fd5b60006127428484612a8d565b600061229b838361314f565b6000612dca8383613244565b505060400190565b6000612dde838361328c565b505060a00190565b612def816135b1565b82525050565b6000612e00826135a4565b612e0a81856135a8565b935083602082028501612e1c8561359e565b8060005b85811015612e565784840389528151612e398582612db2565b9450612e448361359e565b60209a909a0199925050600101612e20565b5091979650505050505050565b6000612e6e826135a4565b612e7881856135a8565b9350612e838361359e565b8060005b83811015612eb1578151612e9b8882612dbe565b9750612ea68361359e565b925050600101612e87565b509495945050505050565b6000612ec7826135a4565b612ed181856135a8565b9350612edc8361359e565b8060005b83811015612eb1578151612ef48882612dd2565b9750612eff8361359e565b925050600101612ee0565b612def816135bc565b612def612f1f826135c1565b610477565b612def612f1f826135e6565b612def612f1f82610477565b612def612f1f8261360b565b6000612f53826135a4565b612f5d81856110e1565b9350612f6d8185602086016136ac565b9290920192915050565b6000612f82826135a4565b612f8c81856135a8565b9350612f9c8185602086016136ac565b612fa5816136d8565b9093019392505050565b612def81613674565b612def8161367f565b612def8161368a565b612def81613695565b6000612fe06001836110e1565b7f7200000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006130196020836135a8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613052600c836110e1565b7f52656379636c61626c653a2000000000000000000000000000000000000000008152600c0192915050565b600061308b602a836135a8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006130ea601f836135a8565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613123601f836135a8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516000906101608401906131648582612fb8565b50602083015161317760208601826132df565b50604083015161318a60408601826131fa565b50606083015161319d60c08601826132df565b5060808301516131b060e08601826132df565b5060a08301516131c4610100860182612de6565b5060c08301516131d86101208601826132df565b5060e08301518482036101408601526131f18282612f77565b95945050505050565b8051608083019061320b8482612f0a565b50602082015161321e6020850182612fc1565b5060408201516132316040850182612fc1565b50606082015161204660608501826132df565b805160408301906132558482612de6565b50602082015161204660208501826132df565b805160408301906132798482612f0a565b50602082015161204660208501826132d6565b805160a083019061329d8482613244565b5060208201516132b060408501826132df565b5060408201516132c360608501826132e8565b5060608201516120466080850182612f0a565b612def81613644565b612def81610477565b612def81613665565b612def8161366e565b60006133068284612f30565b50602001919050565b600061331b8284612f3c565b50600401919050565b600061229b8284612f48565b600061333c8286612f48565b91506133488285612f24565b6002820191506131f18284612f48565b60006133648289612f48565b91506133708288612f24565b6002820191506133808287612f48565b915061338c8286612f24565b60028201915061339c8285612f48565b91506133a88284612f13565b506001019695505050505050565b60006133c182612fd3565b915061229b8284612f48565b60006133c182613045565b6020810161047d8284612de6565b606081016133f48286612de6565b6134016020830185612de6565b61274260408301846132df565b6040810161341c8285612de6565b61229b60208301846132df565b6040808252810161343a8185612e63565b905081810360208301526127428184612df5565b6020810161047d8284612f0a565b6020810161047d8284612faf565b604081016134788285612fc1565b81810360208301526127428184612ebc565b6020810161047d8284612fca565b6020808252810161229b8184612f77565b6020808252810161047d8161300c565b6020808252810161047d8161307e565b6020808252810161047d816130dd565b6020808252810161047d81613116565b606081016134f78285613244565b61229b60408301846132df565b6040810161047d8284613268565b6020810161047d82846132df565b6020810161047d82846132f1565b60405181810167ffffffffffffffff8111828210171561354d57600080fd5b604052919050565b600067ffffffffffffffff82111561356c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561358d57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061047d82613659565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b806110e1816136e2565b806110e1816136ec565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061047d826135b1565b600061047d82613630565b600061047d8261363a565b600061047d82610477565b82818337506000910152565b60005b838110156136c75781810151838201526020016136af565b838111156120465750506000910152565b601f01601f191690565b6009811061136557fe5b6002811061136557fe5b6136ff816135b1565b811461136557600080fd5b6136ff816135bc565b6002811061136557600080fd5b6136ff81613644565b6136ff81610477565b6136ff8161366e56fea365627a7a72315820d2d72a42a727b4ce9a52ea865d49d67fa1f9fe5c63c0cd289d1fe9acc77eaa416c6578706572696d656e74616cf564736f6c63430005100040",
|
|
650
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a3b5f6a011610097578063d7a1e94211610071578063d7a1e942146102ff578063dc94897714610307578063dd62ed3e1461031a578063f6caa61914610328576101a3565b8063a3b5f6a0146102c6578063a9059cbb146102d9578063c3a6eb9c146102ec576101a3565b806382bfefc8116100c857806382bfefc8146102a357806395b5b196146102ab57806395d89b41146102be576101a3565b806370a08231146102755780638129fc1c1461028857806381e99ac414610290576101a3565b806323b872dd116101505780634530a2d71161012a5780634530a2d714610252578063454dab231461025a578063516885be14610262576101a3565b806323b872dd146102225780632f13b60c14610235578063313ce5671461023d576101a3565b80631061d1ab116101815780631061d1ab146101f057806315c14a4a1461020557806318160ddd1461021a576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630f23cbaa146101e6575b600080fd5b6101b0610348565b6040516101bd9190613498565b60405180910390f35b6101d96101d4366004612b5b565b61047a565b6040516101bd919061344e565b6101ee610483565b005b6101f861060b565b6040516101bd9190613512565b61020d610611565b6040516101bd919061345c565b6101f8610620565b6101d9610230366004612b0e565b6106bb565b6101d9610b6c565b610245610b74565b6040516101bd9190613520565b61020d610c54565b6101f8610c63565b6101ee610270366004612d75565b610c69565b6101f8610283366004612a98565b610fb2565b6101ee6110e6565b6101f861029e366004612c13565b611368565b61020d61137c565b6101ee6102b9366004612d75565b61138b565b6101b061158a565b6101d96102d4366004612b5b565b6116a5565b6101d96102e7366004612b5b565b6116c5565b6101ee6102fa366004612c6d565b611837565b6101d9611a25565b6101ee610315366004612ca9565b611a2e565b6101f86101d4366004612ad4565b61033b610336366004612c13565b611e73565b6040516101bd9190613504565b60025460405160609160009183916001600160a01b03169061038e907f06fdde03000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526103a891613324565b600060405180830381855afa9150503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b50915091508180156103fb575060008151115b1561043c57808060200190516104149190810190612bde565b60405160200161042491906133cd565b60405160208183030381529060405292505050610477565b6040518060400160405280601a81526020017f52656379636c61626c653a20446f6c6f6d69746520546f6b656e000000000000815250925050505b90565b60005b92915050565b60015433906104df906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b60048054600180546040517f0339a0c40000000000000000000000000000000000000000000000000000000081526105dd946001600160a01b0390921692630339a0c49261052d920161348a565b60006040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105819190810190612b8b565b60008151811061058d57fe5b6020026020010151147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c61626c6500000000000000000000000000000000000061204c565b50600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6001546001600160a01b031681565b600254604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561067e57600080fd5b505afa158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106b69190810190612c8b565b905090565b600154600090339061071a906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6107706001600160a01b03851633147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c696420726563697069656e7400000000000000000000000000000061204c565b6005546107c29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526108b29330936001600160a01b039091169263062bd3e9926108119201613512565b60206040518083038186803b15801561082957600080fd5b505afa15801561083d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108619190810190612ab6565b6001600160a01b0316147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642073746174650000000000000000000000000000000000000061204c565b6001600160a01b038516301415610aaa57600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610a5a936001600160a01b03169263cb04a34c9261091092909101613512565b604080518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061095f9190810190612c4f565b602001516002546040517f70a082310000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909216916001600160a01b03909116906370a08231906109c19030906004016133d8565b60206040518083038186803b1580156109d957600080fd5b505afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a119190810190612c8b565b10157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e73756666696369656e742062616c616e636520666f72206465706f73697461204c565b836001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a9d9190613512565b60405180910390a3610b61565b600254610ac8906001600160a01b031686308663ffffffff61209b16565b600154600480546040517fcb04a34c000000000000000000000000000000000000000000000000000000008152610b15936001600160a01b03169263cb04a34c9261091092909101613512565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b589190613512565b60405180910390a35b506001949350505050565b600054421190565b60025460405160009182916060916001600160a01b031690610bba907f313ce567000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f1981840301815290829052610bd491613324565b600060405180830381855afa9150503d8060008114610c0f576040519150601f19603f3d011682016040523d82523d6000602084013e610c14565b606091505b5091509150818015610c27575060008151115b15610c495780806020019051610c409190810190612d94565b92505050610477565b601292505050610477565b6003546001600160a01b031681565b60045481565b60015474010000000000000000000000000000000000000000900460ff16610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b60405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055600554610d409060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74206465706f736974207768656e2072656379636c65640000000061204c565b610d96610d4b610b6c565b157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b6574206973206578706972656400000000000000000000000000000060005461213c565b600254610db4906001600160a01b031633308463ffffffff61209b16565b604080516001808252818301909252606091816020015b610dd361274a565b815260200190600190039081610dcb5790505090506040518060400160405280306001600160a01b03168152602001610e0c338661219e565b81525081600081518110610e1c57fe5b6020908102919091010152604080516001808252818301909252606091816020015b610e46612761565b815260200190600190039081610e3e5750506040805161010081018252600080825260208083018290528351608081018552600181529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001306001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590610f3b9085908590600401613429565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b6001546000906001600160a01b038381169116141561106b576002546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370a08231906110149030906004016133d8565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c8b565b90506110e1565b6001600160a01b038216600090815260066020908152604080832083805290915281205460ff16156110a15760009150506110e1565b6110c76040518060400160405280856001600160a01b0316815260200183815250611e73565b602001516fffffffffffffffffffffffffffffffff169150505b919050565b6001543390611142906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b6111926004546000147f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f616c726561647920696e697469616c697a65640000000000000000000000000061204c565b6001546040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690638fae3be1906111db9030906004016133d8565b60206040518083038186803b1580156111f357600080fd5b505afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122b9190810190612c8b565b60048181556001546040517f5ac7d17c000000000000000000000000000000000000000000000000000000008152611312936001600160a01b0390921692635ac7d17c9261127b92909101613512565b60206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112cb9190810190612bc0565b7f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6d61726b65742063616e6e6f7420616c6c6f7720626f72726f77696e6700000061204c565b6113654260005410157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f696e76616c69642065787069726174696f6e2074696d657374616d700000000060005461213c565b50565b600061047d8260000151836020015161219e565b6002546001600160a01b031681565b60015474010000000000000000000000000000000000000000900460ff166113df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134c9565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556005546114599060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207769746864726177207768656e2072656379636c656400000061204c565b604080516001808252818301909252606091816020015b61147861274a565b8152602001906001900390816114705790505090506040518060400160405280306001600160a01b031681526020016114b1338661219e565b815250816000815181106114c157fe5b6020908102919091010152604080516001808252818301909252606091816020015b6114eb612761565b8152602001906001900390816114e35750506040805161010081018252600181526000602080830182905283516080810185528281529495509193928401929182019081526020016000815260200186815250815260200160045481526020016000198152602001336001600160a01b0316815260200160001981526020016040518060200160405280600081525081525081600081518110610ee557fe5b60025460405160609160009183916001600160a01b0316906115d0907f95d89b41000000000000000000000000000000000000000000000000000000009060200161330f565b60408051601f19818403018152908290526115ea91613324565b600060405180830381855afa9150503d8060008114611625576040519150601f19603f3d011682016040523d82523d6000602084013e61162a565b606091505b509150915081801561163d575060008151115b1561166657808060200190516116569190810190612bde565b60405160200161042491906133b6565b6040518060400160405280600b81526020017f72444f4c4f5f544f4b454e00000000000000000000000000000000000000000081525092505050610477565b600660209081526000928352604080842090915290825290205460ff1681565b6001546000903390611724906001600160a01b031682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084611f6e565b600154600480546040517f062bd3e90000000000000000000000000000000000000000000000000000000081526117739330936001600160a01b039091169263062bd3e9926108119201613512565b6005546117c59060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616e73666572207768696c652072656379636c6564000061204c565b6002546117e2906001600160a01b0316858563ffffffff6121d216565b836001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516118259190613512565b60405180910390a35060019392505050565b6005546118889060ff167f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f6e6f742072656379636c6564207965740000000000000000000000000000000061204c565b3360009081526006602090815260408083208484529091529020546118f29060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f7573657220616c7265616479207769746864726577000000000000000000000061204c565b33600081815260066020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554825180840190935230835261136593926001600160a01b03919091169163c8e188269190810161196a858861219e565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526119a79392016134e9565b604080518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f69190810190612c31565b602001516002546001600160a01b031691906fffffffffffffffffffffffffffffffff1663ffffffff6121d216565b60055460ff1681565b600554611a809060ff16157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f63616e6e6f74207472616465207768656e2072656379636c656400000000000061204c565b611a8b610d4b610b6c565b611ad94284117f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f206c6f77000000008661213c565b611b2a6000548411157f52656379636c61626c65546f6b656e50726f78790000000000000000000000007f65787069726174696f6e2074696d657374616d7020746f6f20686967680000008661213c565b600480546001546040517f8fae3be100000000000000000000000000000000000000000000000000000000815291926000926001600160a01b0390921691638fae3be191611b7a918c91016133d8565b60206040518083038186803b158015611b9257600080fd5b505afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bca9190810190612c8b565b60408051600180825281830190925291925060609190816020015b611bed61274a565b815260200190600190039081611be55790505090506040518060400160405280306001600160a01b03168152602001611c26338e61219e565b81525081600081518110611c3657fe5b60209081029190910101526040805160028082526060828101909352816020015b611c5f612761565b815260200190600190039081611c5757505060408051610100810182526004815260006020820152919250810187611c97578c611c99565b8a5b815260200187611ca95785611cab565b845b815260200187611cbb5784611cbd565b855b8152602001896001600160a01b03168152602001600081526020018681525081600081518110611ce957fe5b6020908102919091010152604080516101008101909152806008815260200160008152602001604051806080016040528060001515815260200160006001811115611d3057fe5b815260200160008152602001600081525081526020016000815260200160008152602001600360009054906101000a90046001600160a01b03166001600160a01b03168152602001600081526020016000611dad85600081518110611d9157fe5b6020026020010151878b611da6576000611da8565b8c5b61220d565b604051602001611dbe92919061346a565b60405160208183030381529060405281525081600181518110611ddd57fe5b60209081029190910101526001546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a4590611e339085908590600401613429565b600060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050505050505050505050505050565b611e7b61274a565b81516001600160a01b0316600090815260066020908152604080832082860151845290915290205460ff1615611eb3576110646122a2565b600154604080518082019091523081526001600160a01b039091169063c8e188269060208101611ee286611368565b9052600480546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152611f1f9392016134e9565b604080518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110649190810190612c31565b8361204657611f7c836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000611fa6846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd08561235e565b6040516120069594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613358565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610cbd91600401613498565b50505050565b826120965761205a826122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612084836122c2565b60405160200161200693929190613330565b505050565b6040516120469085907f23b872dd00000000000000000000000000000000000000000000000000000000906120d8908790879087906024016133e6565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124c8565b836120465761214a836122c2565b7f3a20000000000000000000000000000000000000000000000000000000000000612174846122c2565b7f203c000000000000000000000000000000000000000000000000000000000000611fd0856125fb565b600082826040516020016121b392919061340e565b60408051601f1981840301815291905280516020909101209392505050565b6040516120969084907fa9059cbb00000000000000000000000000000000000000000000000000000000906120d8908690869060240161340e565b604080516001808252818301909252606091829190816020015b61222f6127b3565b81526020019060019003908161222757905050905060405180608001604052808681526020018581526020018460001461226b5742850361226e565b60005b63ffffffff168152602001600115158152508160008151811061228d57fe5b602090810291909101015290505b9392505050565b6122aa61274a565b50604080518082019091526000808252602082015290565b606080826040516020016122d691906132fa565b60408051601f19818403018152919052905060205b80156123435781516000199091019082908290811061230657fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561233e57600101815290506110e1565b6122eb565b5060408051600080825260208201909252905b509392505050565b60408051602a80825260608281019093526001600160a01b038416918391602082018180388339019050509050603060f81b8160008151811061239d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b816001815181106123de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156123565760028102612429600f85166126ec565b83826029038151811061243857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c935061247a600f85166126ec565b83826028038151811061248957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101612410565b6124da826001600160a01b031661270e565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134d9565b60006060836001600160a01b03168360405161252c9190613324565b6000604051808303816000865af19150503d8060008114612569576040519150601f19603f3d011682016040523d82523d6000602084013e61256e565b606091505b5091509150816125aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134a9565b80511561204657808060200190516125c59190810190612bc0565b612046576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906134b9565b60608161263c575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526110e1565b8160005b811561265457600101600a82049150612640565b6060816040519080825280601f01601f191660200182016040528015612681576020820181803883390190505b508593509050815b80156126e35760001901600a840660300160f81b8282815181106126a957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612689565b50949350505050565b6000600a82101561270457506030810160f81b6110e1565b5060570160f81b90565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061274257508115155b949350505050565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201529081016127816127e1565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b60405180608001604052806127c661274a565b81526000602082018190526040820181905260609091015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b803561047d816136f6565b805161047d816136f6565b600082601f83011261283157600080fd5b815161284461283f82613555565b61352e565b9150818183526020840193506020810190508385602084028201111561286957600080fd5b60005b83811015612895578161287f8882612a82565b845250602092830192919091019060010161286c565b5050505092915050565b803561047d8161370a565b805161047d8161370a565b600082601f8301126128c657600080fd5b81356128d461283f82613576565b915080825260208301602083018583830111156128f057600080fd5b6128fb8382846136a0565b50505092915050565b803561047d81613713565b600082601f83011261292057600080fd5b815161292e61283f82613576565b9150808252602083016020830185838301111561294a57600080fd5b6128fb8382846136ac565b60006080828403121561296757600080fd5b612971608061352e565b9050600061297f848461289f565b825250602061299084848301612904565b60208301525060406129a484828501612904565b60408301525060606129b884828501612a77565b60608301525092915050565b6000604082840312156129d657600080fd5b6129e0604061352e565b905060006129ee848461280a565b82525060206129ff84848301612a77565b60208301525092915050565b600060408284031215612a1d57600080fd5b612a27604061352e565b90506000612a3584846128aa565b82525060206129ff84848301612a6c565b600060408284031215612a5857600080fd5b612a62604061352e565b90506000612a3584845b805161047d81613720565b803561047d81613729565b805161047d81613729565b805161047d81613732565b600060208284031215612aaa57600080fd5b6000612742848461280a565b600060208284031215612ac857600080fd5b60006127428484612815565b60008060408385031215612ae757600080fd5b6000612af3858561280a565b9250506020612b048582860161280a565b9150509250929050565b600080600060608486031215612b2357600080fd5b6000612b2f868661280a565b9350506020612b408682870161280a565b9250506040612b5186828701612a77565b9150509250925092565b60008060408385031215612b6e57600080fd5b6000612b7a858561280a565b9250506020612b0485828601612a77565b600060208284031215612b9d57600080fd5b815167ffffffffffffffff811115612bb457600080fd5b61274284828501612820565b600060208284031215612bd257600080fd5b600061274284846128aa565b600060208284031215612bf057600080fd5b815167ffffffffffffffff811115612c0757600080fd5b6127428482850161290f565b600060408284031215612c2557600080fd5b600061274284846129c4565b600060408284031215612c4357600080fd5b60006127428484612a0b565b600060408284031215612c6157600080fd5b60006127428484612a46565b600060208284031215612c7f57600080fd5b60006127428484612a77565b600060208284031215612c9d57600080fd5b60006127428484612a82565b6000806000806000806000806101c0898b031215612cc657600080fd5b6000612cd28b8b612a77565b9850506020612ce38b828c01612955565b97505060a0612cf48b828c0161280a565b96505060c0612d058b828c01612955565b955050610140612d178b828c0161280a565b945050610160612d298b828c01612a77565b935050610180612d3b8b828c0161289f565b9250506101a089013567ffffffffffffffff811115612d5957600080fd5b612d658b828c016128b5565b9150509295985092959890939650565b60008060408385031215612d8857600080fd5b6000612b7a8585612a77565b600060208284031215612da657600080fd5b60006127428484612a8d565b600061229b838361314f565b6000612dca8383613244565b505060400190565b6000612dde838361328c565b505060a00190565b612def816135b1565b82525050565b6000612e00826135a4565b612e0a81856135a8565b935083602082028501612e1c8561359e565b8060005b85811015612e565784840389528151612e398582612db2565b9450612e448361359e565b60209a909a0199925050600101612e20565b5091979650505050505050565b6000612e6e826135a4565b612e7881856135a8565b9350612e838361359e565b8060005b83811015612eb1578151612e9b8882612dbe565b9750612ea68361359e565b925050600101612e87565b509495945050505050565b6000612ec7826135a4565b612ed181856135a8565b9350612edc8361359e565b8060005b83811015612eb1578151612ef48882612dd2565b9750612eff8361359e565b925050600101612ee0565b612def816135bc565b612def612f1f826135c1565b610477565b612def612f1f826135e6565b612def612f1f82610477565b612def612f1f8261360b565b6000612f53826135a4565b612f5d81856110e1565b9350612f6d8185602086016136ac565b9290920192915050565b6000612f82826135a4565b612f8c81856135a8565b9350612f9c8185602086016136ac565b612fa5816136d8565b9093019392505050565b612def81613674565b612def8161367f565b612def8161368a565b612def81613695565b6000612fe06001836110e1565b7f7200000000000000000000000000000000000000000000000000000000000000815260010192915050565b60006130196020836135a8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000613052600c836110e1565b7f52656379636c61626c653a2000000000000000000000000000000000000000008152600c0192915050565b600061308b602a836135a8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006130ea601f836135a8565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613123601f836135a8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516000906101608401906131648582612fb8565b50602083015161317760208601826132df565b50604083015161318a60408601826131fa565b50606083015161319d60c08601826132df565b5060808301516131b060e08601826132df565b5060a08301516131c4610100860182612de6565b5060c08301516131d86101208601826132df565b5060e08301518482036101408601526131f18282612f77565b95945050505050565b8051608083019061320b8482612f0a565b50602082015161321e6020850182612fc1565b5060408201516132316040850182612fc1565b50606082015161204660608501826132df565b805160408301906132558482612de6565b50602082015161204660208501826132df565b805160408301906132798482612f0a565b50602082015161204660208501826132d6565b805160a083019061329d8482613244565b5060208201516132b060408501826132df565b5060408201516132c360608501826132e8565b5060608201516120466080850182612f0a565b612def81613644565b612def81610477565b612def81613665565b612def8161366e565b60006133068284612f30565b50602001919050565b600061331b8284612f3c565b50600401919050565b600061229b8284612f48565b600061333c8286612f48565b91506133488285612f24565b6002820191506131f18284612f48565b60006133648289612f48565b91506133708288612f24565b6002820191506133808287612f48565b915061338c8286612f24565b60028201915061339c8285612f48565b91506133a88284612f13565b506001019695505050505050565b60006133c182612fd3565b915061229b8284612f48565b60006133c182613045565b6020810161047d8284612de6565b606081016133f48286612de6565b6134016020830185612de6565b61274260408301846132df565b6040810161341c8285612de6565b61229b60208301846132df565b6040808252810161343a8185612e63565b905081810360208301526127428184612df5565b6020810161047d8284612f0a565b6020810161047d8284612faf565b604081016134788285612fc1565b81810360208301526127428184612ebc565b6020810161047d8284612fca565b6020808252810161229b8184612f77565b6020808252810161047d8161300c565b6020808252810161047d8161307e565b6020808252810161047d816130dd565b6020808252810161047d81613116565b606081016134f78285613244565b61229b60408301846132df565b6040810161047d8284613268565b6020810161047d82846132df565b6020810161047d82846132f1565b60405181810167ffffffffffffffff8111828210171561354d57600080fd5b604052919050565b600067ffffffffffffffff82111561356c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561358d57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061047d82613659565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b806110e1816136e2565b806110e1816136ec565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b600061047d826135b1565b600061047d82613630565b600061047d8261363a565b600061047d82610477565b82818337506000910152565b60005b838110156136c75781810151838201526020016136af565b838111156120465750506000910152565b601f01601f191690565b6009811061136557fe5b6002811061136557fe5b6136ff816135b1565b811461136557600080fd5b6136ff816135bc565b6002811061136557600080fd5b6136ff81613644565b6136ff81610477565b6136ff8161366e56fea365627a7a72315820d2d72a42a727b4ce9a52ea865d49d67fa1f9fe5c63c0cd289d1fe9acc77eaa416c6578706572696d656e74616cf564736f6c63430005100040",
|
|
651
651
|
"sourceMap": "4418:13825:32:-;;;4987:356;8:9:-1;5:2;;;30:1;27;20:12;5:2;4987:356:32;;;;;;;;;;;;;;;;;;;;;1293:15:6;:49;;-1:-1:-1;;;;;;;;;1293:49:6;;;-1:-1:-1;;;;;1293:49:6;;;;-1:-1:-1;;;;1421:18:129;;;;;5186:5:32;:29;;;;;;;;;;;;;;5225:6;:24;;;;;;;;;;;;-1:-1:-1;5259:49:32;5318:10;:18;;-1:-1:-1;;5318:18:32;;;4418:13825;;5:134:-1;83:13;;101:33;83:13;101:33;;;68:71;;;;;146:134;224:13;;242:33;224:13;242:33;;287:672;;;;;453:3;441:9;432:7;428:23;424:33;421:2;;;470:1;467;460:12;421:2;505:1;522:64;578:7;558:9;522:64;;;512:74;;484:108;623:2;641:64;697:7;688:6;677:9;673:22;641:64;;;631:74;;602:109;742:2;760:64;816:7;807:6;796:9;792:22;760:64;;;750:74;;721:109;861:2;879:64;935:7;926:6;915:9;911:22;879:64;;;869:74;;840:109;415:544;;;;;;;;966:91;;-1:-1;;;;;1126:54;;1028:24;1109:76;1192:72;1254:5;1237:27;1271:117;1340:24;1358:5;1340:24;;;1333:5;1330:35;1320:2;;1379:1;1376;1369:12;1320:2;1314:74;;1395:117;1464:24;1482:5;1464:24;;1438:74;4418:13825:32;;;;;;",
|
|
652
652
|
"deployedSourceMap": "4418:13825:32:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4418:13825:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12410:380;;;:::i;:::-;;;;;;;;;;;;;;;;14864:86;;;;;;;;;:::i;:::-;;;;;;;;6131:243;;;:::i;:::-;;1247:36:64;;;:::i;:::-;;;;;;;;1122:38:6;;;:::i;:::-;;;;;;;;13477:96:32;;;:::i;14956:2519::-;;;;;;;;;:::i;3986:114:64:-;;;:::i;13160:311:32:-;;;:::i;:::-;;;;;;;;4753:21;;;:::i;4780:24::-;;;:::i;7004:1203::-;;;;;;;;;:::i;13579:544::-;;;;;;;;;:::i;5400:725::-;;;:::i;6380:171::-;;;;;;;;;:::i;4720:27::-;;;:::i;8213:989::-;;;;;;;;;:::i;12796:358::-;;;:::i;4838:96::-;;;;;;;;;:::i;14129:631::-;;;;;;;;;:::i;9208:685::-;;;;;;;;;:::i;4810:22::-;;;:::i;9899:2455::-;;;;;;;;;:::i;14766:92::-;;;;;;;6557:441;;;;;;;;;:::i;:::-;;;;;;;;12410:380;12518:5;;12536:37;;12447:13;;12473:14;;12447:13;;-1:-1:-1;;;;;12518:5:32;;12536:37;;12553:19;;12536:37;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;12536:37:32;;;;12510:64;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12472:102:32;;;;12588:9;:28;;;;;12615:1;12601:4;:11;:15;12588:28;12584:200;;;12690:4;12679:26;;;;;;;;;;;;;;12646:60;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12646:60:32;;;12632:75;;;;;;12584:200;12738:35;;;;;;;;;;;;;;;;;;;;;12410:380;;:::o;14864:86::-;14915:4;14864:86;;;;;:::o;6131:243::-;1493:15:6;;6178:10:32;;1451:151:6;;-1:-1:-1;;;;;1493:15:6;1477:32;;1523:4;1451:151;6178:10:32;1451:12:6;:151::i;:::-;6272:9:32;;;6226:15;;;:39;;;;;6200:139;;-1:-1:-1;;;;;6226:15:32;;;;:36;;:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6226:39:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6226:39:32;;;;;;39:16:-1;36:1;17:17;2:54;101:4;6226:39:32;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;6226:39:32;;;;;;;;;6266:1;6226:42;;;;;;;;;;;;;;:55;6295:4;6200:139;:12;:139::i;:::-;-1:-1:-1;6350:10:32;:17;;;;6363:4;6350:17;;;6131:243::o;1247:36:64:-;;;;:::o;1122:38:6:-;;;-1:-1:-1;;;;;1122:38:6;;:::o;13477:96:32:-;13547:5;;:19;;;;;;;;13521:7;;-1:-1:-1;;;;;13547:5:32;;:17;;:19;;;;;;;;;;;;;;:5;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;13547:19:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13547:19:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13547:19:32;;;;;;;;;13540:26;;13477:96;:::o;14956:2519::-;1493:15:6;;15097:4:32;;15076:10;;1451:151:6;;-1:-1:-1;;;;;1493:15:6;1477:32;;1523:4;1451:151;15076:10:32;1451:12:6;:151::i;:::-;15182:145:32;-1:-1:-1;;;;;15208:25:32;;15222:10;15208:25;15280:4;15182:145;:12;:145::i;:::-;15364:10;;15337:111;;15364:10;;15363:11;15388:4;15337:111;:12;:111::i;:::-;15601:15;;15639:9;;;15601:48;;;;;15575:148;;15661:4;;-1:-1:-1;;;;;15601:15:32;;;;:37;;:48;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15601:48:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15601:48:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15601:48:32;;;;;;;;;-1:-1:-1;;;;;15601:65:32;;15680:4;15575:148;:12;:148::i;:::-;-1:-1:-1;;;;;15738:21:32;;15754:4;15738:21;15734:1714;;;16272:15;;16306:9;;;16272:44;;;;;16208:203;;-1:-1:-1;;;;;16272:15:32;;:33;;:44;;16306:9;;16272:44;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16272:44:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16272:44:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16272:44:32;;;;;;;;;:51;;;16238:5;;:30;;;;;:85;;;;;-1:-1:-1;;;;;16238:5:32;;;;:15;;:30;;16262:4;;16238:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16238:30:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16238:30:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16238:30:32;;;;;;;;;:85;;16341:4;16208:203;:12;:203::i;:::-;16454:2;-1:-1:-1;;;;;16430:35:32;16447:4;-1:-1:-1;;;;;16430:35:32;;16458:6;16430:35;;;;;;;;;;;;;;;15734:1714;;;16594:5;;:51;;-1:-1:-1;;;;;16594:5:32;16617:4;16631;16638:6;16594:51;:22;:51;:::i;:::-;17071:15;;17105:9;;;17071:44;;;;;17007:203;;-1:-1:-1;;;;;17071:15:32;;:33;;:44;;17105:9;;17071:44;;;17007:203;17426:2;-1:-1:-1;;;;;17411:26:32;17420:4;-1:-1:-1;;;;;17411:26:32;;17430:6;17411:26;;;;;;;;;;;;;;;15734:1714;-1:-1:-1;17464:4:32;;14956:2519;-1:-1:-1;;;;14956:2519:32:o;3986:114:64:-;4028:4;4051:24;4078:15;-1:-1:-1;3986:114:64;:::o;13160:311:32:-;13264:5;;13282:41;;13201:5;;;;13235:17;;-1:-1:-1;;;;;13264:5:32;;13282:41;;13299:23;;13282:41;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;13282:41:32;;;;13256:68;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13218:106:32;;;;13338:9;:28;;;;;13365:1;13351:4;:11;:15;13338:28;13334:131;;;13400:4;13389:25;;;;;;;;;;;;;;13382:32;;;;;;13334:131;13452:2;13445:9;;;;;;4753:21;;;-1:-1:-1;;;;;4753:21:32;;:::o;4780:24::-;;;;:::o;7004:1203::-;1934:11:129;;;;;;;1926:55;;;;;;;;;;;;;;;;;;;;;;2056:11;:19;;;;;;7129:10:32;;7102:109;;2056:19:129;7129:10:32;7128:11;7153:4;7102:109;:12;:109::i;:::-;7221:137;7248:11;:9;:11::i;:::-;7247:12;7273:4;7221:137;7324:24;;7221:12;:137::i;:::-;7369:5;;:57;;-1:-1:-1;;;;;7369:5:32;7392:10;7412:4;7419:6;7369:57;:22;:57;:::i;:::-;7470:21;;;7489:1;7470:21;;;;;;;;;7437:30;;7470:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7437:54;;7515:73;;;;;;;;7536:4;-1:-1:-1;;;;;7515:73:32;;;;;7543:44;7561:10;7573:13;7543:17;:44::i;:::-;7515:73;;;7501:8;7510:1;7501:11;;;;;;;;;;;;;;;;;:87;7637:27;;;7662:1;7637:27;;;;;;;;;7599:35;;7637:27;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;7687:460:32;;;;;;;;-1:-1:-1;7687:460:32;;;;;;;;;;7859:88;;;;;;;7877:4;7859:88;;7599:65;;-1:-1:-1;7687:460:32;;;;;;7859:88;;;;;;;;7912:26;7859:88;;;;7940:6;7859:88;;;7687:460;;;;7978:9;;7687:460;;;;-1:-1:-1;;7687:460:32;;;;8064:4;-1:-1:-1;;;;;7687:460:32;;;;;-1:-1:-1;;7687:460:32;;;;8127:9;;;;;;;;;;;;7687:460;;;7674:7;7682:1;7674:10;;;;;;;;;;;;;;;;;:473;8158:15;;:42;;;;;-1:-1:-1;;;;;8158:15:32;;;;:23;;:42;;8182:8;;8192:7;;8158:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8158:42:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2244:4:129;2230:18;;;;;;;;-1:-1:-1;;;;;;7004:1203:32:o;13579:544::-;13678:15;;13636:7;;-1:-1:-1;;;;;13659:35:32;;;13678:15;;13659:35;13655:219;;;13833:5;;:30;;;;;-1:-1:-1;;;;;13833:5:32;;;;:15;;:30;;13857:4;;13833:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13833:30:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13833:30:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13833:30:32;;;;;;;;;13826:37;;;;13655:219;-1:-1:-1;;;;;13920:52:32;;13884:18;13920:52;;;:43;:52;;;;;;;;:67;;;;;;;;;;;13916:201;;;14010:1;14003:8;;;;;13916:201;14049:51;14063:36;;;;;;;;14076:7;-1:-1:-1;;;;;14063:36:32;;;;;14085:13;14063:36;;;14049:13;:51::i;:::-;:57;;;14042:64;;;;;13579:544;;;;:::o;5400:725::-;1493:15:6;;5450:10:32;;1451:151:6;;-1:-1:-1;;;;;1493:15:6;1477:32;;1523:4;1451:151;5450:10:32;1451:12:6;:151::i;:::-;5472:103:32;5498:9;;5511:1;5498:14;5526:4;5472:103;:12;:103::i;:::-;5598:15;;:56;;;;;-1:-1:-1;;;;;5598:15:32;;;;:41;;:56;;5648:4;;5598:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5598:56:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5598:56:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5598:56:32;;;;;;;;;5586:9;:68;;;5691:15;;:45;;;;;5665:144;;-1:-1:-1;;;;;5691:15:32;;;;:34;;:45;;5586:68;;5691:45;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5691:45:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5691:45:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5691:45:32;;;;;;;;;5750:4;5665:144;:12;:144::i;:::-;5939:179;5993:15;5965:24;;:43;;6022:4;5939:179;6084:24;;5939:12;:179::i;:::-;5400:725;:::o;6380:171::-;6470:7;6496:48;6514:7;:13;;;6529:7;:14;;;6496:17;:48::i;4720:27::-;;;-1:-1:-1;;;;;4720:27:32;;:::o;8213:989::-;1934:11:129;;;;;;;1926:55;;;;;;;;;;;;;;2056:11;:19;;;;;;8339:10:32;;8312:110;;2056:19:129;8339:10:32;8338:11;8363:4;8312:110;:12;:110::i;:::-;8466:21;;;8485:1;8466:21;;;;;;;;;8433:30;;8466:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8433:54;;8511:73;;;;;;;;8532:4;-1:-1:-1;;;;;8511:73:32;;;;;8539:44;8557:10;8569:13;8539:17;:44::i;:::-;8511:73;;;8497:8;8506:1;8497:11;;;;;;;;;;;;;;;;;:87;8633:27;;;8658:1;8633:27;;;;;;;;;8595:35;;8633:27;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;8683:459:32;;;;;;;;8728:27;8683:459;;-1:-1:-1;8683:459:32;;;;;;;8856:89;;;;;;;;;;8595:65;;-1:-1:-1;8683:459:32;;;;;;8856:89;;;;;;;;8910:26;8856:89;;;;8938:6;8856:89;;;8683:459;;;;8976:9;;8683:459;;;;-1:-1:-1;;8683:459:32;;;;9054:10;-1:-1:-1;;;;;8683:459:32;;;;;-1:-1:-1;;8683:459:32;;;;9122:9;;;;;;;;;;;;8683:459;;;8670:7;8678:1;8670:10;;;;;;;12796:358;12906:5;;12924:39;;12835:13;;12861:14;;12835:13;;-1:-1:-1;;;;;12906:5:32;;12924:39;;12941:21;;12924:39;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;12924:39:32;;;;12898:66;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12860:104:32;;;;12978:9;:28;;;;;13005:1;12991:4;:11;:15;12978:28;12974:174;;;13069:4;13058:26;;;;;;;;;;;;;;13036:49;;;;;;;;;12974:174;13117:20;;;;;;;;;;;;;;;;;;;;;;;4838:96;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14129:631::-;1493:15:6;;14229:4:32;;14208:10;;1451:151:6;;-1:-1:-1;;;;;1493:15:6;1477:32;;1523:4;1451:151;14208:10:32;1451:12:6;:151::i;:::-;14387:15:32;;14425:9;;;14387:48;;;;;14361:148;;14447:4;;-1:-1:-1;;;;;14387:15:32;;;;:37;;:48;;;;;14361:148;14546:10;;14519:111;;14546:10;;14545:11;14570:4;14519:111;:12;:111::i;:::-;14641:5;;:37;;-1:-1:-1;;;;;14641:5:32;14660:9;14671:6;14641:37;:18;:37;:::i;:::-;14714:9;-1:-1:-1;;;;;14693:39:32;14702:10;-1:-1:-1;;;;;14693:39:32;;14725:6;14693:39;;;;;;;;;;;;;;;-1:-1:-1;14749:4:32;;14129:631;-1:-1:-1;;;14129:631:32:o;9208:685::-;9301:10;;9275:96;;9301:10;;9325:4;9275:96;:12;:96::i;:::-;9452:10;9408:55;;;;:43;:55;;;;;;;;:70;;;;;;;;;9381:162;;9408:70;;9407:71;9492:4;9381:162;:12;:162::i;:::-;9597:10;9553:55;;;;:43;:55;;;;;;;;:70;;;;;;;;;:77;;;;9626:4;9553:77;;;;;;9696:15;9756:73;;;;;;;;9777:4;9756:73;;9640:246;;9597:10;-1:-1:-1;;;;;9696:15:32;;;;;:42;;9756:73;;;9784:44;9597:10;9609:13;9784:17;:44::i;:::-;9756:73;;9847:9;;;9696:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9696:174:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9696:174:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9696:174:32;;;;;;;;;:180;;;9640:5;;-1:-1:-1;;;;;9640:5:32;;:246;;;;:18;:246;:::i;4810:22::-;;;;;;:::o;9899:2455::-;10280:10;;10253:107;;10280:10;;10279:11;10304:4;10253:107;:12;:107::i;:::-;10370:137;10397:11;:9;:11::i;10370:137::-;10517:168;10565:15;10543:19;:37;10594:4;10517:168;10656:19;10517:12;:168::i;:::-;10695:179;10744:24;;10721:19;:47;;10782:4;10695:179;10845:19;10695:12;:179::i;:::-;10901:9;;;10942:15;;:54;;;;;10901:9;;10885:13;;-1:-1:-1;;;;;10942:15:32;;;;:41;;:54;;10984:11;;10942:54;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10942:54:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10942:54:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10942:54:32;;;;;;;;;11040:21;;;11059:1;11040:21;;;;;;;;;10920:76;;-1:-1:-1;11007:30:32;;11040:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11007:54;;11085:73;;;;;;;;11106:4;-1:-1:-1;;;;;11085:73:32;;;;;11113:44;11131:10;11143:13;11113:17;:44::i;:::-;11085:73;;;11071:8;11080:1;11071:11;;;;;;;;;;;;;;;;;:87;11207:27;;;11232:1;11207:27;;;11169:35;11207:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;11257:398:32;;;;;;;;11302:23;11257:398;;-1:-1:-1;11257:398:32;;;;11169:65;;-1:-1:-1;11257:398:32;;11373:6;:36;;11397:12;11373:36;;;11382:12;11373:36;11257:398;;;;11440:6;:34;;11466:8;11440:34;;;11449:14;11440:34;11257:398;;;;11507:6;:34;;11527:14;11507:34;;;11516:8;11507:34;11257:398;;;;11569:15;-1:-1:-1;;;;;11257:398:32;;;;;11614:1;11257:398;;;;11635:9;11257:398;;;11244:7;11252:1;11244:10;;;;;;;;;;;;;;;;;:411;11679:615;;;;;;;;;;11725:23;11679:615;;;;11774:1;11679:615;;;;11851:84;;;;;;;;11869:5;11851:84;;;;;;11876:27;11851:84;;;;;;;;;;;;11905:26;11851:84;;;;11933:1;11851:84;;;11679:615;;;;11967:1;11679:615;;;;12002:1;11679:615;;;;12040:6;;;;;;;;;-1:-1:-1;;;;;12040:6:32;-1:-1:-1;;;;;11679:615:32;;;;;12078:1;11679:615;;;;12132:34;12188:77;12203:8;12212:1;12203:11;;;;;;;;;;;;;;12216:14;12232:6;:32;;12263:1;12232:32;;;12241:19;12232:32;12188:14;:77::i;:::-;12100:183;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12100:183:32;;;11679:615;;;11666:7;11674:1;11666:10;;;;;;;;;;;;;;;;;:628;12305:15;;:42;;;;;-1:-1:-1;;;;;12305:15:32;;;;:23;;:42;;12329:8;;12339:7;;12305:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12305:42:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12305:42:32;;;;9899:2455;;;;;;;;;;;;:::o;6557:441::-;6644:16;;:::i;:::-;6720:13;;-1:-1:-1;;;;;6676:58:32;;;;;:43;:58;;;;;;;;6735:14;;;;6676:74;;;;;;;;;;6672:320;;;6773:15;:13;:15::i;6672:320::-;6826:15;;6886:54;;;;;;;;;6907:4;6886:54;;-1:-1:-1;;;;;6826:15:32;;;;:42;;6886:54;;;6914:25;6931:7;6914:16;:25::i;:::-;6886:54;;6958:9;;;6826:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6826:155:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6826:155:32;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6826:155:32;;;;;;;;2962:561:77;3122:4;3117:400;;3236:24;3255:4;3236:18;:24::i;:::-;3286:5;3317:26;3336:6;3317:18;:26::i;:::-;3369:6;3401:19;3411:8;3401:9;:19::i;:::-;3194:280;;;;;;;;;3446:6;;3194:280;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;3194:280:77;;;;3142:364;;;;;;;;;3117:400;2962:561;;;;:::o;1294:426::-;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;1423:291;1294:426;;;:::o;842:202:127:-;968:68;;942:95;;961:5;;991:27;;968:68;;1020:4;;1026:2;;1030:5;;968:68;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;968:68:127;;;49:4:-1;25:18;;61:17;;968:68:127;182:15:-1;968:68:127;;;;179:29:-1;;;;160:49;;;942:18:127;:95::i;1726:561:77:-;1886:4;1881:400;;2000:24;2019:4;2000:18;:24::i;:::-;2050:5;2081:26;2100:6;2081:18;:26::i;:::-;2133:6;2165:19;2175:8;2165:9;:19::i;17533:152:32:-;17610:7;17662:5;17669:6;17651:25;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;17651:25:32;;;17641:36;;49:4:-1;17641:36:32;;;;;17533:152;-1:-1:-1;;;17533:152:32:o;662:174:127:-;770:58;;744:85;;763:5;;793:23;;770:58;;818:2;;822:5;;770:58;;;;17691:549:32;17921:29;;;17948:1;17921:29;;;;;;;;;17837;;;;17921;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17878:72;;17976:230;;;;;;;;18021:7;17976:230;;;;18053:8;17976:230;;;;18087:19;18110:1;18087:24;:76;;18147:15;18125:19;:37;18087:76;;;18114:1;18087:76;17976:230;;;;;;18191:4;17976:230;;;;;17960:10;17971:1;17960:13;;;;;;;;;;;;;;;;;:246;18223:10;-1:-1:-1;17691:549:32;;;;;;:::o;1897:168:82:-;1963:10;;:::i;:::-;-1:-1:-1;1996:62:82;;;;;;;;;-1:-1:-1;1996:62:82;;;;;;;1897:168;:::o;6359:966:77:-;6462:12;6537:19;6576:5;6559:23;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;6559:23:77;;;;-1:-1:-1;49:4;6688:571:77;6709:5;;6688:571;;6960:9;;-1:-1:-1;;6862:3:77;;;;6960:6;;6862:3;;6960:9;;;;;;;;;;;;:14;6956:293;;7015:1;7011:5;7141:22;;7148:6;-1:-1:-1;7221:13:77;;6956:293;6688:571;;;-1:-1:-1;7306:12:77;;;7316:1;7306:12;;;;;;;;;;;-1:-1:-1;7299:19:77;6359:966;-1:-1:-1;;;6359:966:77:o;8249:962::-;8521:13;;;8531:2;8521:13;;;8343:12;8521:13;;;;;;-1:-1:-1;;;;;8383:14:77;;;8343:12;;8521:13;;;21:6:-1;;104:10;8521:13:77;87:34:-1;135:17;;-1:-1;8521:13:77;8499:35;;902:2;8598:23;;8586:6;8593:1;8586:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;8643:27;;8631:6;8638:1;8631:9;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1;8784:9:77;8779:402;8803:2;8799:1;:6;8779:402;;;8892:1;8888:5;;8985:23;1232:3;8990:17;;8985:4;:23::i;:::-;8964:6;8976:5;8971:2;:10;8964:18;;;;;;;;;;;:44;;;;;;;;;;;9031:1;9026;:6;;9022:10;;9123:23;1232:3;9128:1;:17;9123:4;:23::i;:::-;9102:6;9114:5;9109:2;:10;9102:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;9169:1:77;9164:6;;;;;8807:3;;8779:402;;2666:1095:127;3261:27;3269:5;-1:-1:-1;;;;;3261:25:127;;:27::i;:::-;3253:71;;;;;;;;;;;;;;3395:12;3409:23;3444:5;-1:-1:-1;;;;;3436:19:127;3456:4;3436:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3394:67:127;;;;3479:7;3471:52;;;;;;;;;;;;;;3538:17;;:21;3534:221;;3678:10;3667:30;;;;;;;;;;;;;;3659:85;;;;;;;;;;;;;7331:912:77;7425:12;7457:10;7453:51;;-1:-1:-1;7483:10:77;;;;;;;;;;;;;;;;;;;7453:51;7565:5;7553:9;7604:69;7611:6;;7604:69;;7633:8;;7660:2;7655:7;;;;7604:69;;;7714:17;7744:6;7734:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;7734:17:77;87:34:-1;135:17;;-1:-1;7734:17:77;-1:-1:-1;7843:5:77;;-1:-1:-1;7714:37:77;-1:-1:-1;7875:6:77;7858:357;7883:5;;7858:357;;-1:-1:-1;;8036:3:77;8132:2;8128:1;:6;902:2;8114:21;8103:34;;8093:4;8098:1;8093:7;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;8202:2:77;8197:7;;;;7858:357;;;-1:-1:-1;8232:4:77;7331:912;-1:-1:-1;;;;7331:912:77:o;10183:325::-;10272:4;10340:2;10332:5;:10;10328:79;;;-1:-1:-1;902:2:77;10376:18;;10365:31;;10358:38;;10328:79;-1:-1:-1;956:2:77;10472:27;10461:40;;;10183:325::o;686:610:128:-;746:4;1207:20;;1052:66;1246:23;;;;;;:42;;-1:-1:-1;1273:15:128;;;1246:42;1238:51;686:610;-1:-1:-1;;;;686:610:128:o;4418:13825:32:-;;;;;;;;;;-1:-1:-1;4418:13825:32;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;4418:13825:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4418:13825:32;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;4418:13825:32;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;301:722;;429:3;422:4;414:6;410:17;406:27;396:2;;447:1;444;437:12;396:2;477:6;471:13;499:80;514:64;571:6;514:64;;;499:80;;;490:89;;596:5;621:6;614:5;607:21;651:4;643:6;639:17;629:27;;673:4;668:3;664:14;657:21;;726:6;773:3;765:4;757:6;753:17;748:3;744:27;741:36;738:2;;;790:1;787;780:12;738:2;815:1;800:217;825:6;822:1;819:13;800:217;;;883:3;905:48;949:3;937:10;905:48;;;893:61;;-1:-1;977:4;968:14;;;;996;;;;;847:1;840:9;800:217;;;804:14;389:634;;;;;;;;1031:124;1095:20;;1120:30;1095:20;1120:30;;1162:128;1237:13;;1255:30;1237:13;1255:30;;1298:440;;1399:3;1392:4;1384:6;1380:17;1376:27;1366:2;;1417:1;1414;1407:12;1366:2;1454:6;1441:20;1476:64;1491:48;1532:6;1491:48;;1476:64;1467:73;;1560:6;1553:5;1546:21;1596:4;1588:6;1584:17;1629:4;1622:5;1618:16;1664:3;1655:6;1650:3;1646:16;1643:25;1640:2;;;1681:1;1678;1671:12;1640:2;1691:41;1725:6;1720:3;1715;1691:41;;;1359:379;;;;;;;;1746:176;1836:20;;1861:56;1836:20;1861:56;;2107:436;;2216:3;2209:4;2201:6;2197:17;2193:27;2183:2;;2234:1;2231;2224:12;2183:2;2264:6;2258:13;2286:61;2301:45;2339:6;2301:45;;2286:61;2277:70;;2367:6;2360:5;2353:21;2403:4;2395:6;2391:17;2436:4;2429:5;2425:16;2471:3;2462:6;2457:3;2453:16;2450:25;2447:2;;;2488:1;2485;2478:12;2447:2;2498:39;2530:6;2525:3;2520;2498:39;;2582:808;;2701:4;2689:9;2684:3;2680:19;2676:30;2673:2;;;2719:1;2716;2709:12;2673:2;2737:20;2752:4;2737:20;;;2728:29;-1:-1;2807:1;2839:46;2881:3;2861:9;2839:46;;;2814:72;;-1:-1;2955:2;2988:72;3056:3;3032:22;;;2988:72;;;2981:4;2974:5;2970:16;2963:98;2907:165;3121:2;3154:69;3219:3;3210:6;3199:9;3195:22;3154:69;;;3147:4;3140:5;3136:16;3129:95;3082:153;3286:2;3319:49;3364:3;3355:6;3344:9;3340:22;3319:49;;;3312:4;3305:5;3301:16;3294:75;3245:135;2667:723;;;;;3423:468;;3535:4;3523:9;3518:3;3514:19;3510:30;3507:2;;;3553:1;3550;3543:12;3507:2;3571:20;3586:4;3571:20;;;3562:29;-1:-1;3642:1;3674:49;3719:3;3699:9;3674:49;;;3649:75;;-1:-1;3787:2;3820:49;3865:3;3841:22;;;3820:49;;;3813:4;3806:5;3802:16;3795:75;3745:136;3501:390;;;;;3921:495;;4043:4;4031:9;4026:3;4022:19;4018:30;4015:2;;;4061:1;4058;4051:12;4015:2;4079:20;4094:4;4079:20;;;4070:29;-1:-1;4149:1;4181:57;4234:3;4214:9;4181:57;;;4156:83;;-1:-1;4301:2;4334:60;4390:3;4366:22;;;4334:60;;4451:506;;4578:4;4566:9;4561:3;4557:19;4553:30;4550:2;;;4596:1;4593;4586:12;4550:2;4614:20;4629:4;4614:20;;;4605:29;-1:-1;4686:1;4718:60;4774:3;4754:9;4964:134;5042:13;;5060:33;5042:13;5060:33;;5105:130;5172:20;;5197:33;5172:20;5197:33;;5242:134;5320:13;;5338:33;5320:13;5338:33;;5383:130;5459:13;;5477:31;5459:13;5477:31;;5520:241;;5624:2;5612:9;5603:7;5599:23;5595:32;5592:2;;;5640:1;5637;5630:12;5592:2;5675:1;5692:53;5737:7;5717:9;5692:53;;5768:263;;5883:2;5871:9;5862:7;5858:23;5854:32;5851:2;;;5899:1;5896;5889:12;5851:2;5934:1;5951:64;6007:7;5987:9;5951:64;;6038:366;;;6159:2;6147:9;6138:7;6134:23;6130:32;6127:2;;;6175:1;6172;6165:12;6127:2;6210:1;6227:53;6272:7;6252:9;6227:53;;;6217:63;;6189:97;6317:2;6335:53;6380:7;6371:6;6360:9;6356:22;6335:53;;;6325:63;;6296:98;6121:283;;;;;;6411:491;;;;6549:2;6537:9;6528:7;6524:23;6520:32;6517:2;;;6565:1;6562;6555:12;6517:2;6600:1;6617:53;6662:7;6642:9;6617:53;;;6607:63;;6579:97;6707:2;6725:53;6770:7;6761:6;6750:9;6746:22;6725:53;;;6715:63;;6686:98;6815:2;6833:53;6878:7;6869:6;6858:9;6854:22;6833:53;;;6823:63;;6794:98;6511:391;;;;;;6909:366;;;7030:2;7018:9;7009:7;7005:23;7001:32;6998:2;;;7046:1;7043;7036:12;6998:2;7081:1;7098:53;7143:7;7123:9;7098:53;;;7088:63;;7060:97;7188:2;7206:53;7251:7;7242:6;7231:9;7227:22;7206:53;;7282:392;;7422:2;7410:9;7401:7;7397:23;7393:32;7390:2;;;7438:1;7435;7428:12;7390:2;7473:24;;7517:18;7506:30;;7503:2;;;7549:1;7546;7539:12;7503:2;7569:89;7650:7;7641:6;7630:9;7626:22;7569:89;;7681:257;;7793:2;7781:9;7772:7;7768:23;7764:32;7761:2;;;7809:1;7806;7799:12;7761:2;7844:1;7861:61;7914:7;7894:9;7861:61;;7945:354;;8066:2;8054:9;8045:7;8041:23;8037:32;8034:2;;;8082:1;8079;8072:12;8034:2;8117:24;;8161:18;8150:30;;8147:2;;;8193:1;8190;8183:12;8147:2;8213:70;8275:7;8266:6;8255:9;8251:22;8213:70;;8306:287;;8433:2;8421:9;8412:7;8408:23;8404:32;8401:2;;;8449:1;8446;8439:12;8401:2;8484:1;8501:76;8569:7;8549:9;8501:76;;8600:307;;8737:2;8725:9;8716:7;8712:23;8708:32;8705:2;;;8753:1;8750;8743:12;8705:2;8788:1;8805:86;8883:7;8863:9;8805:86;;8914:317;;9056:2;9044:9;9035:7;9031:23;9027:32;9024:2;;;9072:1;9069;9062:12;9024:2;9107:1;9124:91;9207:7;9187:9;9124:91;;9238:241;;9342:2;9330:9;9321:7;9317:23;9313:32;9310:2;;;9358:1;9355;9348:12;9310:2;9393:1;9410:53;9455:7;9435:9;9410:53;;9486:263;;9601:2;9589:9;9580:7;9576:23;9572:32;9569:2;;;9617:1;9614;9607:12;9569:2;9652:1;9669:64;9725:7;9705:9;9669:64;;9756:1341;;;;;;;;;10045:3;10033:9;10024:7;10020:23;10016:33;10013:2;;;10062:1;10059;10052:12;10013:2;10097:1;10114:53;10159:7;10139:9;10114:53;;;10104:63;;10076:97;10204:2;10222:83;10297:7;10288:6;10277:9;10273:22;10222:83;;;10212:93;;10183:128;10342:3;10361:53;10406:7;10397:6;10386:9;10382:22;10361:53;;;10351:63;;10321:99;10451:3;10470:83;10545:7;10536:6;10525:9;10521:22;10470:83;;;10460:93;;10430:129;10590:3;10609:53;10654:7;10645:6;10634:9;10630:22;10609:53;;;10599:63;;10569:99;10699:3;10718:53;10763:7;10754:6;10743:9;10739:22;10718:53;;;10708:63;;10678:99;10808:3;10827:50;10869:7;10860:6;10849:9;10845:22;10827:50;;;10817:60;;10787:96;10942:3;10931:9;10927:19;10914:33;10967:18;10959:6;10956:30;10953:2;;;10999:1;10996;10989:12;10953:2;11019:62;11073:7;11064:6;11053:9;11049:22;11019:62;;;11009:72;;10893:194;10007:1090;;;;;;;;;;;;11104:366;;;11225:2;11213:9;11204:7;11200:23;11196:32;11193:2;;;11241:1;11238;11231:12;11193:2;11276:1;11293:53;11338:7;11318:9;11293:53;;11477:259;;11590:2;11578:9;11569:7;11565:23;11561:32;11558:2;;;11606:1;11603;11596:12;11558:2;11641:1;11658:62;11712:7;11692:9;11658:62;;11744:257;;11895:100;11991:3;11983:6;11895:100;;12010:253;;12135:88;12219:3;12211:6;12135:88;;;-1:-1;;12252:4;12243:14;;12128:135;12272:281;;12411:102;12509:3;12501:6;12411:102;;;-1:-1;;12542:4;12533:14;;12404:149;12561:103;12634:24;12652:5;12634:24;;;12629:3;12622:37;12616:48;;;12858:1048;;13053:79;13126:5;13053:79;;;13145:111;13249:6;13244:3;13145:111;;;13138:118;;13279:3;13321:4;13313:6;13309:17;13304:3;13300:27;13348:81;13423:5;13348:81;;;13449:7;13477:1;13462:405;13487:6;13484:1;13481:13;13462:405;;;13549:9;13543:4;13539:20;13534:3;13527:33;13594:6;13588:13;13616:114;13725:4;13710:13;13616:114;;;13608:122;;13747:85;13825:6;13747:85;;;13855:4;13846:14;;;;;13737:95;-1:-1;;13509:1;13502:9;13462:405;;;-1:-1;13880:4;;13032:874;-1:-1;;;;;;;13032:874;13969:842;;14152:73;14219:5;14152:73;;;14238:105;14336:6;14331:3;14238:105;;;14231:112;;14364:75;14433:5;14364:75;;;14459:7;14487:1;14472:317;14497:6;14494:1;14491:13;14472:317;;;14564:6;14558:13;14585:101;14682:3;14667:13;14585:101;;;14578:108;;14703:79;14775:6;14703:79;;;14693:89;-1:-1;;14519:1;14512:9;14472:317;;;-1:-1;14802:3;;14131:680;-1:-1;;;;;14131:680;14890:898;;15087:80;15161:5;15087:80;;;15180:112;15285:6;15280:3;15180:112;;;15173:119;;15313:82;15389:5;15313:82;;;15415:7;15443:1;15428:338;15453:6;15450:1;15447:13;15428:338;;;15520:6;15514:13;15541:115;15652:3;15637:13;15541:115;;;15534:122;;15673:86;15752:6;15673:86;;;15663:96;-1:-1;;15475:1;15468:9;15428:338;;15796:94;15863:21;15878:5;15863:21;;16008:148;16107:43;16126:23;16143:5;16126:23;;;16107:43;;16163:148;16262:43;16281:23;16298:5;16281:23;;16318:152;16419:45;16439:24;16457:5;16439:24;;16477:148;16576:43;16595:23;16612:5;16595:23;;16632:356;;16760:38;16792:5;16760:38;;;16810:88;16891:6;16886:3;16810:88;;;16803:95;;16903:52;16948:6;16943:3;16936:4;16929:5;16925:16;16903:52;;;16967:16;;;;;16740:248;-1:-1;;16740:248;16995:315;;17091:34;17119:5;17091:34;;;17137:60;17190:6;17185:3;17137:60;;;17130:67;;17202:52;17247:6;17242:3;17235:4;17228:5;17224:16;17202:52;;;17275:29;17297:6;17275:29;;;17266:39;;;;17071:239;-1:-1;;;17071:239;17317:176;17425:62;17481:5;17425:62;;17846:144;17933:51;17978:5;17933:51;;17997:158;18091:58;18143:5;18091:58;;18492:142;18583:45;18622:5;18583:45;;19355:335;;19533:84;19615:1;19610:3;19533:84;;;19650:3;19630:24;;19682:1;19673:11;;19519:171;-1:-1;;19519:171;19699:332;;19859:67;19923:2;19918:3;19859:67;;;19959:34;19939:55;;20022:2;20013:12;;19845:186;-1:-1;;19845:186;20040:348;;20218:85;20300:2;20295:3;20218:85;;;20336:14;20316:35;;20379:2;20370:12;;20204:184;-1:-1;;20204:184;20397:379;;20557:67;20621:2;20616:3;20557:67;;;20657:34;20637:55;;20726:12;20721:2;20712:12;;20705:34;20767:2;20758:12;;20543:233;-1:-1;;20543:233;20785:331;;20945:67;21009:2;21004:3;20945:67;;;21045:33;21025:54;;21107:2;21098:12;;20931:185;-1:-1;;20931:185;21125:331;;21285:67;21349:2;21344:3;21285:67;;;21385:33;21365:54;;21447:2;21438:12;;21271:185;-1:-1;;21271:185;21525:1616;21744:23;;21525:1616;;21670:6;21661:16;;;21773:77;21665:3;21744:23;21773:77;;;21692:164;21934:4;21927:5;21923:16;21917:23;21946:63;22003:4;21998:3;21994:14;21980:12;21946:63;;;21866:149;22090:4;22083:5;22079:16;22073:23;22102:119;22215:4;22210:3;22206:14;22192:12;22102:119;;;22025:202;22311:4;22304:5;22300:16;22294:23;22323:63;22380:4;22375:3;22371:14;22357:12;22323:63;;;22237:155;22478:4;22471:5;22467:16;22461:23;22490:63;22547:4;22542:3;22538:14;22524:12;22490:63;;;22402:157;22640:4;22633:5;22629:16;22623:23;22652:65;22709:6;22704:3;22700:16;22686:12;22652:65;;;22569:154;22806:4;22799:5;22795:16;22789:23;22818:65;22875:6;22870:3;22866:16;22852:12;22818:65;;;22733:156;22962:4;22955:5;22951:16;22945:23;23016:3;23010:4;23006:14;22997:6;22992:3;22988:16;22981:40;23036:67;23098:4;23084:12;23036:67;;;23028:75;21643:1498;-1:-1;;;;;21643:1498;23207:821;23412:23;;23346:4;23337:14;;;23441:57;23341:3;23412:23;23441:57;;;23366:138;23585:4;23578:5;23574:16;23568:23;23597:84;23675:4;23670:3;23666:14;23652:12;23597:84;;;23514:173;23759:4;23752:5;23748:16;23742:23;23771:81;23846:4;23841:3;23837:14;23823:12;23771:81;;;23697:161;23932:4;23925:5;23921:16;23915:23;23944:63;24001:4;23996:3;23992:14;23978:12;23944:63;;24084:461;24276:23;;24209:4;24200:14;;;24305:63;24204:3;24276:23;24305:63;;;24229:145;24449:4;24442:5;24438:16;24432:23;24461:63;24518:4;24513:3;24509:14;24495:12;24461:63;;25122:465;25325:23;;25259:4;25250:14;;;25354:57;25254:3;25325:23;25354:57;;;25279:138;25491:4;25484:5;25480:16;25474:23;25503:63;25560:4;25555:3;25551:14;25537:12;25503:63;;25659:833;25867:23;;25798:4;25789:14;;;25896:105;25793:3;25867:23;25896:105;;;25818:189;26084:4;26077:5;26073:16;26067:23;26096:63;26153:4;26148:3;26144:14;26130:12;26096:63;;;26017:148;26243:4;26236:5;26232:16;26226:23;26255:61;26310:4;26305:3;26301:14;26287:12;26255:61;;;26175:147;26402:4;26395:5;26391:16;26385:23;26414:57;26465:4;26460:3;26456:14;26442:12;26414:57;;26499:103;26572:24;26590:5;26572:24;;26609:103;26682:24;26700:5;26682:24;;26839:100;26910:23;26927:5;26910:23;;26946:107;27025:22;27041:5;27025:22;;27060:244;;27179:75;27250:3;27241:6;27179:75;;;-1:-1;27276:2;27267:12;;27167:137;-1:-1;27167:137;27311:239;;27428:73;27497:3;27488:6;27428:73;;;-1:-1;27523:1;27514:11;;27416:134;-1:-1;27416:134;27557:262;;27701:93;27790:3;27781:6;27701:93;;27826:553;;28042:93;28131:3;28122:6;28042:93;;;28035:100;;28146:73;28215:3;28206:6;28146:73;;;28241:1;28236:3;28232:11;28225:18;;28261:93;28350:3;28341:6;28261:93;;28386:978;;28700:93;28789:3;28780:6;28700:93;;;28693:100;;28804:73;28873:3;28864:6;28804:73;;;28899:1;28894:3;28890:11;28883:18;;28919:93;29008:3;28999:6;28919:93;;;28912:100;;29023:73;29092:3;29083:6;29023:73;;;29118:1;29113:3;29109:11;29102:18;;29138:93;29227:3;29218:6;29138:93;;;29131:100;;29242:73;29311:3;29302:6;29242:73;;;-1:-1;29337:1;29328:11;;28681:683;-1:-1;;;;;;28681:683;29371:525;;29614:148;29758:3;29614:148;;;29607:155;;29780:91;29867:3;29858:6;29780:91;;29903:525;;30146:148;30290:3;30146:148;;30435:213;30553:2;30538:18;;30567:71;30542:9;30611:6;30567:71;;30655:435;30829:2;30814:18;;30843:71;30818:9;30887:6;30843:71;;;30925:72;30993:2;30982:9;30978:18;30969:6;30925:72;;;31008;31076:2;31065:9;31061:18;31052:6;31008:72;;31097:324;31243:2;31228:18;;31257:71;31232:9;31301:6;31257:71;;;31339:72;31407:2;31396:9;31392:18;31383:6;31339:72;;31428:796;31762:2;31776:47;;;31747:18;;31837:146;31747:18;31969:6;31837:146;;;31829:154;;32031:9;32025:4;32021:20;32016:2;32005:9;32001:18;31994:48;32056:158;32209:4;32200:6;32056:158;;32231:201;32343:2;32328:18;;32357:65;32332:9;32395:6;32357:65;;32439:263;32582:2;32567:18;;32596:96;32571:9;32665:6;32596:96;;33229:614;33496:2;33481:18;;33510:90;33485:9;33573:6;33510:90;;;33648:9;33642:4;33638:20;33633:2;33622:9;33618:18;33611:48;33673:160;33828:4;33819:6;33673:160;;33850:229;33976:2;33961:18;;33990:79;33965:9;34042:6;33990:79;;34086:301;34224:2;34238:47;;;34209:18;;34299:78;34209:18;34363:6;34299:78;;34394:407;34585:2;34599:47;;;34570:18;;34660:131;34570:18;34660:131;;34808:407;34999:2;35013:47;;;34984:18;;35074:131;34984:18;35074:131;;35222:407;35413:2;35427:47;;;35398:18;;35488:131;35398:18;35488:131;;35636:407;35827:2;35841:47;;;35812:18;;35902:131;35812:18;35902:131;;36050:408;36238:2;36223:18;;36252:113;36227:9;36338:6;36252:113;;;36376:72;36444:2;36433:9;36429:18;36420:6;36376:72;;36465:301;36627:2;36612:18;;36641:115;36616:9;36729:6;36641:115;;36773:213;36891:2;36876:18;;36905:71;36880:9;36949:6;36905:71;;36993:205;37107:2;37092:18;;37121:67;37096:9;37161:6;37121:67;;37205:256;37267:2;37261:9;37293:17;;;37368:18;37353:34;;37389:22;;;37350:62;37347:2;;;37425:1;37422;37415:12;37347:2;37441;37434:22;37245:216;;-1:-1;37245:216;37468:304;;37627:18;37619:6;37616:30;37613:2;;;37659:1;37656;37649:12;37613:2;-1:-1;37694:4;37682:17;;;37747:15;;37550:222;37779:321;;37922:18;37914:6;37911:30;37908:2;;;37954:1;37951;37944:12;37908:2;-1:-1;38085:4;38021;37998:17;;;;-1:-1;;37994:33;38075:15;;37845:255;38432:176;38581:4;38572:14;;38529:79;38976:162;39104:12;;39075:63;40400:203;40543:19;;;40592:4;40583:14;;40536:67;41670:91;;41732:24;41750:5;41732:24;;41768:85;41834:13;41827:21;;41810:43;41860:144;41932:66;41921:78;;41904:100;42011:144;42083:66;42072:78;;42055:100;42241:144;42313:66;42302:78;;42285:100;42392:138;42470:5;42476:49;42470:5;42476:49;;42537:152;42622:5;42628:56;42622:5;42628:56;;43004:113;43077:34;43066:46;;43049:68;43124:121;-1:-1;;;;;43186:54;;43169:76;43331:88;43403:10;43392:22;;43375:44;43426:81;43497:4;43486:16;;43469:38;43514:171;;43618:62;43674:5;43618:62;;44438:138;;44531:40;44565:5;44531:40;;44583:152;;44683:47;44724:5;44683:47;;45050:116;;45137:24;45155:5;45137:24;;45174:145;45255:6;45250:3;45245;45232:30;-1:-1;45311:1;45293:16;;45286:27;45225:94;45328:268;45393:1;45400:101;45414:6;45411:1;45408:13;45400:101;;;45481:11;;;45475:18;45462:11;;;45455:39;45436:2;45429:10;45400:101;;;45516:6;45513:1;45510:13;45507:2;;;-1:-1;;45581:1;45563:16;;45556:27;45377:219;45925:97;46013:2;45993:14;-1:-1;;45989:28;;45973:49;46030:107;46115:1;46108:5;46105:12;46095:2;;46121:9;46144:114;46236:1;46229:5;46226:12;46216:2;;46242:9;46502:117;46571:24;46589:5;46571:24;;;46564:5;46561:35;46551:2;;46610:1;46607;46600:12;46626:111;46692:21;46707:5;46692:21;;46744:117;46836:1;46829:5;46826:12;46816:2;;46852:1;46849;46842:12;46989:117;47058:24;47076:5;47058:24;;47113:117;47182:24;47200:5;47182:24;;47237:113;47304:22;47320:5;47304:22;",
|
|
653
653
|
"source": "/*\n\n Copyright 2021 Dolomite.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { ReentrancyGuard } from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\n\nimport { Account } from \"../../protocol/lib/Account.sol\";\nimport { Actions } from \"../../protocol/lib/Actions.sol\";\nimport { Types } from \"../../protocol/lib/Types.sol\";\nimport { Require } from \"../../protocol/lib/Require.sol\";\nimport { IDolomiteMargin } from \"../../protocol/interfaces/IDolomiteMargin.sol\";\nimport { IERC20Detailed } from \"../../protocol/interfaces/IERC20Detailed.sol\";\nimport { IRecyclable } from \"../../protocol/interfaces/IRecyclable.sol\";\n\nimport { OnlyDolomiteMargin } from \"../helpers/OnlyDolomiteMargin.sol\";\n\n\nimport { IExpiry } from \"../interfaces/IExpiry.sol\";\n\n\n/**\n * @title RecyclableTokenProxy\n * @author Dolomite\n *\n * Contract for wrapping around tokens to control how they are deposited into DolomiteMargin, to be combined with \"market\n * recycling\" so \"throwaway tokens\" like options contracts that are represented as tokens can be used with the protocol\n * and their market IDs can be safely reclaimed.\n *\n * This contract works by serving as a proxy account for a user. Meaning, a user deposits funds into DolomiteMargin using this\n * contract's address as the `owner` and the user's address (converted to a uint) as the `number`. As a consequence and\n * tradeoff, users can only have one margin position open per instance of this contract (per option token).\n *\n * The reason why this contract works well with a recycling strategy is because all usages of the instance's\n * `marketId` are confined to this address as the `owner`. So, if the `marketId` is reused, it doesn't impact the user's\n * balance, since a new instance of `RecyclableTokenProxy` will be deployed for the recycled marketId. Then, the new\n * instance of `RecyclableTokenProxy` would serve as the new address for the user to interact with DolomiteMargin, masking/hiding\n * the user's old (potentially) non-zero balance for that `marketId`. As a visualization, balances are mapped like so:\n *\n * `owner` --> `accountNumber` --> `marketId`\n *\n * `owner` corresponds with `address(this)`, `accountNumber` is the user's address, and `marketId` is recycled.\n *\n * Since `owner` constantly chances, the value of the mapping is able to reset, each time DolomiteMargin recycles a market.\n *\n * NOTE: Contracts that reference this token and implement IExchangeWrapper must set an allowance for this contract to\n * spend `TOKEN` on the IExchangeWrapper implementor (TOKEN.approve(RecyclableTokenProxy, uint(-1)); call from\n * IExchangeWrapper).\n *\n * Another note on balances: Part of the idea behind the implementation is to restrict usage of the recyclable token to\n * only be held in `address(this)` owner address / Account.Info. The only time this marketId may reside in an `owner`\n * that is NOT this contract is after a liquidation. This should not matter though, since the liquidator will withdraw\n * the token to sell all of it for the owed collateral. So, after the liquidation transaction is over, the liquidator\n * should have a zero balance anyway. Keeping the this token in the liquidators DolomiteMargin account, would cause catastrophic\n * issues for the protocol when the `marketId` is recycled, since the liquidator's balance would be dirty upon reuse of\n * the `marketId`. To mitigate this issue, a special liquidation contract should be created that purposely performs a\n * withdrawal (down to zero) of this recyclable token's underlying `TOKEN`. Even if an implementing liquidation contract\n * messes this up, there is a check done in `OperationImpl._verifyFinalState` that prevents this from happening.\n */\ncontract RecyclableTokenProxy is IERC20Detailed, IRecyclable, OnlyDolomiteMargin, ReentrancyGuard {\n using SafeERC20 for IERC20Detailed;\n\n // ============ Constants ============\n\n bytes32 internal constant FILE = \"RecyclableTokenProxy\";\n\n // ============ Public Variables ============\n\n IERC20Detailed public TOKEN;\n IExpiry public EXPIRY;\n uint256 public MARKET_ID;\n bool public isRecycled;\n mapping(address => mapping (uint256 => bool)) public userToAccountNumberHasWithdrawnAfterRecycle;\n\n // ============ Constructor ============\n\n constructor (\n address dolomiteMargin,\n address token,\n address expiry,\n uint maxExpirationTimestamp\n )\n public\n OnlyDolomiteMargin(dolomiteMargin)\n {\n TOKEN = IERC20Detailed(token);\n EXPIRY = IExpiry(expiry);\n MAX_EXPIRATION_TIMESTAMP = maxExpirationTimestamp;\n isRecycled = false;\n }\n\n // ============ Public Functions ============\n\n function initialize() external onlyDolomiteMargin(msg.sender) {\n Require.that(\n MARKET_ID == 0,\n FILE,\n \"already initialized\"\n );\n\n MARKET_ID = DOLOMITE_MARGIN.getMarketIdByTokenAddress(address(this));\n\n Require.that(\n DOLOMITE_MARGIN.getMarketIsClosing(MARKET_ID),\n FILE,\n \"market cannot allow borrowing\"\n );\n // This statement is in this function because of an \"InternalCompileError\" error that occurs in the constructor\n Require.that(\n MAX_EXPIRATION_TIMESTAMP >= block.timestamp,\n FILE,\n \"invalid expiration timestamp\",\n MAX_EXPIRATION_TIMESTAMP\n );\n }\n\n function recycle() external onlyDolomiteMargin(msg.sender) {\n Require.that(\n DOLOMITE_MARGIN.getRecyclableMarkets(1)[0] == MARKET_ID,\n FILE,\n \"not recyclable\"\n );\n\n isRecycled = true;\n }\n\n function getAccountNumber(\n Account.Info memory account\n ) public pure returns (uint256) {\n return _getAccountNumber(account.owner, account.number);\n }\n\n function getAccountPar(\n Account.Info memory account\n ) public view returns (Types.Par memory) {\n if (userToAccountNumberHasWithdrawnAfterRecycle[account.owner][account.number]) {\n return Types.zeroPar();\n } else {\n return DOLOMITE_MARGIN.getAccountParNoMarketCheck(\n Account.Info(address(this), getAccountNumber(account)),\n MARKET_ID\n );\n }\n }\n\n function depositIntoDolomiteMargin(uint accountNumber, uint amount) public nonReentrant {\n Require.that(\n !isRecycled,\n FILE,\n \"cannot deposit when recycled\"\n );\n Require.that(\n !isExpired(),\n FILE,\n \"market is expired\",\n MAX_EXPIRATION_TIMESTAMP\n );\n\n TOKEN.safeTransferFrom(msg.sender, address(this), amount);\n\n Account.Info[] memory accounts = new Account.Info[](1);\n accounts[0] = Account.Info(address(this), _getAccountNumber(msg.sender, accountNumber));\n\n Actions.ActionArgs[] memory actions = new Actions.ActionArgs[](1);\n actions[0] = Actions.ActionArgs({\n actionType: Actions.ActionType.Deposit,\n accountId: 0,\n // solium-disable-next-line arg-overflow\n amount: Types.AssetAmount(true, Types.AssetDenomination.Wei, Types.AssetReference.Delta, amount),\n primaryMarketId: MARKET_ID,\n secondaryMarketId: uint(-1),\n otherAddress: address(this),\n otherAccountId: uint(-1),\n data: bytes(\"\")\n });\n\n DOLOMITE_MARGIN.operate(accounts, actions);\n }\n\n function withdrawFromDolomiteMargin(uint accountNumber, uint amount) public nonReentrant {\n Require.that(\n !isRecycled,\n FILE,\n \"cannot withdraw when recycled\"\n );\n\n Account.Info[] memory accounts = new Account.Info[](1);\n accounts[0] = Account.Info(address(this), _getAccountNumber(msg.sender, accountNumber));\n\n Actions.ActionArgs[] memory actions = new Actions.ActionArgs[](1);\n actions[0] = Actions.ActionArgs({\n actionType: Actions.ActionType.Withdraw,\n accountId: 0,\n // solium-disable-next-line arg-overflow\n amount: Types.AssetAmount(false, Types.AssetDenomination.Wei, Types.AssetReference.Delta, amount),\n primaryMarketId: MARKET_ID,\n secondaryMarketId: uint(-1),\n otherAddress: msg.sender,\n otherAccountId: uint(-1),\n data: bytes(\"\")\n });\n\n DOLOMITE_MARGIN.operate(accounts, actions);\n }\n\n function withdrawAfterRecycle(uint accountNumber) public {\n Require.that(\n isRecycled,\n FILE,\n \"not recycled yet\"\n );\n Require.that(\n !userToAccountNumberHasWithdrawnAfterRecycle[msg.sender][accountNumber],\n FILE,\n \"user already withdrew\"\n );\n userToAccountNumberHasWithdrawnAfterRecycle[msg.sender][accountNumber] = true;\n TOKEN.safeTransfer(\n msg.sender,\n DOLOMITE_MARGIN.getAccountParNoMarketCheck(\n Account.Info(address(this), _getAccountNumber(msg.sender, accountNumber)),\n MARKET_ID\n ).value\n );\n }\n\n function trade(\n uint accountNumber,\n Types.AssetAmount memory supplyAmount, // equivalent to amounts[amounts.length - 1]\n address borrowToken,\n Types.AssetAmount memory borrowAmount,\n address exchangeWrapper,\n uint expirationTimestamp,\n bool isOpen,\n bytes memory tradeData\n ) public {\n Require.that(\n !isRecycled,\n FILE,\n \"cannot trade when recycled\"\n );\n Require.that(\n !isExpired(),\n FILE,\n \"market is expired\",\n MAX_EXPIRATION_TIMESTAMP\n );\n Require.that(\n expirationTimestamp > block.timestamp,\n FILE,\n \"expiration timestamp too low\",\n expirationTimestamp\n );\n Require.that(\n expirationTimestamp <= MAX_EXPIRATION_TIMESTAMP,\n FILE,\n \"expiration timestamp too high\",\n expirationTimestamp\n );\n\n uint marketId = MARKET_ID;\n uint borrowMarketId = DOLOMITE_MARGIN.getMarketIdByTokenAddress(borrowToken);\n\n Account.Info[] memory accounts = new Account.Info[](1);\n accounts[0] = Account.Info(address(this), _getAccountNumber(msg.sender, accountNumber));\n\n Actions.ActionArgs[] memory actions = new Actions.ActionArgs[](2);\n actions[0] = Actions.ActionArgs({\n actionType: Actions.ActionType.Sell,\n accountId: 0,\n amount: isOpen ? borrowAmount : supplyAmount,\n primaryMarketId: isOpen ? borrowMarketId : marketId,\n secondaryMarketId: isOpen ? marketId : borrowMarketId,\n otherAddress: exchangeWrapper,\n otherAccountId: 0,\n data: tradeData\n });\n\n actions[1] = Actions.ActionArgs({\n actionType : Actions.ActionType.Call,\n accountId : 0,\n // solium-disable-next-line arg-overflow\n amount : Types.AssetAmount(false, Types.AssetDenomination.Wei, Types.AssetReference.Delta, 0),\n primaryMarketId : 0,\n secondaryMarketId : 0,\n otherAddress : address(EXPIRY),\n otherAccountId : 0,\n data : abi.encode(\n IExpiry.CallFunctionType.SetExpiry,\n _getExpiryArgs(accounts[0], borrowMarketId, isOpen ? expirationTimestamp : 0)\n )\n });\n\n DOLOMITE_MARGIN.operate(accounts, actions);\n }\n\n // ============ ERC20 Functions ============\n\n function name() public view returns (string memory) {\n (bool isSuccess, bytes memory data) = address(TOKEN).staticcall(abi.encodePacked(TOKEN.name.selector));\n if (isSuccess && data.length > 0) {\n return string(abi.encodePacked(\"Recyclable: \", abi.decode(data, (string))));\n } else {\n return \"Recyclable: Dolomite Token\";\n }\n }\n\n function symbol() public view returns (string memory) {\n (bool isSuccess, bytes memory data) = address(TOKEN).staticcall(abi.encodePacked(TOKEN.symbol.selector));\n if (isSuccess && data.length > 0) {\n return string(abi.encodePacked(\"r\", abi.decode(data, (string))));\n } else {\n return \"rDOLO_TOKEN\";\n }\n }\n\n function decimals() public view returns (uint8) {\n (bool isSuccess, bytes memory data) = address(TOKEN).staticcall(abi.encodePacked(TOKEN.decimals.selector));\n if (isSuccess && data.length > 0) {\n return abi.decode(data, (uint8));\n } else {\n return 18;\n }\n }\n\n function totalSupply() public view returns (uint256) {\n return TOKEN.totalSupply();\n }\n\n function balanceOf(address account) public view returns (uint256) {\n if (account == address(DOLOMITE_MARGIN)) {\n // The effective balance of DolomiteMargin is the balance held of the underlying token in this contract\n return TOKEN.balanceOf(address(this));\n }\n\n uint accountNumber = 0;\n if (userToAccountNumberHasWithdrawnAfterRecycle[account][accountNumber]) {\n return 0;\n } else {\n return getAccountPar(Account.Info(account, accountNumber)).value;\n }\n }\n\n function transfer(address recipient, uint256 amount) public onlyDolomiteMargin(msg.sender) returns (bool) {\n // This condition fails when the market is recycled but DolomiteMargin attempts to call this contract still\n Require.that(\n DOLOMITE_MARGIN.getMarketTokenAddress(MARKET_ID) == address(this),\n FILE,\n \"invalid state\"\n );\n Require.that(\n !isRecycled,\n FILE,\n \"cannot transfer while recycled\"\n );\n\n TOKEN.safeTransfer(recipient, amount);\n emit Transfer(msg.sender, recipient, amount);\n return true;\n }\n\n function allowance(address, address) public view returns (uint256) {\n return 0;\n }\n\n function approve(address, uint256) public returns (bool) {\n return false;\n }\n\n function transferFrom(\n address from,\n address to,\n uint256 amount\n ) public onlyDolomiteMargin(msg.sender) returns (bool) {\n // transferFrom should always send tokens to DOLOMITE_MARGIN\n Require.that(\n to == address(msg.sender), // msg.sender eq DOLOMITE_MARGIN\n FILE,\n \"invalid recipient\"\n );\n Require.that(\n !isRecycled,\n FILE,\n \"cannot transfer while recycled\"\n );\n // This condition fails when the market is recycled but DolomiteMargin attempts to call this contract anyway\n Require.that(\n DOLOMITE_MARGIN.getMarketTokenAddress(MARKET_ID) == address(this),\n FILE,\n \"invalid state\"\n );\n\n if (from == address(this)) {\n // token is being transferred from here to DolomiteMargin, for a deposit. The market's total par was already updated\n // before the call to `transferFrom`. Make sure enough was transferred in.\n // This implementation allows the user to \"steal\" funds from users that blindly send TOKEN into this\n // contract, without calling properly calling the `deposit` function to set their balances.\n Require.that(\n TOKEN.balanceOf(address(this)) >= DOLOMITE_MARGIN.getMarketTotalPar(MARKET_ID).supply,\n FILE,\n \"insufficient balance for deposit\"\n );\n emit Transfer(address(this), to, amount);\n } else {\n // TOKEN is being traded via IExchangeWrapper, transfer the tokens into this contract\n TOKEN.safeTransferFrom(from, address(this), amount);\n\n // The market's total par was already updated before the call to `transferFrom`. Make sure enough was\n // transferred in. This implementation allows the user to \"steal\" funds from users that blindly send TOKEN\n // into this contract, without calling properly calling the `deposit` function to set their balances.\n Require.that(\n TOKEN.balanceOf(address(this)) >= DOLOMITE_MARGIN.getMarketTotalPar(MARKET_ID).supply,\n FILE,\n \"insufficient balance for deposit\"\n );\n\n // this transfer event is technically incorrect since the tokens are really sent from address(this) to\n // recipient, not `sender`. However, we'll let it go.\n emit Transfer(from, to, amount);\n }\n return true;\n }\n\n // ============ Private Functions ============\n\n function _getAccountNumber(address owner, uint number) private pure returns (uint256) {\n return uint(keccak256(abi.encode(owner, number)));\n }\n\n function _getExpiryArgs(\n Account.Info memory account,\n uint marketId,\n uint expirationTimestamp\n ) private view returns (IExpiry.SetExpiryArg[] memory) {\n IExpiry.SetExpiryArg[] memory expiryArgs = new IExpiry.SetExpiryArg[](1);\n expiryArgs[0] = IExpiry.SetExpiryArg({\n account : account,\n marketId : marketId,\n timeDelta : expirationTimestamp == 0 ? 0 : uint32(expirationTimestamp - block.timestamp),\n forceUpdate : true\n });\n return expiryArgs;\n }\n\n}\n",
|
|
654
|
-
"sourcePath": "/
|
|
654
|
+
"sourcePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/RecyclableTokenProxy.sol",
|
|
655
655
|
"ast": {
|
|
656
|
-
"absolutePath": "/
|
|
656
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/RecyclableTokenProxy.sol",
|
|
657
657
|
"exportedSymbols": {
|
|
658
658
|
"RecyclableTokenProxy": [
|
|
659
659
|
15384
|
|
@@ -731,7 +731,7 @@
|
|
|
731
731
|
"unitAlias": ""
|
|
732
732
|
},
|
|
733
733
|
{
|
|
734
|
-
"absolutePath": "/
|
|
734
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
|
|
735
735
|
"file": "../../protocol/lib/Account.sol",
|
|
736
736
|
"id": 14242,
|
|
737
737
|
"nodeType": "ImportDirective",
|
|
@@ -747,7 +747,7 @@
|
|
|
747
747
|
"unitAlias": ""
|
|
748
748
|
},
|
|
749
749
|
{
|
|
750
|
-
"absolutePath": "/
|
|
750
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
|
|
751
751
|
"file": "../../protocol/lib/Actions.sol",
|
|
752
752
|
"id": 14244,
|
|
753
753
|
"nodeType": "ImportDirective",
|
|
@@ -763,7 +763,7 @@
|
|
|
763
763
|
"unitAlias": ""
|
|
764
764
|
},
|
|
765
765
|
{
|
|
766
|
-
"absolutePath": "/
|
|
766
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
|
|
767
767
|
"file": "../../protocol/lib/Types.sol",
|
|
768
768
|
"id": 14246,
|
|
769
769
|
"nodeType": "ImportDirective",
|
|
@@ -779,7 +779,7 @@
|
|
|
779
779
|
"unitAlias": ""
|
|
780
780
|
},
|
|
781
781
|
{
|
|
782
|
-
"absolutePath": "/
|
|
782
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
|
|
783
783
|
"file": "../../protocol/lib/Require.sol",
|
|
784
784
|
"id": 14248,
|
|
785
785
|
"nodeType": "ImportDirective",
|
|
@@ -795,7 +795,7 @@
|
|
|
795
795
|
"unitAlias": ""
|
|
796
796
|
},
|
|
797
797
|
{
|
|
798
|
-
"absolutePath": "/
|
|
798
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol",
|
|
799
799
|
"file": "../../protocol/interfaces/IDolomiteMargin.sol",
|
|
800
800
|
"id": 14250,
|
|
801
801
|
"nodeType": "ImportDirective",
|
|
@@ -811,7 +811,7 @@
|
|
|
811
811
|
"unitAlias": ""
|
|
812
812
|
},
|
|
813
813
|
{
|
|
814
|
-
"absolutePath": "/
|
|
814
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol",
|
|
815
815
|
"file": "../../protocol/interfaces/IERC20Detailed.sol",
|
|
816
816
|
"id": 14252,
|
|
817
817
|
"nodeType": "ImportDirective",
|
|
@@ -827,7 +827,7 @@
|
|
|
827
827
|
"unitAlias": ""
|
|
828
828
|
},
|
|
829
829
|
{
|
|
830
|
-
"absolutePath": "/
|
|
830
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IRecyclable.sol",
|
|
831
831
|
"file": "../../protocol/interfaces/IRecyclable.sol",
|
|
832
832
|
"id": 14254,
|
|
833
833
|
"nodeType": "ImportDirective",
|
|
@@ -843,7 +843,7 @@
|
|
|
843
843
|
"unitAlias": ""
|
|
844
844
|
},
|
|
845
845
|
{
|
|
846
|
-
"absolutePath": "/
|
|
846
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol",
|
|
847
847
|
"file": "../helpers/OnlyDolomiteMargin.sol",
|
|
848
848
|
"id": 14256,
|
|
849
849
|
"nodeType": "ImportDirective",
|
|
@@ -859,7 +859,7 @@
|
|
|
859
859
|
"unitAlias": ""
|
|
860
860
|
},
|
|
861
861
|
{
|
|
862
|
-
"absolutePath": "/
|
|
862
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol",
|
|
863
863
|
"file": "../interfaces/IExpiry.sol",
|
|
864
864
|
"id": 14258,
|
|
865
865
|
"nodeType": "ImportDirective",
|
|
@@ -16699,7 +16699,7 @@
|
|
|
16699
16699
|
"src": "595:17649:32"
|
|
16700
16700
|
},
|
|
16701
16701
|
"legacyAST": {
|
|
16702
|
-
"absolutePath": "/
|
|
16702
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/RecyclableTokenProxy.sol",
|
|
16703
16703
|
"exportedSymbols": {
|
|
16704
16704
|
"RecyclableTokenProxy": [
|
|
16705
16705
|
15384
|
|
@@ -16777,7 +16777,7 @@
|
|
|
16777
16777
|
"unitAlias": ""
|
|
16778
16778
|
},
|
|
16779
16779
|
{
|
|
16780
|
-
"absolutePath": "/
|
|
16780
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
|
|
16781
16781
|
"file": "../../protocol/lib/Account.sol",
|
|
16782
16782
|
"id": 14242,
|
|
16783
16783
|
"nodeType": "ImportDirective",
|
|
@@ -16793,7 +16793,7 @@
|
|
|
16793
16793
|
"unitAlias": ""
|
|
16794
16794
|
},
|
|
16795
16795
|
{
|
|
16796
|
-
"absolutePath": "/
|
|
16796
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
|
|
16797
16797
|
"file": "../../protocol/lib/Actions.sol",
|
|
16798
16798
|
"id": 14244,
|
|
16799
16799
|
"nodeType": "ImportDirective",
|
|
@@ -16809,7 +16809,7 @@
|
|
|
16809
16809
|
"unitAlias": ""
|
|
16810
16810
|
},
|
|
16811
16811
|
{
|
|
16812
|
-
"absolutePath": "/
|
|
16812
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
|
|
16813
16813
|
"file": "../../protocol/lib/Types.sol",
|
|
16814
16814
|
"id": 14246,
|
|
16815
16815
|
"nodeType": "ImportDirective",
|
|
@@ -16825,7 +16825,7 @@
|
|
|
16825
16825
|
"unitAlias": ""
|
|
16826
16826
|
},
|
|
16827
16827
|
{
|
|
16828
|
-
"absolutePath": "/
|
|
16828
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
|
|
16829
16829
|
"file": "../../protocol/lib/Require.sol",
|
|
16830
16830
|
"id": 14248,
|
|
16831
16831
|
"nodeType": "ImportDirective",
|
|
@@ -16841,7 +16841,7 @@
|
|
|
16841
16841
|
"unitAlias": ""
|
|
16842
16842
|
},
|
|
16843
16843
|
{
|
|
16844
|
-
"absolutePath": "/
|
|
16844
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol",
|
|
16845
16845
|
"file": "../../protocol/interfaces/IDolomiteMargin.sol",
|
|
16846
16846
|
"id": 14250,
|
|
16847
16847
|
"nodeType": "ImportDirective",
|
|
@@ -16857,7 +16857,7 @@
|
|
|
16857
16857
|
"unitAlias": ""
|
|
16858
16858
|
},
|
|
16859
16859
|
{
|
|
16860
|
-
"absolutePath": "/
|
|
16860
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol",
|
|
16861
16861
|
"file": "../../protocol/interfaces/IERC20Detailed.sol",
|
|
16862
16862
|
"id": 14252,
|
|
16863
16863
|
"nodeType": "ImportDirective",
|
|
@@ -16873,7 +16873,7 @@
|
|
|
16873
16873
|
"unitAlias": ""
|
|
16874
16874
|
},
|
|
16875
16875
|
{
|
|
16876
|
-
"absolutePath": "/
|
|
16876
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IRecyclable.sol",
|
|
16877
16877
|
"file": "../../protocol/interfaces/IRecyclable.sol",
|
|
16878
16878
|
"id": 14254,
|
|
16879
16879
|
"nodeType": "ImportDirective",
|
|
@@ -16889,7 +16889,7 @@
|
|
|
16889
16889
|
"unitAlias": ""
|
|
16890
16890
|
},
|
|
16891
16891
|
{
|
|
16892
|
-
"absolutePath": "/
|
|
16892
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/helpers/OnlyDolomiteMargin.sol",
|
|
16893
16893
|
"file": "../helpers/OnlyDolomiteMargin.sol",
|
|
16894
16894
|
"id": 14256,
|
|
16895
16895
|
"nodeType": "ImportDirective",
|
|
@@ -16905,7 +16905,7 @@
|
|
|
16905
16905
|
"unitAlias": ""
|
|
16906
16906
|
},
|
|
16907
16907
|
{
|
|
16908
|
-
"absolutePath": "/
|
|
16908
|
+
"absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol",
|
|
16909
16909
|
"file": "../interfaces/IExpiry.sol",
|
|
16910
16910
|
"id": 14258,
|
|
16911
16911
|
"nodeType": "ImportDirective",
|
|
@@ -32750,7 +32750,7 @@
|
|
|
32750
32750
|
},
|
|
32751
32751
|
"networks": {},
|
|
32752
32752
|
"schemaVersion": "3.0.23",
|
|
32753
|
-
"updatedAt": "2022-02-
|
|
32753
|
+
"updatedAt": "2022-02-07T07:18:45.030Z",
|
|
32754
32754
|
"devdoc": {
|
|
32755
32755
|
"author": "Dolomite * Contract for wrapping around tokens to control how they are deposited into DolomiteMargin, to be combined with \"market recycling\" so \"throwaway tokens\" like options contracts that are represented as tokens can be used with the protocol and their market IDs can be safely reclaimed. * This contract works by serving as a proxy account for a user. Meaning, a user deposits funds into DolomiteMargin using this contract's address as the `owner` and the user's address (converted to a uint) as the `number`. As a consequence and tradeoff, users can only have one margin position open per instance of this contract (per option token). * The reason why this contract works well with a recycling strategy is because all usages of the instance's `marketId` are confined to this address as the `owner`. So, if the `marketId` is reused, it doesn't impact the user's balance, since a new instance of `RecyclableTokenProxy` will be deployed for the recycled marketId. Then, the new instance of `RecyclableTokenProxy` would serve as the new address for the user to interact with DolomiteMargin, masking/hiding the user's old (potentially) non-zero balance for that `marketId`. As a visualization, balances are mapped like so: * `owner` --> `accountNumber` --> `marketId` * `owner` corresponds with `address(this)`, `accountNumber` is the user's address, and `marketId` is recycled. * Since `owner` constantly chances, the value of the mapping is able to reset, each time DolomiteMargin recycles a market. * NOTE: Contracts that reference this token and implement IExchangeWrapper must set an allowance for this contract to spend `TOKEN` on the IExchangeWrapper implementor (TOKEN.approve(RecyclableTokenProxy, uint(-1)); call from IExchangeWrapper). * Another note on balances: Part of the idea behind the implementation is to restrict usage of the recyclable token to only be held in `address(this)` owner address / Account.Info. The only time this marketId may reside in an `owner` that is NOT this contract is after a liquidation. This should not matter though, since the liquidator will withdraw the token to sell all of it for the owed collateral. So, after the liquidation transaction is over, the liquidator should have a zero balance anyway. Keeping the this token in the liquidators DolomiteMargin account, would cause catastrophic issues for the protocol when the `marketId` is recycled, since the liquidator's balance would be dirty upon reuse of the `marketId`. To mitigate this issue, a special liquidation contract should be created that purposely performs a withdrawal (down to zero) of this recyclable token's underlying `TOKEN`. Even if an implementing liquidation contract messes this up, there is a check done in `OperationImpl._verifyFinalState` that prevents this from happening.",
|
|
32756
32756
|
"methods": {
|