[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyTermContractPaired", "type": "error" }, { "inputs": [], "name": "BorrowerNotInShortfall", "type": "error" }, { "inputs": [], "name": "CallerNotBorrower", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "CollateralBelowMaintenanceRatios", "type": "error" }, { "inputs": [], "name": "CollateralDepositClosed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "CollateralTokenNotAllowed", "type": "error" }, { "inputs": [], "name": "CollateralWithdrawalClosed", "type": "error" }, { "inputs": [], "name": "DefaultsClosed", "type": "error" }, { "inputs": [], "name": "ExceedsNetExposureCapOnLiquidation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "collateralToken", "type": "address" } ], "name": "InsufficientCollateralForLiquidationRepayment", "type": "error" }, { "inputs": [], "name": "InsufficientCollateralForRedemption", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "message", "type": "string" } ], "name": "InvalidParameters", "type": "error" }, { "inputs": [], "name": "LiquidationsPaused", "type": "error" }, { "inputs": [], "name": "RepaymentAmountLargerThanAllowed", "type": "error" }, { "inputs": [], "name": "SelfLiquidationNotPermitted", "type": "error" }, { "inputs": [], "name": "ShortfallLiquidationsClosed", "type": "error" }, { "inputs": [], "name": "TermRepurchaseWindowOpen", "type": "error" }, { "inputs": [], "name": "TotalRepaymentGreaterThangetBorrowerRepurchaseObligation", "type": "error" }, { "inputs": [], "name": "UnlockAmountGreaterThanCollateralBalance", "type": "error" }, { "inputs": [], "name": "ZeroAddressContractPaired", "type": "error" }, { "inputs": [], "name": "ZeroBorrowerRepurchaseObligation", "type": "error" }, { "inputs": [], "name": "ZeroCollateralBalance", "type": "error" }, { "inputs": [], "name": "ZeroLiquidationNotPermitted", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "AUCTION_LOCKER", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEVOPS_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROLLOVER_MANAGER", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROLLOVER_TARGET_AUCTIONEER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SERVICER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "acceptRolloverCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rolloverAuction", "type": "address" } ], "name": "approveRolloverAuction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "auctionLockCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "auctionUnlockCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256[]", "name": "closureAmounts", "type": "uint256[]" } ], "name": "batchDefault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256[]", "name": "closureAmounts", "type": "uint256[]" } ], "name": "batchLiquidation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256[]", "name": "closureRepoTokenAmounts", "type": "uint256[]" } ], "name": "batchLiquidationWithRepoToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amountToLock", "type": "uint256" } ], "name": "calculateMintableExposure", "outputs": [ { "components": [ { "internalType": "uint256", "name": "mantissa", "type": "uint256" } ], "internalType": "struct ExponentialNoError.Exp", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "collateralTokens", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deMinimisMarginThreshold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "encumberedCollateralRemaining", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "externalLockCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "externalUnlockCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" } ], "name": "getCollateralBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" } ], "name": "getCollateralBalances", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" } ], "name": "getCollateralMarketValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "initialCollateralRatios", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "termRepoId_", "type": "string" }, { "internalType": "uint256", "name": "liquidateDamangesDueToProtocol_", "type": "uint256" }, { "internalType": "uint256", "name": "netExposureCapOnLiquidation_", "type": "uint256" }, { "internalType": "uint256", "name": "deMinimisMarginThreshold_", "type": "uint256" }, { "internalType": "address", "name": "purchaseToken_", "type": "address" }, { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "initialCollateralRatio", "type": "uint256" }, { "internalType": "uint256", "name": "maintenanceRatio", "type": "uint256" }, { "internalType": "uint256", "name": "liquidatedDamage", "type": "uint256" } ], "internalType": "struct Collateral[]", "name": "collateralTokens_", "type": "tuple[]" }, { "internalType": "contract ITermEventEmitter", "name": "emitter_", "type": "address" }, { "internalType": "address", "name": "termInitializer_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" } ], "name": "isBorrowerInShortfall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address[]", "name": "collateralTokenAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "collateralTokenAmounts", "type": "uint256[]" } ], "name": "journalBidCollateralToCollateralManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "liquidateDamangesDueToProtocol", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "liquidatedDamages", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidationsPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maintenanceCollateralRatios", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintOpenExposureLockCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "netExposureCapOnLiquidation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numOfAcceptedCollateralTokens", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "termRepoLocker_", "type": "address" }, { "internalType": "address", "name": "termRepoServicer_", "type": "address" }, { "internalType": "address", "name": "termAuctionBidLocker_", "type": "address" }, { "internalType": "address", "name": "termAuction_", "type": "address" }, { "internalType": "address", "name": "termController_", "type": "address" }, { "internalType": "address", "name": "termPriceOracle_", "type": "address" }, { "internalType": "address", "name": "termRepoRolloverManager_", "type": "address" }, { "internalType": "address", "name": "devopsMultisig_", "type": "address" }, { "internalType": "address", "name": "adminWallet_", "type": "address" } ], "name": "pairTermContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseLiquidations", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "contract TermAuction", "name": "auction", "type": "address" }, { "internalType": "contract ITermAuctionBidLocker", "name": "termAuctionBidLocker", "type": "address" }, { "internalType": "contract ITermAuctionOfferLocker", "name": "termAuctionOfferLocker", "type": "address" } ], "internalType": "struct TermAuctionGroup", "name": "termAuctionGroup", "type": "tuple" } ], "name": "reopenToNewAuction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoLocker", "outputs": [ { "internalType": "contract ITermRepoLocker", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "rolloverProportion", "type": "uint256" }, { "internalType": "address", "name": "rolloverTermRepoLocker", "type": "address" } ], "name": "transferRolloverCollateral", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" } ], "name": "unlockCollateralOnRepurchase", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpauseLiquidations", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161583a6200011f60003960008181611269015281816112a90152818161192d0152818161196d01526119e5015261583a6000f3fe6080604052600436106102955760003560e01c8063559e4fad1161015b578063a11d52f5116100c7578063a11d52f514610819578063a217fddf1461082e578063a95c4d6214610843578063b7d5820b14610864578063c066bc0e146108ab578063c180ead1146108c0578063c526c45c146108e0578063cc5b6e4a14610900578063d547741f14610916578063de7f872e14610936578063e0623e1414610956578063e1cdd05814610976578063fd5d357a1461098c578063fe05281a146109ac57600080fd5b8063559e4fad14610682578063578db957146106a25780635c4b440e146106c257806367af01d0146106e35780636a509f551461071257806375b238fc1461072757806378c2b2c614610749578063790cb4911461075f57806382f049ab1461077f5780638f6d0f111461079f57806391d14854146107b95780639210632f146107d957806394a7cfe8146107f957600080fd5b80632b56d95e116102055780632b56d95e146104b25780632f2ff15d146104d257806336568abe146104f25780633659cfe6146105125780633718373f1461053257806337843bc61461055457806337cb26f5146105745780633d0dda781461058a5780634055008a146105b857806343551d0d146105d857806348717eb7146106065780634f1ef2861461062657806352d1902d1461063957806354fd4d501461064e57600080fd5b806301ffc9a71461029a57806302b65fb0146102cf57806309a01608146102ff57806312a900691461032157806316febdd314610343578063172c48c714610363578063190e801214610390578063201a6625146103c257806320db25d5146103e45780632391281c14610412578063248a9ca31461043257806327df3d3e146104625780632a1e8cdb14610484575b600080fd5b3480156102a657600080fd5b506102ba6102b5366004614af5565b6109ce565b60405190151581526020015b60405180910390f35b3480156102db57600080fd5b506102f16000805160206157c583398151915281565b6040519081526020016102c6565b34801561030b57600080fd5b506102f16000805160206156de83398151915281565b34801561032d57600080fd5b5061034161033c366004614b44565b610a05565b005b34801561034f57600080fd5b5061034161035e366004614b61565b610aa1565b34801561036f57600080fd5b5061038361037e366004614c1d565b610e7c565b6040516102c69190614c36565b34801561039c57600080fd5b5060fc546103b09062010000900460ff1681565b60405160ff90911681526020016102c6565b3480156103ce57600080fd5b506102f16000805160206156fe83398151915281565b3480156103f057600080fd5b506102f16103ff366004614b44565b6101086020526000908152604090205481565b34801561041e57600080fd5b5061034161042d366004614c4a565b610ea7565b34801561043e57600080fd5b506102f161044d366004614c1d565b600090815260c9602052604090206001015490565b34801561046e57600080fd5b506102f160008051602061571e83398151915281565b34801561049057600080fd5b506102f161049f366004614b44565b6101096020526000908152604090205481565b3480156104be57600080fd5b506103416104cd366004614c8b565b610f2c565b3480156104de57600080fd5b506103416104ed366004614cb7565b6111bc565b3480156104fe57600080fd5b5061034161050d366004614cb7565b6111e1565b34801561051e57600080fd5b5061034161052d366004614b44565b61125f565b34801561053e57600080fd5b506102f16000805160206157a583398151915281565b34801561056057600080fd5b5061034161056f366004614d2b565b611327565b34801561058057600080fd5b506102f160fd5481565b34801561059657600080fd5b506105aa6105a5366004614d7f565b611754565b6040516102c6929190614dfc565b3480156105c457600080fd5b506103416105d3366004614e52565b6117e2565b3480156105e457600080fd5b506102f16105f3366004614b44565b61010a6020526000908152604090205481565b34801561061257600080fd5b50610341610621366004614c4a565b6118d6565b610341610634366004614eb0565b611923565b34801561064557600080fd5b506102f16119d8565b34801561065a57600080fd5b5060408051808201825260058152640302e362e360dc1b602082015290516102c69190614f7b565b34801561068e57600080fd5b5061034161069d366004614d2b565b611a86565b3480156106ae57600080fd5b506103416106bd366004614fae565b611c92565b3480156106ce57600080fd5b5061010354610383906001600160a01b031681565b3480156106ef57600080fd5b506107036106fe366004614c8b565b611e87565b604051905181526020016102c6565b34801561071e57600080fd5b50610341611fc2565b34801561073357600080fd5b506102f16000805160206157e583398151915281565b34801561075557600080fd5b506102f160fe5481565b34801561076b57600080fd5b5061034161077a366004614c4a565b612048565b34801561078b57600080fd5b5061034161079a366004614d2b565b612103565b3480156107ab57600080fd5b5060fc546102ba9060ff1681565b3480156107c557600080fd5b506102ba6107d4366004614cb7565b6123da565b3480156107e557600080fd5b506103416107f4366004614c4a565b612405565b34801561080557600080fd5b506102ba610814366004614b44565b61242e565b34801561082557600080fd5b506102ba61265c565b34801561083a57600080fd5b506102f1600081565b34801561084f57600080fd5b5061010154610383906001600160a01b031681565b34801561087057600080fd5b506102f161087f366004615030565b6001600160a01b03918216600090815261010b6020908152604080832093909416825291909152205490565b3480156108b757600080fd5b506103416126d1565b3480156108cc57600080fd5b506102f16108db366004614b44565b61272c565b3480156108ec57600080fd5b506103416108fb366004614c8b565b61274e565b34801561090c57600080fd5b506102f160fb5481565b34801561092257600080fd5b50610341610931366004614cb7565b6128a2565b34801561094257600080fd5b506105aa610951366004614b44565b6128c7565b34801561096257600080fd5b506103416109713660046150a2565b612a2e565b34801561098257600080fd5b506102f160ff5481565b34801561099857600080fd5b506103416109a7366004614b44565b612ed2565b3480156109b857600080fd5b506102f160008051602061575e83398151915281565b60006001600160e01b03198216637965db0b60e01b14806109ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206156de833981519152610a1d81612f02565b60005b61010654811015610a9c5760006101068281548110610a4157610a4161518c565b60009182526020808320909101546001600160a01b03878116845261010b83526040808520919092168085529252909120549091508015610a8957610a898583836001612f0c565b505080610a95906151b8565b9050610a20565b505050565b60008051602061571e833981519152610ab981612f02565b60fc54610100900460ff1615610ae257604051634ce377bb60e11b815260040160405180910390fd5b60fc805461ff00191661010090811790915561010380546001600160a01b03808e166001600160a01b03199283161790925582548c8316908216179092556101028054888316908416179055610104805491891691909216179055610b556000805160206157a583398151915289613064565b610b6d6000805160206157a583398151915288613064565b610b856000805160206157a58339815191528a613064565b610b9d6000805160206156de8339815191528a613064565b610bb56000805160206157c583398151915285613064565b610bcd6000805160206156fe83398151915284613064565b610be56000805160206157e583398151915283613064565b610106546000906001600160401b03811115610c0357610c03614e6a565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b50610106549091506000906001600160401b03811115610c4e57610c4e614e6a565b604051908082528060200260200182016040528015610c77578160200160208202803683370190505b50610106549091506000906001600160401b03811115610c9957610c99614e6a565b604051908082528060200260200182016040528015610cc2578160200160208202803683370190505b50905060005b61010654811015610dfc5761010860006101068381548110610cec57610cec61518c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548451859083908110610d2557610d2561518c565b60200260200101818152505061010960006101068381548110610d4a57610d4a61518c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548351849083908110610d8357610d8361518c565b60200260200101818152505061010a60006101068381548110610da857610da861518c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610de157610de161518c565b6020908102919091010152610df5816151b8565b9050610cc8565b506101055460fb546040516329b35d4760e21b81526001600160a01b039092169163a6cd751c91610e3b9130906101069088908a9089906004016151d1565b600060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b5050505050505050505050505050505050565b6101068181548110610e8d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000805160206157a5833981519152610ebf81612f02565b6101035460405163049f2a5160e21b81526001600160a01b039091169063127ca94490610ef490879087908790600401615274565b600060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b5050505050505050565b81610f36816130ea565b610f5e5780604051634428dc3160e01b8152600401610f559190614c36565b60405180910390fd5b336000839003610f9f5760405163dd23c3ad60e01b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610f55565b6001600160a01b03808216600090815261010b602090815260408083209388168352929052908120549003610fe7576040516314605b7760e01b815260040160405180910390fd5b61010060009054906101000a90046001600160a01b03166001600160a01b0316631320834f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f9190615298565b42101580156110e4575061010060009054906101000a90046001600160a01b03166001600160a01b0316631b2354376040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190615298565b42105b1561110257604051633f5a890f60e01b815260040160405180910390fd5b61010054604051632762697d60e01b81526000916001600160a01b031690632762697d90611134908590600401614c36565b602060405180830381865afa158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190615298565b1561117e575060015b61118a82868684612f0c565b6111938261242e565b156111b5578185604051632263ff6560e11b8152600401610f559291906152b1565b5050505050565b600082815260c960205260409020600101546111d781612f02565b610a9c8383613064565b6001600160a01b03811633146112515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610f55565b61125b828261311a565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112a75760405162461bcd60e51b8152600401610f55906152cb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112d9613181565b6001600160a01b0316146112ff5760405162461bcd60e51b8152600401610f5590615317565b6113088161319d565b60408051600080825260208201909252611324918391906131e8565b50565b60fc5460ff161561134b57604051637d8d0e2160e01b815260040160405180910390fd5b61010060009054906101000a90046001600160a01b03166001600160a01b0316631320834f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190615298565b42116113e257604051633daab04760e21b815260040160405180910390fd5b6001600160a01b038316330361140b5760405163ae957a1d60e01b815260040160405180910390fd5b61010654811461142e5760405163dd23c3ad60e01b8152600401610f5590615363565b61010054604051632762697d60e01b815260009182916001600160a01b0390911690632762697d90611464908890600401614c36565b602060405180830381865afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a59190615298565b9050806000036114c85760405163baca79c960e01b815260040160405180910390fd5b60008060005b858110156116a7578686828181106114e8576114e861518c565b90506020020135600003156116975760001987878381811061150c5761150c61518c565b90506020020135036115315760405163dd23c3ad60e01b8152600401610f55906153c0565b8686828181106115435761154361518c565b90506020020135856115559190615401565b94508385111561157857604051634fbeca4960e01b815260040160405180910390fd5b610100546001600160a01b031663ec9477e189338a8a8681811061159e5761159e61518c565b905060200201356040518463ffffffff1660e01b81526004016115c393929190615274565b600060405180830381600087803b1580156115dd57600080fd5b505af11580156115f1573d6000803e3d6000fd5b5050505061163f87878381811061160a5761160a61518c565b9050602002013561010683815481106116255761162561518c565b6000918252602090912001546001600160a01b0316613353565b8093508194505050611697883361010684815481106116605761166061518c565b6000918252602090912001546001600160a01b03168a8a868181106116875761168761518c565b9050602002013587876001613616565b6116a0816151b8565b90506114ce565b50836000036116c957604051630cabf09b60e01b815260040160405180910390fd5b61010054604051632762697d60e01b81526001600160a01b0390911690632762697d906116fa908a90600401614c36565b602060405180830381865afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190615298565b60000361174b5761174b8761389b565b50505050505050565b60608060008051602061575e83398151915261176f81612f02565b61010661177d87878761397c565b8154604080516020808402820181019092528281529184918301828280156117ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117b0575b505050505091509250925050935093915050565b60008051602061571e8339815191526117fa81612f02565b6118216000805160206157a583398151915261181c6040850160208601614b44565b613064565b6118406000805160206157a583398151915261181c6020850185614b44565b6101055460fb546001600160a01b039091169063f3782f21903061186a6040870160208801614b44565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0391821660248401521660448201526064015b600060405180830381600087803b1580156118ba57600080fd5b505af11580156118ce573d6000803e3d6000fd5b505050505050565b6000805160206157a58339815191526118ee81612f02565b6101035460405163109c8cf960e11b81526001600160a01b039091169063213919f290610ef490879087908790600401615274565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361196b5760405162461bcd60e51b8152600401610f55906152cb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199d613181565b6001600160a01b0316146119c35760405162461bcd60e51b8152600401610f5590615317565b6119cc8261319d565b61125b828260016131e8565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a735760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610f55565b5060008051602061573e83398151915290565b60fc5460ff1615611aaa57604051637d8d0e2160e01b815260040160405180910390fd5b6000611ab884338585613d3f565b90506000808060005b85811015611c4557868682818110611adb57611adb61518c565b9050602002013560000315611c3557600019878783818110611aff57611aff61518c565b9050602002013503611b245760405163dd23c3ad60e01b8152600401610f55906153c0565b868682818110611b3657611b3661518c565b9050602002013584611b489190615401565b610100549094506001600160a01b031663ec9477e189338a8a86818110611b7157611b7161518c565b905060200201356040518463ffffffff1660e01b8152600401611b9693929190615274565b600060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b50505050611bdd87878381811061160a5761160a61518c565b8093508194505050611c3588336101068481548110611bfe57611bfe61518c565b6000918252602090912001546001600160a01b03168a8a86818110611c2557611c2561518c565b9050602002013587876000613616565b611c3e816151b8565b9050611ac1565b5082600003611c6757604051630cabf09b60e01b815260040160405180910390fd5b836116c957611c7587613f82565b6116c9576040516316a0371d60e11b815260040160405180910390fd5b6000805160206156de833981519152611caa81612f02565b60005b8481101561174b57838382818110611cc757611cc761518c565b9050602002013561010b6000896001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611d0857611d0861518c565b9050602002016020810190611d1d9190614b44565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d4c9190615401565b909155508490508382818110611d6457611d6461518c565b905060200201356101076000888885818110611d8257611d8261518c565b9050602002016020810190611d979190614b44565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611dc69190615401565b90915550506101055460fb546001600160a01b039091169063ee9e68bb9089898986818110611df757611df761518c565b9050602002016020810190611e0c9190614b44565b888887818110611e1e57611e1e61518c565b905060200201356040518563ffffffff1660e01b8152600401611e449493929190615414565b600060405180830381600087803b158015611e5e57600080fd5b505af1158015611e72573d6000803e3d6000fd5b5050505080611e80906151b8565b9050611cad565b60408051602081018252600081526101025491516303d3c9db60e21b81529091611fbb91611f3c916001600160a01b031690630f4f276c90611ecf9088908890600401615439565b602060405180830381865afa158015611eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f109190615452565b60408051602080820183526001600160a01b038916600090815261010990915291909120548152614208565b61010254610101546040516303d3c9db60e21b81526001600160a01b0392831692630f4f276c92611f7592911690600190600401615439565b602060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190615452565b614208565b9392505050565b6000805160206157e5833981519152611fda81612f02565b60fc805460ff191690556101055460fb546040516302ddfefd60e51b81526001600160a01b0390921691635bbfdfa09161201a9160040190815260200190565b600060405180830381600087803b15801561203457600080fd5b505af11580156111b5573d6000803e3d6000fd5b6000805160206157a583398151915261206081612f02565b6001600160a01b03808516600090815261010b6020908152604080832093871683529290529081208054849290612098908490615401565b90915550506001600160a01b03831660009081526101076020526040812080548492906120c6908490615401565b90915550506101055460fb5460405163ee9e68bb60e01b81526001600160a01b039092169163ee9e68bb91610ef491889088908890600401615414565b60fc5460ff161561212757604051637d8d0e2160e01b815260040160405180910390fd5b600061213584338585613d3f565b90506000808080805b8681101561230b578787828181106121585761215861518c565b90506020020135600003156122fb5760001988888381811061217c5761217c61518c565b90506020020135036121e45760405163dd23c3ad60e01b815260206004820152602a60248201527f636c6f737572655265706f546f6b656e416d6f756e74732063616e6e6f7420626044820152690ca40ead2dce840dac2f60b31b6064820152608401610f55565b8787828181106121f6576121f661518c565b90506020020135856122089190615401565b610100549095506001600160a01b03166309aa80fc8a338b8b868181106122315761223161518c565b905060200201356040518463ffffffff1660e01b815260040161225693929190615274565b6020604051808303816000875af1158015612275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122999190615298565b93506122b38461010683815481106116255761162561518c565b80935081945050506122fb893361010684815481106122d4576122d461518c565b6000918252602090912001546001600160a01b03168b8b86818110611c2557611c2561518c565b612304816151b8565b905061213e565b508360000361232d57604051630cabf09b60e01b815260040160405180910390fd5b846123585761233b88613f82565b612358576040516316a0371d60e11b815260040160405180910390fd5b61010054604051632762697d60e01b81526001600160a01b0390911690632762697d90612389908b90600401614c36565b602060405180830381865afa1580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190615298565b600003610f2257610f228861389b565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000805160206156de83398151915261241d81612f02565b61242884848461424b565b50505050565b610102546101015461010054604051632762697d60e01b815260009384936001600160a01b0391821693630f4f276c93918316921690632762697d90612478908990600401614c36565b602060405180830381865afa158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b99190615298565b6040518363ffffffff1660e01b81526004016124d6929190615439565b602060405180830381865afa1580156124f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125179190615452565b60408051602081019091526000808252919250905b6101065481101561263d576000610106828154811061254d5761254d61518c565b6000918252602080832090910154610102546001600160a01b038a8116855261010b84526040808620938216808752939094528385205493516303d3c9db60e21b815292955061261c93911691630f4f276c916125af91879190600401615439565b602060405180830381865afa1580156125cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f09190615452565b60408051602080820183526001600160a01b038716600090815261010890915291909120548152614208565b90506126288185614383565b9350505080612636906151b8565b905061252c565b50815181511015612652575060019392505050565b5060009392505050565b6000805b610106548110156126c9576000610107600061010684815481106126865761268661518c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411156126b957600191505090565b6126c2816151b8565b9050612660565b506000905090565b6000805160206157e58339815191526126e981612f02565b60fc805460ff191660011790556101055460fb5460405163c8df617960e01b81526001600160a01b039092169163c8df61799161201a9160040190815260200190565b6001600160a01b038116600090815261010b602052604081206109ff906143af565b81612758816130ea565b6127775780604051634428dc3160e01b8152600401610f559190614c36565b6101005460408051631320834f60e01b8152905133926001600160a01b031691631320834f9160048083019260209291908290030181865afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190615298565b4211156128055760405163c5e2992f60e01b815260040160405180910390fd5b61010054604051632762697d60e01b81526001600160a01b0390911690632762697d90612836908490600401614c36565b602060405180830381865afa158015612853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128779190615298565b6000036128975760405163baca79c960e01b815260040160405180910390fd5b61242881858561424b565b600082815260c960205260409020600101546128bd81612f02565b610a9c838361311a565b6060806000610106805490506001600160401b038111156128ea576128ea614e6a565b604051908082528060200260200182016040528015612913578160200160208202803683370190505b50610106549091506000906001600160401b0381111561293557612935614e6a565b60405190808252806020026020018201604052801561295e578160200160208202803683370190505b50905060005b61010654811015612a2357600061010682815481106129855761298561518c565b60009182526020808320909101546001600160a01b038a8116845261010b835260408085209190921680855292529091205485519192509082908690859081106129d1576129d161518c565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110612a0457612a0461518c565b602002602001018181525050505080612a1c906151b8565b9050612964565b509094909350915050565b600054610100900460ff1615808015612a4e5750600054600160ff909116105b80612a6f5750612a5d306144dd565b158015612a6f575060005460ff166001145b612ad25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610f55565b6000805460ff191660011790558015612af5576000805461ff0019166101001790555b612afd6144ec565b612b056144ec565b8a8a604051602001612b18929190615493565b60408051601f19818403018152919052805160209091012060fb5560fc805460ff1916905560fe89905560ff88905560fd8790556001600160a01b038616612ba05760405162461bcd60e51b815260206004820152601b60248201527a2d32b9379030b2323932b9b990383ab931b430b9b2903a37b5b2b760291b6044820152606401610f55565b61010180546001600160a01b0319166001600160a01b03881617905560fc805462ff000019166201000060ff871602179055836001600160401b03811115612bea57612bea614e6a565b604051908082528060200260200182016040528015612c13578160200160208202803683370190505b508051612c299161010691602090910190614a7b565b5060005b84811015612e4a57858582818110612c4757612c4761518c565b612c5d9260206080909202019081019150614b44565b6101068281548110612c7157612c7161518c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550858582818110612cb157612cb161518c565b905060800201604001356101086000888885818110612cd257612cd261518c565b612ce89260206080909202019081019150614b44565b6001600160a01b03168152602081019190915260400160002055858582818110612d1457612d1461518c565b905060800201602001356101096000888885818110612d3557612d3561518c565b612d4b9260206080909202019081019150614b44565b6001600160a01b03168152602081019190915260400160002055858582818110612d7757612d7761518c565b90506080020160600135600003612dcc5760405162461bcd60e51b81526020600482015260196024820152784c6971756964617465642064616d616765206973207a65726f60381b6044820152606401610f55565b858582818110612dde57612dde61518c565b9050608002016060013561010a6000888885818110612dff57612dff61518c565b612e159260206080909202019081019150614b44565b6001600160a01b0316815260208101919091526040016000205560fc805461ff0019169055612e43816151b8565b9050612c2d565b5061010580546001600160a01b0319166001600160a01b038516179055612e7f60008051602061571e83398151915283613064565b8015612ec5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6000805160206157c5833981519152612eea81612f02565b61125b60008051602061575e83398151915283613064565b6113248133614559565b6001600160a01b03808516600090815261010b6020908152604080832093871683529290522054821115612f535760405163380984fd60e21b815260040160405180910390fd5b6001600160a01b03808516600090815261010b6020908152604080832093871683529290529081208054849290612f8b9084906154a3565b90915550508015612fc5576001600160a01b0383166000908152610107602052604081208054849290612fbf9084906154a3565b90915550505b6101035460405163109c8cf960e11b81526001600160a01b039091169063213919f290612ffa90879087908790600401615274565b600060405180830381600087803b15801561301457600080fd5b505af1158015613028573d6000803e3d6000fd5b50506101055460fb54604051633b8d409b60e01b81526001600160a01b039092169350633b8d409b9250610ef491889088908890600401615414565b61306e82826123da565b61125b57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff191660011790556130a63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b038116600090815261010a6020526040812054810361311257506000919050565b506001919050565b61312482826123da565b1561125b57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008051602061573e833981519152546001600160a01b031690565b6000805160206156fe8339815191526131b581612f02565b6101055460405163b3c2d50b60e01b81526001600160a01b039091169063b3c2d50b906118a090309086906004016152b1565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561321b57610a9c836145b2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613275575060408051601f3d908101601f1916820190925261327291810190615298565b60015b6132d85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610f55565b60008051602061573e83398151915281146133475760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610f55565b50610a9c83838361464c565b61010254610101546040516303d3c9db60e21b81526000928392859284926001600160a01b0390811692630f4f276c9261339592909116908a90600401615439565b602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d69190615452565b9050600061348e8261010260009054906101000a90046001600160a01b03166001600160a01b0316630f4f276c89876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346691906154b6565b61347190600a6155bd565b6040518363ffffffff1660e01b8152600401611f75929190615439565b6040805160208082018352670de0b6b3a76400008252825180820184526001600160a01b038b16600090815261010a9092529281205483529293506134dd9184916134d891614383565b614671565b905060006134fb83604051806020016040528060fe54815250614671565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355f91906154b6565b61356a9060126155cc565b61357590600a6155bd565b825161358191906155e5565b856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e391906154b6565b6135ee9060126155cc565b6135f990600a6155bd565b825161360591906155e5565b9650965050505050505b9250929050565b6001600160a01b03808816600090815261010b602090815260408083209389168352929052205483111561365f57846040516398de333560e01b8152600401610f559190614c36565b6001600160a01b03808816600090815261010b60209081526040808320938916835292905290812080548592906136979084906154a3565b90915550506001600160a01b03851660009081526101076020526040812080548592906136c59084906154a3565b909155505061010354610104546040805163012f8d2f60e11b815290516001600160a01b039384169363213919f293169163025f1a5e9160048083019260209291908290030181865afa158015613720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137449190615607565b87856040518463ffffffff1660e01b815260040161376493929190615274565b600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b5050610103546001600160a01b0316915063213919f2905087876137b686886154a3565b6040518463ffffffff1660e01b81526004016137d493929190615274565b600060405180830381600087803b1580156137ee57600080fd5b505af1158015613802573d6000803e3d6000fd5b50506101055460fb54604051639cc487d760e01b815260048101919091526001600160a01b038b811660248301528a8116604483015260648201899052898116608483015260a4820188905260c4820187905285151560e48301529091169250639cc487d7915061010401600060405180830381600087803b15801561388757600080fd5b505af1158015612ec5573d6000803e3d6000fd5b60005b6101065481101561125b576001600160a01b038216600090815261010b602052604081206101068054919291849081106138da576138da61518c565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054610107600061010684815481106139325761393261518c565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906139669084906154a3565b909155506139759050816151b8565b905061389e565b610106546060906000906001600160401b0381111561399d5761399d614e6a565b6040519080825280602002602001820160405280156139c6578160200160208202803683370190505b50905060005b61010654811015613d3657600061010682815481106139ed576139ed61518c565b60009182526020808320909101546001600160a01b038a8116845261010b83526040808520919092168085529252909120549091508015613d2357670de0b6b3a76400008703613b98576001600160a01b03888116600090815261010b602090815260408083209386168352929052908120805491905584518190869086908110613a7a57613a7a61518c565b602002602001018181525050806101076000856001600160a01b03166001600160a01b031681526020019081526020016000206000828254613abc91906154a3565b90915550506101035460405163109c8cf960e11b81526001600160a01b039091169063213919f290613af6908a9087908690600401615274565b600060405180830381600087803b158015613b1057600080fd5b505af1158015613b24573d6000803e3d6000fd5b50506101055460fb54604051633b8d409b60e01b81526001600160a01b039092169350633b8d409b9250613b60918d9088908790600401615414565b600060405180830381600087803b158015613b7a57600080fd5b505af1158015613b8e573d6000803e3d6000fd5b5050505050613d23565b6000613bb260405180602001604052808a815250836146b0565b6001600160a01b03808b16600090815261010b60209081526040808320938816835292905290812080549293508392909190613bef9084906154a3565b9250508190555080858581518110613c0957613c0961518c565b602002602001018181525050806101076000856001600160a01b03166001600160a01b031681526020019081526020016000206000828254613c4b91906154a3565b90915550506101035460405163109c8cf960e11b81526001600160a01b039091169063213919f290613c85908a9087908690600401615274565b600060405180830381600087803b158015613c9f57600080fd5b505af1158015613cb3573d6000803e3d6000fd5b50506101055460fb54604051633b8d409b60e01b81526001600160a01b039092169350633b8d409b9250613cef918d9088908790600401615414565b600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50505050505b505080613d2f906151b8565b90506139cc565b50949350505050565b6101005460408051631320834f60e01b815290516000926001600160a01b031691631320834f9160048083019260209291908290030181865afa158015613d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dae9190615298565b421115613dce576040516321f8431560e01b815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603613e005760405163ae957a1d60e01b815260040160405180910390fd5b610106548214613e235760405163dd23c3ad60e01b8152600401610f5590615363565b61010054604051632762697d60e01b81526000916001600160a01b031690632762697d90613e55908990600401614c36565b602060405180830381865afa158015613e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e969190615298565b905080600003613eb95760405163baca79c960e01b815260040160405180910390fd5b613ec28661242e565b613edf5760405163e94a979360e01b815260040160405180910390fd5b60fd5461010254610101546040516303d3c9db60e21b8152600093926001600160a01b0390811692630f4f276c92613f1f92909116908790600401615439565b602060405180830381865afa158015613f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f609190615452565b51613f6b9190615401565b613f748861272c565b10925050505b949350505050565b61010054604051632762697d60e01b815260009182916001600160a01b0390911690632762697d90613fb8908690600401614c36565b602060405180830381865afa158015613fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff99190615298565b90508060000361400c5750600092915050565b604080516020810190915260008082525b6101065481101561412e576000610106828154811061403e5761403e61518c565b6000918252602080832090910154610102546001600160a01b038a8116855261010b84526040808620938216808752939094528385205493516303d3c9db60e21b815292955061410d93911691630f4f276c916140a091879190600401615439565b602060405180830381865afa1580156140bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e19190615452565b60408051602080820183526001600160a01b038716600090815261010990915291909120548152614208565b90506141198185614383565b9350505080614127906151b8565b905061401d565b5061010254610101546040516303d3c9db60e21b81526000926001600160a01b0390811692630f4f276c9261416b92909116908790600401615439565b602060405180830381865afa158015614188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ac9190615452565b90506141ba82825190511090565b156141ca57506001949350505050565b60006141d683836146c8565b90506141fe6141e58284614208565b604051806020016040528060ff54815250519051111590565b9695505050505050565b604080516020810190915260008152604051806020016040528061424261423b8660000151670de0b6b3a76400006146f4565b8551614700565b90529392505050565b6001600160a01b03808416600090815261010b6020908152604080832093861683529290529081208054839290614283908490615401565b90915550506001600160a01b03821660009081526101076020526040812080548392906142b1908490615401565b90915550506101035460405163049f2a5160e21b81526001600160a01b039091169063127ca944906142eb90869086908690600401615274565b600060405180830381600087803b15801561430557600080fd5b505af1158015614319573d6000803e3d6000fd5b50506101055460fb5460405163ee9e68bb60e01b81526001600160a01b03909216935063ee9e68bb925061435591879087908790600401615414565b600060405180830381600087803b15801561436f57600080fd5b505af115801561174b573d6000803e3d6000fd5b60408051602081019091526000815260405180602001604052806142428560000151856000015161470c565b6040805160208101909152600080825290815b610106548110156144d5576101025461010680546144c39285926001600160a01b0390911691630f4f276c9190869081106143ff576143ff61518c565b9060005260206000200160009054906101000a90046001600160a01b031688600061010688815481106144345761443461518c565b60009182526020808320909101546001600160a01b0316835282019290925260409081019091205490516001600160e01b031960e085901b16815261447d929190600401615439565b602060405180830381865afa15801561449a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144be9190615452565b614383565b91506144ce816151b8565b90506143c2565b505192915050565b6001600160a01b03163b151590565b600054610100900460ff166145575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610f55565b565b61456382826123da565b61125b5761457081614718565b61457b83602061472a565b60405160200161458c929190615624565b60408051601f198184030181529082905262461bcd60e51b8252610f5591600401614f7b565b6145bb816144dd565b61461d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610f55565b60008051602061573e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614655836148c5565b6000825111806146625750805b15610a9c576124288383614905565b6040805160208101909152600081526040518060200160405280670de0b6b3a76400006146a6866000015186600001516146f4565b61424291906155e5565b6000806146bd848461492a565b9050613f7a81614952565b60408051602081019091526000815260405180602001604052806142428560000151856000015161496a565b6000611fbb8284615693565b6000611fbb82846155e5565b6000611fbb8284615401565b60606109ff6001600160a01b03831660145b60606000614739836002615693565b614744906002615401565b6001600160401b0381111561475b5761475b614e6a565b6040519080825280601f01601f191660200182016040528015614785576020820181803683370190505b509050600360fc1b816000815181106147a0576147a061518c565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106147cf576147cf61518c565b60200101906001600160f81b031916908160001a90535060006147f3846002615693565b6147fe906001615401565b90505b6001811115614876576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106148325761483261518c565b1a60f81b8282815181106148485761484861518c565b60200101906001600160f81b031916908160001a90535060049490941c9361486f816156aa565b9050614801565b508315611fbb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610f55565b6148ce816145b2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060611fbb838360405180606001604052806027815260200161577e60279139614976565b60408051602081019091526000815260405180602001604052806142428560000151856146f4565b80516000906109ff90670de0b6b3a7640000906155e5565b6000611fbb82846154a3565b6060600080856001600160a01b03168560405161499391906156c1565b600060405180830381855af49150503d80600081146149ce576040519150601f19603f3d011682016040523d82523d6000602084013e6149d3565b606091505b50915091506141fe8683838760608315614a4c578251600003614a45576149f9856144dd565b614a455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f55565b5081613f7a565b613f7a8383815115614a615781518083602001fd5b8060405162461bcd60e51b8152600401610f559190614f7b565b828054828255906000526020600020908101928215614ad0579160200282015b82811115614ad057825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614a9b565b50614adc929150614ae0565b5090565b5b80821115614adc5760008155600101614ae1565b600060208284031215614b0757600080fd5b81356001600160e01b031981168114611fbb57600080fd5b6001600160a01b038116811461132457600080fd5b8035614b3f81614b1f565b919050565b600060208284031215614b5657600080fd5b8135611fbb81614b1f565b60008060008060008060008060006101208a8c031215614b8057600080fd5b8935614b8b81614b1f565b985060208a0135614b9b81614b1f565b975060408a0135614bab81614b1f565b965060608a0135614bbb81614b1f565b955060808a0135614bcb81614b1f565b945060a08a0135614bdb81614b1f565b935060c08a0135614beb81614b1f565b925060e08a0135614bfb81614b1f565b91506101008a0135614c0c81614b1f565b809150509295985092959850929598565b600060208284031215614c2f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080600060608486031215614c5f57600080fd5b8335614c6a81614b1f565b92506020840135614c7a81614b1f565b929592945050506040919091013590565b60008060408385031215614c9e57600080fd5b8235614ca981614b1f565b946020939093013593505050565b60008060408385031215614cca57600080fd5b823591506020830135614cdc81614b1f565b809150509250929050565b60008083601f840112614cf957600080fd5b5081356001600160401b03811115614d1057600080fd5b6020830191508360208260051b850101111561360f57600080fd5b600080600060408486031215614d4057600080fd5b8335614d4b81614b1f565b925060208401356001600160401b03811115614d6657600080fd5b614d7286828701614ce7565b9497909650939450505050565b600080600060608486031215614d9457600080fd5b8335614d9f81614b1f565b9250602084013591506040840135614db681614b1f565b809150509250925092565b600081518084526020808501945080840160005b83811015614df157815187529582019590820190600101614dd5565b509495945050505050565b604080825283519082018190526000906020906060840190828701845b82811015614e3e5781516001600160a01b031684529284019290840190600101614e19565b505050838103828501526141fe8186614dc1565b600060608284031215614e6457600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614ea857614ea8614e6a565b604052919050565b60008060408385031215614ec357600080fd5b8235614ece81614b1f565b91506020838101356001600160401b0380821115614eeb57600080fd5b818601915086601f830112614eff57600080fd5b813581811115614f1157614f11614e6a565b614f23601f8201601f19168501614e80565b91508082528784828501011115614f3957600080fd5b80848401858401376000848284010152508093505050509250929050565b60005b83811015614f72578181015183820152602001614f5a565b50506000910152565b6020815260008251806020840152614f9a816040850160208701614f57565b601f01601f19169190910160400192915050565b600080600080600060608688031215614fc657600080fd5b8535614fd181614b1f565b945060208601356001600160401b0380821115614fed57600080fd5b614ff989838a01614ce7565b9096509450604088013591508082111561501257600080fd5b5061501f88828901614ce7565b969995985093965092949392505050565b6000806040838503121561504357600080fd5b823561504e81614b1f565b91506020830135614cdc81614b1f565b60008083601f84011261507057600080fd5b5081356001600160401b0381111561508757600080fd5b6020830191508360208260071b850101111561360f57600080fd5b6000806000806000806000806000806101008b8d0312156150c257600080fd5b8a356001600160401b03808211156150d957600080fd5b818d0191508d601f8301126150ed57600080fd5b8135818111156150fc57600080fd5b8e602082850101111561510e57600080fd5b60208381019d50909b508d0135995060408d0135985060608d0135975061513760808e01614b34565b965060a08d013591508082111561514d57600080fd5b5061515a8d828e0161505e565b909550935061516d905060c08c01614b34565b915061517b60e08c01614b34565b90509295989b9194979a5092959850565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016151ca576151ca6151a2565b5060010190565b600060c08201888352602060018060a01b03808a168286015260c0604086015282895480855260e0870191508a60005283600020945060005b8181101561522857855484168352600195860195928501920161520a565b5050858103606087015261523c818a614dc1565b935050505082810360808401526152538186614dc1565b905082810360a08401526152678185614dc1565b9998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156152aa57600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252603f908201527f436c6f7375726520616d6f756e7473206172726179206e6f742073616d65206c60408201527f656e67746820617320636f6c6c61746572616c20746f6b656e73206c69737400606082015260800190565b60208082526021908201527f636c6f73757265416d6f756e74732063616e6e6f742062652075696e74206d616040820152600f60fb1b606082015260800190565b808201808211156109ff576109ff6151a2565b9384526001600160a01b03928316602085015291166040830152606082015260800190565b6001600160a01b03929092168252602082015260400190565b60006020828403121561546457600080fd5b604051602081018181106001600160401b038211171561548657615486614e6a565b6040529151825250919050565b8183823760009101908152919050565b818103818111156109ff576109ff6151a2565b6000602082840312156154c857600080fd5b815160ff81168114611fbb57600080fd5b600181815b808511156155145781600019048211156154fa576154fa6151a2565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b575060016109ff565b81615538575060006109ff565b816001811461554e576002811461555857615574565b60019150506109ff565b60ff841115615569576155696151a2565b50506001821b6109ff565b5060208310610133831016604e8410600b8410161715615597575081810a6109ff565b6155a183836154d9565b80600019048211156155b5576155b56151a2565b029392505050565b6000611fbb60ff84168361551c565b60ff82811682821603908111156109ff576109ff6151a2565b60008261560257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561561957600080fd5b8151611fbb81614b1f565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615656816017850160208801614f57565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615687816028840160208801614f57565b01602801949350505050565b80820281158282048414176109ff576109ff6151a2565b6000816156b9576156b96151a2565b506000190190565b600082516156d3818460208701614f57565b919091019291505056fe250b76734a070a69c7b3930477dd35007ad9c9d0952e97903fdafb2db6980537793a6c9b7e0a9549c74edc2f9ae0dc50903dfaa9a56fb0116b27a8c71de3e2c630d41a597cac127d8249d31298b50e481ee82c3f4a49ff93c76a22735aa9f3ad360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf4b6b486426e3c004413defb7013cd482f29189a98e074f1c202b2ac26536bb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65646e14a979b95b01beecd617807f3738f4e067938da99755b16afdcf7148d313b76e3cc031d23d7153f72e87cbfd113a0351c60d8ce52b8a31c944d543a384b7c9a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b8bbd18511b146e1c84d8283534607bed5821d75e6ff475a8777ea524b02989264736f6c63430008120033