47 txs
382 calls
constructor
constructor(string _name, string _symbol, (address _asset, address _yearnVault, address _discountRateAdapter, address _eventEmitter, address _governorAddress, address _termController, uint256 _repoTokenConcentrationLimit, uint256 _timeToMaturityThreshold, uint256 _requiredReserveRatio, uint256 _discountRateMarkup) _params)
functions
availableDepositLimit
viewfunction availableDepositLimit(address) view returns (uint256)
availableWithdrawLimit
viewfunction availableWithdrawLimit(address) view returns (uint256)
calculateRepoTokenPresentValue
viewfunction calculateRepoTokenPresentValue(address repoToken, uint256 discountRate, uint256 amount) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRepoTokenConcentrationRatio
viewfunction getRepoTokenConcentrationRatio(address repoToken) view returns (uint256)
getRepoTokenHoldingValue
viewfunction getRepoTokenHoldingValue(address repoToken) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
liquidReserveRatio
viewfunction liquidReserveRatio() view returns (uint256)
paused
viewfunction paused() view returns (bool)
pendingOffers
viewfunction pendingOffers() view returns (bytes32[])
repoTokenBlacklist
viewfunction repoTokenBlacklist(address) view returns (bool)
repoTokenHoldings
viewfunction repoTokenHoldings() view returns (address[])
simulateTransaction
viewfunction simulateTransaction(address repoToken, uint256 amount) view returns (uint256 simulatedWeightedMaturity, uint256 simulatedRepoTokenConcentrationRatio, uint256 simulatedLiquidityRatio)
strategyState
viewfunction strategyState() view returns (address assetVault, address eventEmitter, address governorAddress, address prevTermController, address currTermController, address discountRateAdapter, uint256 timeToMaturityThreshold, uint256 requiredReserveRatio, uint256 discountRateMarkup, uint256 repoTokenConcentrationLimit)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tendTrigger
viewfunction tendTrigger() view returns (bool, bytes)
tokenizedStrategyAddress
viewfunction tokenizedStrategyAddress() view returns (address)
totalAssetValue
viewfunction totalAssetValue() view returns (uint256)
totalLiquidBalance
viewfunction totalLiquidBalance() view returns (uint256)
acceptGovernor
nonpayablefunction acceptGovernor()
auctionClosed
nonpayablefunction auctionClosed()
deleteAuctionOffers
nonpayablefunction deleteAuctionOffers(address termAuction, bytes32[] offerIds)
deployFunds
nonpayablefunction deployFunds(uint256 _amount)
freeFunds
nonpayablefunction freeFunds(uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
harvestAndReport
nonpayablefunction harvestAndReport() returns (uint256)
pauseDeposit
nonpayablefunction pauseDeposit()
pauseStrategy
nonpayablefunction pauseStrategy()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sellRepoToken
nonpayablefunction sellRepoToken(address repoToken, uint256 repoTokenAmount)
setCollateralTokenParams
nonpayablefunction setCollateralTokenParams(address tokenAddr, uint256 minCollateralRatio)
setDiscountRateAdapter
nonpayablefunction setDiscountRateAdapter(address newAdapter)
setDiscountRateMarkup
nonpayablefunction setDiscountRateMarkup(uint256 newDiscountRateMarkup)
setPendingGovernor
nonpayablefunction setPendingGovernor(address newGovernor)
setRepoTokenBlacklist
nonpayablefunction setRepoTokenBlacklist(address repoToken, bool blacklisted)
setRepoTokenConcentrationLimit
nonpayablefunction setRepoTokenConcentrationLimit(uint256 newRepoTokenConcentrationLimit)
setRequiredReserveRatio
nonpayablefunction setRequiredReserveRatio(uint256 newRequiredReserveRatio)
setTermController
nonpayablefunction setTermController(address newTermControllerAddr)
setTimeToMaturityThreshold
nonpayablefunction setTimeToMaturityThreshold(uint256 newTimeToMaturityThreshold)
shutdownWithdraw
nonpayablefunction shutdownWithdraw(uint256 _amount)
submitAuctionOffer
nonpayablefunction submitAuctionOffer(address termAuction, address repoToken, bytes32 idHash, bytes32 offerPriceHash, uint256 purchaseTokenAmount) returns (bytes32[] offerIds)
tendThis
nonpayablefunction tendThis(uint256 _totalIdle)
unpauseDeposit
nonpayablefunction unpauseDeposit()
unpauseStrategy
nonpayablefunction unpauseStrategy()
events
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
errors
AuctionNotOpen
error AuctionNotOpen()
BalanceBelowRequiredReserveRatio
error BalanceBelowRequiredReserveRatio()
DepositPaused
error DepositPaused()
InsufficientLiquidBalance
error InsufficientLiquidBalance(uint256 have, uint256 want)
InvalidRepoToken
error InvalidRepoToken(address token)
InvalidTermAuction
error InvalidTermAuction(address auction)
OfferNotFound
error OfferNotFound()
RepoTokenBlacklisted
error RepoTokenBlacklisted(address repoToken)
RepoTokenConcentrationTooHigh
error RepoTokenConcentrationTooHigh(address repoToken)
TimeToMaturityAboveThreshold
error TimeToMaturityAboveThreshold()
ZeroPurchaseTokenAmount
error ZeroPurchaseTokenAmount()
creation bytecode
0x6101206040523480156200001257600080fd5b5060405162006ec538038062006ec58339810160408190526200003591620008d7565b80516001600160a01b0381166080523060a05260405184906200009e906200006a908490849033908190819060240162000a32565b60408051601f198184030181529190526020810180516001600160e01b03908116634b839d7360e11b17909152620002c616565b505073bb51273d6c746910c7c06fe718f30c936170fed07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55506000805460ff191690556020808201516001600160a01b03908116610100526060830151811660c0526080516040805163313ce56760e01b81529051919092169263313ce56792600480820193918290030181865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000166919062000a75565b6200017390600a62000bad565b60e0526020810151815162000197916001600160a01b03909116906000196200035a565b600a620001a5838262000c4e565b50604080516101408101825261010080516001600160a01b0390811680845260c08051831660208601819052608080890180518616888a01819052600060608a015260a0808c01518816938a01849052998b015190961698880189905260e0808b0151858a018190528b890151918a01829052610120808d0151998b018a9052958c015195909901859052600b80546001600160a01b03199081169097179055600c80548716909417909355600d80548616909617909555600e805485169055600f8054851690911790556010805490931690961790915560119390935560129390935560135560145551620002bd907f7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f5590620004ad565b50505062000d8b565b606060008073bb51273d6c746910c7c06fe718f30c936170fed06001600160a01b031684604051620002f9919062000d1a565b600060405180830381855af49150503d806000811462000336576040519150601f19603f3d011682016040523d82523d6000602084013e6200033b565b606091505b50915091508162000353576040513d806000833e8082fd5b9392505050565b801580620003d85750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620003b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d6919062000d38565b155b620004505760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620004a89185916200051c16565b505050565b620004b98282620005f0565b620005185760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200056b906001600160a01b0385169084906200061d565b90508051600014806200058f5750808060200190518101906200058f919062000d52565b620004a85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000447565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b60606200062e848460008562000636565b949350505050565b606082471015620006995760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000447565b600080866001600160a01b03168587604051620006b7919062000d1a565b60006040518083038185875af1925050503d8060008114620006f6576040519150601f19603f3d011682016040523d82523d6000602084013e620006fb565b606091505b5090925090506200070f878383876200071a565b979650505050505050565b606083156200078e57825160000362000786576001600160a01b0385163b620007865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000447565b50816200062e565b6200062e8383815115620007a55781518083602001fd5b8060405162461bcd60e51b815260040162000447919062000d76565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715620007fd57620007fd620007c1565b60405290565b60005b838110156200082057818101518382015260200162000806565b50506000910152565b600082601f8301126200083b57600080fd5b81516001600160401b0380821115620008585762000858620007c1565b604051601f8301601f19908116603f01168101908282118183101715620008835762000883620007c1565b816040528381528660208588010111156200089d57600080fd5b620008b084602083016020890162000803565b9695505050505050565b80516001600160a01b0381168114620008d257600080fd5b919050565b6000806000838503610180811215620008ef57600080fd5b84516001600160401b03808211156200090757600080fd5b620009158883890162000829565b955060208701519150808211156200092c57600080fd5b506200093b8782880162000829565b93505061014080603f19830112156200095357600080fd5b6200095d620007d7565b91506200096d60408701620008ba565b82526200097d60608701620008ba565b60208301526200099060808701620008ba565b6040830152620009a360a08701620008ba565b6060830152620009b660c08701620008ba565b6080830152620009c960e08701620008ba565b60a08301526101008681015160c08401526101208088015160e085015291870151908301526101609095015194810194909452509093909250565b6000815180845262000a1e81602086016020860162000803565b601f01601f19169290920160200192915050565b600060018060a01b03808816835260a0602084015262000a5660a084018862000a04565b9581166040840152938416606083015250911660809091015292915050565b60006020828403121562000a8857600080fd5b815160ff811681146200035357600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000af157816000190482111562000ad55762000ad562000a9a565b8085161562000ae357918102915b93841c939080029062000ab5565b509250929050565b60008262000b0a5750600162000617565b8162000b195750600062000617565b816001811462000b32576002811462000b3d5762000b5d565b600191505062000617565b60ff84111562000b515762000b5162000a9a565b50506001821b62000617565b5060208310610133831016604e8410600b841016171562000b82575081810a62000617565b62000b8e838362000ab0565b806000190482111562000ba55762000ba562000a9a565b029392505050565b60006200035360ff84168362000af9565b600181811c9082168062000bd357607f821691505b60208210810362000bf457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004a8576000816000526020600020601f850160051c8101602086101562000c255750805b601f850160051c820191505b8181101562000c465782815560010162000c31565b505050505050565b81516001600160401b0381111562000c6a5762000c6a620007c1565b62000c828162000c7b845462000bbe565b8462000bfa565b602080601f83116001811462000cba576000841562000ca15750858301515b600019600386901b1c1916600185901b17855562000c46565b600085815260208120601f198616915b8281101562000ceb5788860151825594840194600190910190840162000cca565b508582101562000d0a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825162000d2e81846020870162000803565b9190910192915050565b60006020828403121562000d4b57600080fd5b5051919050565b60006020828403121562000d6557600080fd5b815180151581146200035357600080fd5b60208152600062000353602083018462000a04565b60805160a05160c05160e05161010051615ff262000ed36000396000818161263f01528181612c5a015281816135a6015261471f0152600081816108d10152818161094d0152818161151b0152818161154801528181611851015281816119fb01528181611a350152818161278a015281816127c401528181612a1f01528181612a8401528181612b6601528181612dae0152612ded015260008181610b2701528181610f710152818161101a015281816110b50152818161116101528181611a9e01528181611c5c01528181611db301528181611eca0152818161202501526120cd015260008181610d1b01526111db0152600081816107a401528181610a7201528181610e1401528181611352015281816113de0152818161255f015281816125a5015281816126e9015281816130c50152818161340101526135d00152615ff26000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806372db6dfc11610167578063aeaaa299116100ce578063e3bafad211610087578063e3bafad2146106ad578063e58bb639146106c0578063ed22088e146106c8578063f235757f146106db578063fb06a3bd146106ee578063fde813a8146105f057610294565b8063aeaaa29914610631578063aff518f314610639578063b7bd869c1461064c578063d19a3bb81461065f578063d547741f14610692578063d8c143f7146106a557610294565b806391d148541161012057806391d14854146105c857806395d89b41146105db5780639d7fb70c146105f0578063a217fddf14610603578063ad5681591461060b578063add5ba4b1461061e57610294565b806372db6dfc1461054f578063740152831461056257806383076af9146105905780638c02ea3a146105a55780638f90ae5a146105b8578063903c2c06146105c057610294565b806346aa2f121161020b5780635c975abb116101c45780635c975abb146104e35780635d265d3f146104ee57806367747e571461052457806369026e88146105375780636bc912e01461053f578063702848131461054757610294565b806346aa2f121461047557806349317f1d1461048a578063503160d9146104925780635134f576146104a55780635157ced5146104b857806354c885e0146104c057610294565b8063176eacd31161025d578063176eacd3146103e5578063248a9ca3146103f85780632f2ff15d1461041c57806336568abe1461042f5780633d6cb57514610442578063442e61aa1461045557610294565b80625446f2146102cf57806301ffc9a7146102e257806304bd46291461030a57806311b4e2531461032b57806312345134146103d2575b73bb51273d6c746910c7c06fe718f30c936170fed03660008037600080366000845af43d6000803e8080156102c8573d6000f35b3d6000fd5b005b6102cd6102dd366004615719565b6106f6565b6102f56102f0366004615745565b610aa7565b60405190151581526020015b60405180910390f35b61031d61031836600461576f565b610ade565b604051908152602001610301565b600b54600c54600d54600e54600f5460105460115460125460135460145461036d996001600160a01b039081169981169881169781169681169516939291908a565b604080516001600160a01b039b8c168152998b1660208b0152978a169789019790975294881660608801529287166080870152951660a085015260c084019490945260e083019390935261010082019290925261012081019190915261014001610301565b6102cd6103e036600461579a565b610ae8565b61031d6103f336600461576f565b610baf565b61031d6104063660046157d3565b6000908152600160208190526040909120015490565b6102cd61042a3660046157ec565b610bf8565b6102cd61043d3660046157ec565b610c23565b6102cd6104503660046157d3565b610ca1565b610468610463366004615811565b610cb5565b6040516103019190615862565b61031d61048336600461576f565b5060001990565b61031d610f10565b6102cd6104a03660046157d3565b610f27565b6102cd6104b33660046157d3565b610f38565b6102cd610fde565b6102f56104ce36600461576f565b60156020526000908152604090205460ff1681565b60005460ff166102f5565b60408051600481526024810182526020810180516001600160e01b031663440368a360e01b1790529051610301916000916158f6565b6102cd6105323660046157d3565b61107c565b6102cd611122565b6104686111a8565b61031d6111b4565b6102cd61055d366004615911565b6111c6565b610575610570366004615719565b611380565b60408051938452602084019290925290820152606001610301565b61059861160a565b6040516103019190615999565b61031d6105b336600461576f565b611616565b61031d611887565b61031d611894565b6102f56105d63660046157ec565b61189e565b6105e36118c9565b60405161030191906159da565b6102cd6105fe3660046157d3565b61195b565b61031d600081565b61031d6106193660046159ed565b611963565b6102cd61062c3660046157d3565b611a65565b6102cd611b0b565b6102cd61064736600461576f565b611b17565b6102cd61065a36600461576f565b611cec565b61067a73bb51273d6c746910c7c06fe718f30c936170fed081565b6040516001600160a01b039091168152602001610301565b6102cd6106a03660046157ec565b611e36565b6102cd611e5c565b6102cd6106bb366004615719565b611e8c565b6102cd611f44565b6102cd6106d63660046157d3565b612094565b6102cd6106e936600461576f565b61213a565b6102cd61218e565b6106fe6121bb565b6001600160a01b038216600090815260156020526040902054829060ff161561074a57604051633d764d2b60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6000821161075757600080fd5b61076083612201565b6107885760405163017dad6760e71b81526001600160a01b0384166004820152602401610741565b60105460009081906107c89060039087906001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000612330565b91509150816107f55760405163017dad6760e71b81526001600160a01b0386166004820152602401610741565b6107ff6000612547565b60006108096126c7565b90506000811161081857600080fd5b60006108238261276f565b90506000811161083257600080fd5b601054604051633580ec1360e11b81526001600160a01b0389811660048301526000921690636b01d82690602401602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190615a22565b601054604051631bf49af760e11b81526001600160a01b03808c166004830152929350600092610943928c928c927f00000000000000000000000000000000000000000000000000000000000000009216906337e935ee906024015b602060405180830381865afa15801561091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093e9190615a22565b6127fc565b90506000610983827f000000000000000000000000000000000000000000000000000000000000000088600b600801548761097e9190615a51565b61296b565b9050808510156109b057604051633bf1b8e760e11b81526004810186905260248101829052604401610741565b60006109c68b8b6109c1858a615a64565b6129fb565b6011549091508111156109ec57604051632391f20360e21b815260040160405180910390fd5b6000856109f98489615a64565b610a0b90670de0b6b3a7640000615a77565b610a159190615a8e565b601254909150811015610a3b57604051631342c8d960e11b815260040160405180910390fd5b610a478c858886612bf8565b610a5083612c37565b610a656001600160a01b038d1633308e612ccf565b610a996001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385612d40565b505050505050505050505050565b60006001600160e01b03198216637965db0b60e01b1480610ad857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610ad86126c7565b600080516020615f9d833981519152610b0081612d70565b604051637948ecd560e01b81526001600160a01b03848116600483015283151560248301527f00000000000000000000000000000000000000000000000000000000000000001690637948ecd590604401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b505050506001600160a01b03929092166000908152601560205260409020805460ff191691151591909117905550565b60006001600160a01b038216610bdb5760405163017dad6760e71b815260006004820152602401610741565b610ad8826000610bf1610bec6126c7565b61276f565b6000612d7a565b60008281526001602081905260409091200154610c1481612d70565b610c1e8383612e50565b505050565b6001600160a01b0381163314610c935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610741565b610c9d8282612ebb565b5050565b610ca9612f22565b610cb281612f59565b50565b6060610cbf6121bb565b6001600160a01b038516600090815260156020526040902054859060ff1615610d0657604051633d764d2b60e11b81526001600160a01b0382166004820152602401610741565b6040516348e4a64960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348e4a6499060240160006040518083038186803b158015610d6557600080fd5b505afa158015610d79573d6000803e3d6000fd5b5050505082600003610d9e5760405163b97ce22960e01b815260040160405180910390fd5b6000610daa8888612f6a565b9050610db66000612547565b6000868152600960205260409020600101548490610dfb6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b88815230602082015260408101889052606081018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080820152610e4f8b85838d878761326a565b95506000610e5b6126c7565b90506000610e688261276f565b905060008111610e7757600080fd5b600081610e8c84670de0b6b3a7640000615a77565b610e969190615a8e565b601254909150811015610ebc57604051631342c8d960e11b815260040160405180910390fd5b6000610eca600080866129fb565b601154909150811115610ef057604051632391f20360e21b815260040160405180910390fd5b610efe8e6000856000612bf8565b50505050505050505095945050505050565b6000610f1a612f22565b610f226136b1565b905090565b610f2f612f22565b610cb2816136d0565b600080516020615f9d833981519152610f5081612d70565b601454604051632efd6ecd60e21b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bbf5bb3490604401600060405180830381600087803b158015610fbd57600080fd5b505af1158015610fd1573d6000803e3d6000fd5b5050506014929092555050565b600080516020615f9d833981519152610ff681612d70565b6002805460ff19169055604080516305ad0e1f60e51b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163b5a1c3e091600480830192600092919082900301818387803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b5050505050565b600080516020615f9d83398151915261109481612d70565b60125460405163627d8a0160e11b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c4fb140290604401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050506012929092555050565b600080516020615f9d83398151915261113a81612d70565b6002805460ff1916600117905560408051631022cfd760e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631022cfd791600480830192600092919082900301818387803b15801561106157600080fd5b6060610f226007613706565b6000610f226111c16126c7565b6137c2565b6040516348e4a64960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348e4a6499060240160006040518083038186803b15801561122557600080fd5b505afa158015611239573d6000803e3d6000fd5b5050505061124683612201565b61126e5760405163f14a3cf960e01b81526001600160a01b0384166004820152602401610741565b60008390506000816001600160a01b031663505d799e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190615ab0565b60405163720e52c560e01b81529091506001600160a01b0382169063720e52c5906113089087908790600401615acd565b600060405180830381600087803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b50506010546113769250600791506003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006137fe565b6110756000612547565b60008060008061138e6126c7565b90506000806001600160a01b03881615611580576113ab88612201565b6113d35760405163017dad6760e71b81526001600160a01b0389166004820152602401610741565b60008061140260038b7f0000000000000000000000000000000000000000000000000000000000000000613c7a565b915091508161142f5760405163017dad6760e71b81526001600160a01b038b166004820152602401610741565b601054604051633580ec1360e11b81526001600160a01b038c811660048301526000921690636b01d82690602401602060405180830381865afa15801561147a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149e9190615a22565b601054604051631bf49af760e11b81526001600160a01b038e81166004830152929350600092909116906337e935ee90602401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190615a22565b90506115408c8c7f0000000000000000000000000000000000000000000000000000000000000000846127fc565b9550611579867f000000000000000000000000000000000000000000000000000000000000000085600b600801548661097e9190615a51565b9450505050505b61158f88886109c18487615a64565b95506001600160a01b038816156115b7576115b488836115ae8661276f565b84612d7a565b94505b60006115c28461276f565b9050806000036115d557600094506115ff565b806115e08386615a64565b6115f290670de0b6b3a7640000615a77565b6115fc9190615a8e565b94505b505050509250925092565b6060610f226003613ece565b6001600160a01b03811660009081526005602052604081205481901561183957600f5460405163e7e4b8db60e01b81526001600160a01b038581166004830152600092169063e7e4b8db90602401602060405180830381865afa158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190615b06565b156116bc5750600f546001600160a01b0316611752565b600e546001600160a01b03161580159061173f5750600e5460405163e7e4b8db60e01b81526001600160a01b0386811660048301529091169063e7e4b8db90602401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190615b06565b156117525750600e546001600160a01b03165b60105460405163739d020f60e11b81526001600160a01b038381166004830152808716602483015261183592879291169063e73a041e90604401602060405180830381865afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd9190615a22565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190615a22565b9150505b601054611876906007906003906001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000087613f96565b6118809082615a51565b9392505050565b6000610f22610bec6126c7565b6000610f226126c7565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600a80546118d890615b23565b80601f016020809104026020016040519081016040528092919081815260200182805461190490615b23565b80156119515780601f1061192657610100808354040283529160200191611951565b820191906000526020600020905b81548152906001019060200180831161193457829003601f168201915b5050505050905090565b610cb2612f22565b600080846001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190615b57565b5050601054604051631bf49af760e11b81526001600160a01b03808a166004830152939450600093611a2d9350899288927f000000000000000000000000000000000000000000000000000000000000000092909116906337e935ee906024016108fd565b9050611a5b817f0000000000000000000000000000000000000000000000000000000000000000848861296b565b9695505050505050565b600080516020615f9d833981519152611a7d81612d70565b6013546040516309209da160e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906309209da190604401600060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b5050506013929092555050565b611b156000612547565b565b600080516020615f9d833981519152611b2f81612d70565b6001600160a01b038216611b4257600080fd5b60006001600160a01b0316826001600160a01b031663025f1a5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf9190615ab0565b6001600160a01b031603611bc257600080fd5b6003546001600160a01b03165b6001600160a01b03811615611c2f57611be781612201565b611c0f5760405163017dad6760e71b81526001600160a01b0382166004820152602401610741565b6001600160a01b0390811660009081526004602052604090205416611bcf565b600f546040516333d864dd60e21b81526001600160a01b03918216600482018190528583166024830152917f0000000000000000000000000000000000000000000000000000000000000000169063cf61937490604401600060405180830381600087803b158015611ca057600080fd5b505af1158015611cb4573d6000803e3d6000fd5b5050600e80546001600160a01b039485166001600160a01b031991821617909155600f80549790941696169590951790915550505050565b600080516020615f9d833981519152611d0481612d70565b600082905060006001600160a01b0316816001600160a01b03166342a9d1316040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d769190615ab0565b6001600160a01b031603611d8957600080fd5b6010546040516399146dff60e01b81526001600160a01b03918216600482015284821660248201527f0000000000000000000000000000000000000000000000000000000000000000909116906399146dff90604401600060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b5050601080546001600160a01b0319166001600160a01b03949094169390931790925550505050565b60008281526001602081905260409091200154611e5281612d70565b610c1e8383612ebb565b600080516020615f9d833981519152611e7481612d70565b611e7c6142bb565b506002805460ff19166001179055565b600080516020615f9d833981519152611ea481612d70565b604051633759d6ad60e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000001690636eb3ad5a90604401600060405180830381600087803b158015611f0e57600080fd5b505af1158015611f22573d6000803e3d6000fd5b505050506001600160a01b039290921660009081526006602052604090205550565b60025461010090046001600160a01b03163314611f965760405162461bcd60e51b815260206004820152601060248201526f10b832b73234b733a3b7bb32b93737b960811b6044820152606401610741565b600d54611fbb90600080516020615f9d833981519152906001600160a01b0316612ebb565b600254611fe590600080516020615f9d8339815191529061010090046001600160a01b0316612e50565b600254600d80546101009092046001600160a01b039081166001600160a01b0319909316831790915560405163a12f83a960e01b815260048101929092527f0000000000000000000000000000000000000000000000000000000000000000169063a12f83a990602401600060405180830381600087803b15801561206957600080fd5b505af115801561207d573d6000803e3d6000fd5b505060028054610100600160a81b03191690555050565b600080516020615f9d8339815191526120ac81612d70565b6011546040516368e5255760e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906368e5255790604401600060405180830381600087803b15801561211957600080fd5b505af115801561212d573d6000803e3d6000fd5b5050506011929092555050565b600080516020615f9d83398151915261215281612d70565b6001600160a01b03821661216557600080fd5b50600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080516020615f9d8339815191526121a681612d70565b6121ae614315565b506002805460ff19169055565b60005460ff1615611b155760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610741565b600f54600e546000916001600160a01b039081169116811580159061228b575060405163e7e4b8db60e01b81526001600160a01b03858116600483015283169063e7e4b8db90602401602060405180830381865afa158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b9190615b06565b1561229a575060019392505050565b6001600160a01b03811615801590612317575060405163e7e4b8db60e01b81526001600160a01b03858116600483015282169063e7e4b8db90602401602060405180830381865afa1580156122f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123179190615b06565b15612326575060019392505050565b5060009392505050565b6001600160a01b03831660009081526002850160205260408120548190801561246c57856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190615b57565b509193505050428210156123cd57600092505061253e565b604051633580ec1360e11b81526001600160a01b03878116600483015260009190871690636b01d82690602401602060405180830381865afa925050508015612433575060408051601f3d908101601f1916820190925261243091810190615a22565b60015b1561243b5790505b801561246657808214612466576001600160a01b038716600090815260028901602052604090208190555b50612538565b604051633580ec1360e11b81526001600160a01b038781166004830152861690636b01d82690602401602060405180830381865afa9250505080156124ce575060408051601f3d908101601f191682019092526124cb91810190615a22565b60015b6124dc57506000915061253e565b80156124e857806124eb565b60015b91505060006124fb888887613c7a565b935090508061250f5760009350505061253e565b612519888861434e565b506001600160a01b038616600090815260028801602052604090208190555b60019250505b94509492505050565b601054612583906007906003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006137fe565b61258d60036144e2565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190615a22565b9050818111156126b457604051636e553f6560e01b815282820360048201523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af1158015612690573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190615a22565b81811015610c9d57610c9d818303612c37565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615a22565b90508061275f614707565b6127699190615a51565b91505090565b6010546000906127af906007906003906001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000085613f96565b6010546127e8906003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006147f9565b6127f29084615a51565b610ad89190615a51565b600080856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128619190615bac565b61286c90600a615cb3565b90506000866001600160a01b031663ef4474cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d29190615a22565b905083600003612912576128ee670de0b6b3a764000083615a77565b856128f98884615a77565b6129039190615a77565b61290d9190615a8e565b612960565b612924670de0b6b3a764000083615a77565b61293690670de0b6b3a7640000615a77565b85876129428785615a77565b61294c9190615a77565b6129569190615a77565b6129609190615a8e565b979650505050505050565b60008083421161299e576301da9c00856129854287615a64565b61298f9190615a77565b6129999190615a8e565b6129a1565b60005b9050670de0b6b3a76400006129b68285615a77565b6129c09190615a8e565b6129ca9086615a51565b6129d48688615a77565b6129de9190615a8e565b91508582116129ed57816129ef565b855b9150505b949350505050565b60105460009081908190819081908190612a43906003906001600160a01b03168b8b7f00000000000000000000000000000000000000000000000000000000000000006149a6565b91945092509050612a548386615a51565b9450612a608285615a51565b60105490945060009081908190612aa8906007906003906001600160a01b03168f8f7f0000000000000000000000000000000000000000000000000000000000000000614b08565b91945092509050612ab98389615a51565b9750612ac58288615a51565b965083158015612ad3575080155b8015612ae757506001600160a01b038c1615155b15612bb257601054604051631bf49af760e11b81526001600160a01b038e8116600483015260009216906337e935ee90602401602060405180830381865afa158015612b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5b9190615a22565b90506000612b8b8e8e7f0000000000000000000000000000000000000000000000000000000000000000856127fc565b9050612b97818a615a51565b9850612ba38e82614dc6565b612bad908b615a51565b995050505b86158015612bbe575089155b15612bd457600098505050505050505050611880565b612bde8a88615a51565b612be89089615a8e565b9c9b505050505050505050505050565b6000612c0685858585612d7a565b60145490915081111561107557604051633cb36e3560e11b81526001600160a01b0386166004820152602401610741565b604051632d182be560e21b815260048101829052306024820181905260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b460af94906064016020604051808303816000875af1158015612cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9d9190615a22565b6040516001600160a01b0380851660248301528316604482015260648101829052612d3a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614dfe565b50505050565b6040516001600160a01b038316602482015260448101829052610c1e90849063a9059cbb60e01b90606401612d03565b610cb28133614ed3565b60008084612d8787611616565b612d919190615a51565b9050600083612da08787615a51565b612daa9190615a64565b90507f0000000000000000000000000000000000000000000000000000000000000000612ddf83670de0b6b3a7640000615a77565b612de99190615a8e565b91507f0000000000000000000000000000000000000000000000000000000000000000612e1e82670de0b6b3a7640000615a77565b612e289190615a8e565b90508015612e43578061290383670de0b6b3a7640000615a77565b5060009695505050505050565b612e5a828261189e565b610c9d5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b612ec5828261189e565b15610c9d5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b333014611b155760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b6044820152606401610741565b612f616121bb565b610cb281612547565b6000612f7583612201565b612f9d5760405163f14a3cf960e01b81526001600160a01b0384166004820152602401610741565b612fa682612201565b612fce5760405163017dad6760e71b81526001600160a01b0383166004820152602401610741565b816001600160a01b031663cc5b6e4a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130309190615a22565b836001600160a01b031663cc5b6e4a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130929190615a22565b146130bb5760405163017dad6760e71b81526001600160a01b0383166004820152602401610741565b60006130e96003847f0000000000000000000000000000000000000000000000000000000000000000613c7a565b509050806131155760405163017dad6760e71b81526001600160a01b0384166004820152602401610741565b6000846001600160a01b031663505d799e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131799190615ab0565b9050806001600160a01b031663eb54f9ec6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd9190615a22565b4211158061324c5750806001600160a01b031663ba829d716040518163ffffffff1660e01b8152600401602060405180830381865afa158015613224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132489190615a22565b4210155b156129f35760405163f046007760e01b815260040160405180910390fd5b60606000866001600160a01b031663357a77d26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d09190615ab0565b60408051600180825281830190925291925060009190816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816132eb579050509050868160008151811061333c5761333c615cd8565b60200260200101819052508385111561342b57838503600061335c6126c7565b90508181101561338957604051633bf1b8e760e11b81526004810182905260248101839052604401610741565b61339282612c37565b613428846001600160a01b0316635c4b440e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f79190615ab0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169084614f2c565b50505b60405163db875b6960e01b81526001600160a01b0389169063db875b6990613457908490600401615cee565b6000604051808303816000875af1158015613476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261349e9190810190615d99565b925082516000036134c257604051636df5846d60e01b815260040160405180910390fd5b8360000361353e57613539836000815181106134e0576134e0615cd8565b60200260200101516040518060800160405280896001600160a01b031681526020018a6060015181526020018c6001600160a01b031681526020018b6001600160a01b031681525060076150419092919063ffffffff16565b613581565b6000600760020160008560008151811061355a5761355a615cd8565b60200260200101518152602001908152602001600020905087606001518160010181905550505b838510156136a5576040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691636e553f65917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190615a22565b6040516001600160e01b031960e084901b16815260048101919091523060248201526044016020604051808303816000875af115801561367f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a39190615a22565b505b50509695505050505050565b60006136bb6121bb565b6136c56000612547565b610f22610bec6126c7565b6136d86121bb565b60025460ff16156136fc5760405163035edea360e41b815260040160405180910390fd5b610cb26000612547565b6060600061371383615265565b905080156137bc578067ffffffffffffffff81111561373457613734615cc2565b60405190808252806020026020018201604052801561375d578160200160208202803683370190505b5083549092506000905b80156137b95780848361377981615e3f565b94508151811061378b5761378b615cd8565b6020026020010181815250506137b285826000908152600191909101602052604090205490565b9050613767565b50505b50919050565b6000806137ce8361276f565b9050806000036137e15750600092915050565b806137f484670de0b6b3a7640000615a77565b6118809190615a8e565b835415612d3a578354805b8115613c72576000828152600287810160209081526040808420815160808101835281546001600160a01b0390811682526001808401548387015295830154811682850152600390920154821660608201908152888752948c0190935281852054935191516372e3a5b160e01b8152600481018890529294929116906372e3a5b19060240160e060405180830381865afa1580156138ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138cf9190615e58565b608001519050600083604001516001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393d9190615b06565b15613abe57508251600190600090819061395a908c908c8c612330565b915091508115801561396b57508042115b15613ab7576000866000015190506000816001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa1580156139b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139dd9190615b57565b506040516370a0823160e01b815230600482018190529194508493506001600160a01b038085169350637e237e899291908716906370a0823190602401602060405180830381865afa158015613a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5b9190615a22565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613aa157600080fd5b505af1925050508015613ab2575060015b505050505b5050613bea565b83604001516001600160a01b0316638dfea9e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b249190615b06565b15613bde57604080516001808252818301909252600091602080830190803683370190505090508681600081518110613b5f57613b5f615cd8565b60200260200101818152505084606001516001600160a01b031663720e52c5826040518263ffffffff1660e01b8152600401613b9b9190615862565b600060405180830381600087803b158015613bb557600080fd5b505af1925050508015613bc6575060015b613bd35760009150613bd8565b600191505b50613bea565b81600003613bea575060015b8015613c655760008681526001808c01602090815260408084208490556002808f01909252832080546001600160a01b0319908116825592810193909355820180548216905560039091018054909116905589548603613c4c57828a55613c65565b600085815260018b016020526040902083905593945084935b5090939250613809915050565b505050505050565b600080600080856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015613cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce29190615b57565b929550909350909150506001600160a01b0380831690861614613d0a57600093505050613ec6565b42831015613d1d57600093505050613ec6565b6000816001600160a01b031663190e80126040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d819190615bac565b60ff16905060005b81811015613ebd5760405163172c48c760e01b8152600481018290526000906001600160a01b0385169063172c48c790602401602060405180830381865afa158015613dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfd9190615ab0565b6001600160a01b038116600090815260038c016020526040812054919250819003613e315760009750505050505050613ec6565b6040516320db25d560e01b81526001600160a01b0383811660048301528291908716906320db25d590602401602060405180830381865afa158015613e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e9e9190615a22565b1015613eb35760009750505050505050613ec6565b5050600101613d89565b50600194505050505b935093915050565b60606000613edb836152a5565b905080156137bc578067ffffffffffffffff811115613efc57613efc615cc2565b604051908082528060200260200182016040528015613f25578160200160208202803683370190505b5083549092506000906001600160a01b03165b6001600160a01b038116156137b957808483613f5381615e3f565b945081518110613f6557613f65615cd8565b60200260200101906001600160a01b031690816001600160a01b031681525050613f8f85826152f8565b9050613f38565b8454600090613fa7575060006142b2565b85546000905b80156142af57600081815260028901602052604090206001600160a01b03851615801590613fe8575080546001600160a01b03868116911614155b1561400457506000908152600188016020526040902054613fad565b60038101546040516372e3a5b160e01b8152600481018490526000916001600160a01b0316906372e3a5b19060240160e060405180830381865afa158015614050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140749190615e58565b6080015190508160020160009054906101000a90046001600160a01b03166001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f39190615b06565b8015614118575081546001600160a01b0316600090815260028a016020526040902054155b1561428a5760028201546001600160a01b038581169116146142855781546040516370a0823160e01b81523060048201526000916141da916001600160a01b039091169081906370a0823190602401602060405180830381865afa158015614184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a89190615a22565b8554604051631bf49af760e11b81526001600160a01b0391821660048201528c918e16906337e935ee906024016108fd565b83549091506142669082908a906141f9906001600160a01b031661531b565b8654604051633580ec1360e11b81526001600160a01b039182166004820152908e1690636b01d82690602401602060405180830381865afa158015614242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190615a22565b6142709087615a51565b60028401549096506001600160a01b03169450505b614297565b6142948186615a51565b94505b50506000908152600188016020526040902054613fad565b50505b95945050505050565b6142c36121bb565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142f83390565b6040516001600160a01b03909116815260200160405180910390a1565b61431d615389565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336142f8565b81546001600160a01b031680614397575081546001600160a01b039091166001600160a01b03199182168117835560009081526001909201602052604090912080549091169055565b60006143a28361531b565b905060005b6001600160a01b0383161561107557836001600160a01b0316836001600160a01b031603156110755760006143db8461531b565b905080831015614478576001600160a01b0382166144115785546001600160a01b0319166001600160a01b038616178655614442565b6001600160a01b038281166000908152600188016020526040902080546001600160a01b0319169187169190911790555b506001600160a01b038481166000908152600187016020526040902080546001600160a01b031916918516919091179055611075565b600061448487866152f8565b90506001600160a01b0381166144d85750506001600160a01b03808416600090815260018701602052604080822080549388166001600160a01b031994851681179091558252902080549091169055611075565b9391506143a79050565b80546001600160a01b03166144f45750565b80546001600160a01b0316805b6001600160a01b03821615610c1e5760004261451c8461531b565b11612d3a576040516370a0823160e01b815230600482015260009081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e9190615a22565b90508015614669576000856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa1580156145d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fa9190615b57565b50604051637e237e8960e01b8152306004820152602481018690529093506001600160a01b0384169250637e237e899150604401600060405180830381600087803b15801561464857600080fd5b505af1925050508015614659575060015b1561466357600192505b5061466e565b600191505b61467886866152f8565b925081156146fd5785546001600160a01b03908116908616036146af5785546001600160a01b0319166001600160a01b0384161786555b6001600160a01b038085166000908152600188016020908152604080832080548589166001600160a01b03199182161790915593891683528083208054909416909355600289019052908120555b5050919050614501565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a9082906370a0823190602401602060405180830381865afa158015614776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061479a9190615a22565b6040518263ffffffff1660e01b81526004016147b891815260200190565b602060405180830381865afa1580156147d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f229190615a22565b82546000906001600160a01b031661481357506000611880565b83546001600160a01b03165b6001600160a01b0381161561499e5760006148398261531b565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015614883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a79190615a22565b604051633580ec1360e11b81526001600160a01b038581166004830152919250600091881690636b01d82690602401602060405180830381865afa1580156148f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149179190615a22565b604051631bf49af760e11b81526001600160a01b03808716600483015291925060009161495591879186918b918d16906337e935ee906024016108fd565b90504284111561497c5761496b8188868561296b565b6149759087615a51565b9550614989565b6149868187615a51565b95505b61499389866152f8565b94505050505061481f565b509392505050565b8454600090819081906001600160a01b03166149ca57506000915081905080614afd565b87546001600160a01b03165b6001600160a01b03811615614afb576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a509190615a22565b90508015614ae957816001600160a01b0316886001600160a01b031603614a8257614a7b8782615a51565b9050600192505b604051631bf49af760e11b81526001600160a01b038084166004830152600091614abe91859185918b91908f16906337e935ee906024016108fd565b90506000614acc8483614dc6565b9050614ad88188615a51565b9650614ae48287615a51565b955050505b614af38a836152f8565b9150506149d6565b505b955095509592505050565b855460009081908190614b2357506000915081905080614dba565b88546000905b8015614db757600081815260028c016020526040812080549091906001600160a01b03808c16911603614b6157506001935087614d65565b60038201546040516372e3a5b160e01b8152600481018590526001600160a01b03909116906372e3a5b19060240160e060405180830381865afa158015614bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd09190615e58565b6080015190508160020160009054906101000a90046001600160a01b03166001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c4f9190615b06565b8015614c74575081546001600160a01b0316600090815260028d016020526040902054155b15614d655760028201546001600160a01b03858116911614614d655781546040516370a0823160e01b8152306004820152614d52916001600160a01b03169081906370a0823190602401602060405180830381865afa158015614cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cff9190615a22565b8a8e6001600160a01b03166337e935ee8760000160009054906101000a90046001600160a01b03166040518263ffffffff1660e01b81526004016108fd91906001600160a01b0391909116815260200190565b60028301546001600160a01b0316945090505b8015614d9f578154600090614d83906001600160a01b031683614dc6565b9050614d8f8189615a51565b9750614d9b8288615a51565b9650505b5050600090815260018b016020526040902054614b29565b50505b96509650969350505050565b600080614dd28461531b565b905042811115614df7576000614de7826153d2565b9050614df38482615a77565b9250505b5092915050565b6000614e53826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166153de9092919063ffffffff16565b9050805160001480614e74575080806020019051810190614e749190615b06565b610c1e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610741565b614edd828261189e565b610c9d57614eea816153ed565b614ef58360206153ff565b604051602001614f06929190615ef4565b60408051601f198184030181529082905262461bcd60e51b8252610741916004016159da565b801580614fa65750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015614f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa49190615a22565b155b6150115760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610741565b6040516001600160a01b038316602482015260448101829052610c1e90849063095ea7b360e01b90606401612d03565b60008360000154905081604001516001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561508c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150b09190615b06565b156150ba57600080fd5b8061513a575081835560009182526001808401602090815260408085208590556002958601825293849020835181546001600160a01b03199081166001600160a01b039283161783559285015193820193909355938301519484018054821695831695909517909455606090910151600390920180549093169116179055565b60005b81156151f6578184146151f657600082815260028087016020526040918290200154908401516001600160a01b039182169181168211156151b3578261518557858755615199565b600083815260018801602052604090208690555b5050600084815260018601602052604090208290556151f6565b6000848152600188016020526040902054806151eb5750505060008281526001860160205260408082208690558582528120556151f6565b93925061513d915050565b5050600091825260029283016020908152604092839020825181546001600160a01b039182166001600160a01b03199182161783559284015160018301559383015194810180549585169583169590951790945560609091015160039093018054939092169216919091179055565b805460009061527657506000919050565b81545b80156137bc578161528981615e3f565b6000928352600185016020526040909220549192506152799050565b80546000906001600160a01b03166152bf57506000919050565b81546001600160a01b03165b6001600160a01b038116156137bc57816152e481615e3f565b9250506152f183826152f8565b90506152cb565b6001600160a01b0380821660009081526001840160205260409020541692915050565b6000816001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa15801561535b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061537f9190615b57565b5091949350505050565b60005460ff16611b155760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610741565b6000610ad84283615a64565b60606129f3848460008561559b565b6060610ad86001600160a01b03831660145b6060600061540e836002615a77565b615419906002615a51565b67ffffffffffffffff81111561543157615431615cc2565b6040519080825280601f01601f19166020018201604052801561545b576020820181803683370190505b509050600360fc1b8160008151811061547657615476615cd8565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106154a5576154a5615cd8565b60200101906001600160f81b031916908160001a90535060006154c9846002615a77565b6154d4906001615a51565b90505b600181111561554c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061550857615508615cd8565b1a60f81b82828151811061551e5761551e615cd8565b60200101906001600160f81b031916908160001a90535060049490941c9361554581615f69565b90506154d7565b5083156118805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610741565b6060824710156155fc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610741565b600080866001600160a01b031685876040516156189190615f80565b60006040518083038185875af1925050503d8060008114615655576040519150601f19603f3d011682016040523d82523d6000602084013e61565a565b606091505b509150915061296087838387606083156156d55782516000036156ce576001600160a01b0385163b6156ce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610741565b50816129f3565b6129f383838151156156ea5781518083602001fd5b8060405162461bcd60e51b815260040161074191906159da565b6001600160a01b0381168114610cb257600080fd5b6000806040838503121561572c57600080fd5b823561573781615704565b946020939093013593505050565b60006020828403121561575757600080fd5b81356001600160e01b03198116811461188057600080fd5b60006020828403121561578157600080fd5b813561188081615704565b8015158114610cb257600080fd5b600080604083850312156157ad57600080fd5b82356157b881615704565b915060208301356157c88161578c565b809150509250929050565b6000602082840312156157e557600080fd5b5035919050565b600080604083850312156157ff57600080fd5b8235915060208301356157c881615704565b600080600080600060a0868803121561582957600080fd5b853561583481615704565b9450602086013561584481615704565b94979496505050506040830135926060810135926080909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561589a5783518352928401929184019160010161587e565b50909695505050505050565b60005b838110156158c15781810151838201526020016158a9565b50506000910152565b600081518084526158e28160208601602086016158a6565b601f01601f19169290920160200192915050565b82151581526040602082015260006129f360408301846158ca565b60008060006040848603121561592657600080fd5b833561593181615704565b9250602084013567ffffffffffffffff8082111561594e57600080fd5b818601915086601f83011261596257600080fd5b81358181111561597157600080fd5b8760208260051b850101111561598657600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561589a5783516001600160a01b0316835292840192918401916001016159b5565b60208152600061188060208301846158ca565b600080600060608486031215615a0257600080fd5b8335615a0d81615704565b95602085013595506040909401359392505050565b600060208284031215615a3457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ad857610ad8615a3b565b81810381811115610ad857610ad8615a3b565b8082028115828204841417610ad857610ad8615a3b565b600082615aab57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215615ac257600080fd5b815161188081615704565b6020808252810182905260006001600160fb1b03831115615aed57600080fd5b8260051b80856040850137919091016040019392505050565b600060208284031215615b1857600080fd5b81516118808161578c565b600181811c90821680615b3757607f821691505b6020821081036137bc57634e487b7160e01b600052602260045260246000fd5b60008060008060808587031215615b6d57600080fd5b845193506020850151615b7f81615704565b6040860151909350615b9081615704565b6060860151909250615ba181615704565b939692955090935050565b600060208284031215615bbe57600080fd5b815160ff8116811461188057600080fd5b600181815b80851115615c0a578160001904821115615bf057615bf0615a3b565b80851615615bfd57918102915b93841c9390800290615bd4565b509250929050565b600082615c2157506001610ad8565b81615c2e57506000610ad8565b8160018114615c445760028114615c4e57615c6a565b6001915050610ad8565b60ff841115615c5f57615c5f615a3b565b50506001821b610ad8565b5060208310610133831016604e8410600b8410161715615c8d575081810a610ad8565b615c978383615bcf565b8060001904821115615cab57615cab615a3b565b029392505050565b600061188060ff841683615c12565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b82811015615d5b57815180518552868101516001600160a01b0390811688870152868201518787015260608083015190870152608091820151169085015260a09093019290850190600101615d0b565b5091979650505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615d9157615d91615cc2565b604052919050565b60006020808385031215615dac57600080fd5b825167ffffffffffffffff80821115615dc457600080fd5b818501915085601f830112615dd857600080fd5b815181811115615dea57615dea615cc2565b8060051b9150615dfb848301615d68565b8181529183018401918481019088841115615e1557600080fd5b938501935b83851015615e3357845182529385019390850190615e1a565b98975050505050505050565b600060018201615e5157615e51615a3b565b5060010190565b600060e08284031215615e6a57600080fd5b60405160e0810181811067ffffffffffffffff82111715615e8d57615e8d615cc2565b604052825181526020830151615ea281615704565b8060208301525060408301516040820152606083015160608201526080830151608082015260a0830151615ed581615704565b60a082015260c0830151615ee88161578c565b60c08201529392505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615f2c8160178501602088016158a6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615f5d8160288401602088016158a6565b01602801949350505050565b600081615f7857615f78615a3b565b506000190190565b60008251615f928184602087016158a6565b919091019291505056fe7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f55a2646970667358221220c320df05707973b4e72c119cdc6020fd317938d1c12903b6743070ed1749467864736f6c63430008170033000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000252231882fb38481497f3c767469106297c8d93b00000000000000000000000022eb9ab4ca9914d5821e05256f0efec2f675f59e000000000000000000000000945c7360daad6f888266fe7d67634381268cd2e90000000000000000000000003210cf0892b794a9403f958fdb94ae2e13ac451f00000000000000000000000021fc7b250ccaeecdb2abb38e04617d1f24d987720000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000003b53800000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d4556204361706974616c20455448000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107473764d45564361706974616c45544800000000000000000000000000000000