[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "components": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_yearnVault", "type": "address" }, { "internalType": "address", "name": "_discountRateAdapter", "type": "address" }, { "internalType": "address", "name": "_eventEmitter", "type": "address" }, { "internalType": "address", "name": "_governorAddress", "type": "address" }, { "internalType": "address", "name": "_termController", "type": "address" }, { "internalType": "uint256", "name": "_repoTokenConcentrationLimit", "type": "uint256" }, { "internalType": "uint256", "name": "_timeToMaturityThreshold", "type": "uint256" }, { "internalType": "uint256", "name": "_requiredReserveRatio", "type": "uint256" }, { "internalType": "uint256", "name": "_discountRateMarkup", "type": "uint256" } ], "internalType": "struct Strategy.StrategyParams", "name": "_params", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AuctionNotOpen", "type": "error" }, { "inputs": [], "name": "BalanceBelowRequiredReserveRatio", "type": "error" }, { "inputs": [], "name": "DepositPaused", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "have", "type": "uint256" }, { "internalType": "uint256", "name": "want", "type": "uint256" } ], "name": "InsufficientLiquidBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "InvalidRepoToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "auction", "type": "address" } ], "name": "InvalidTermAuction", "type": "error" }, { "inputs": [], "name": "OfferNotFound", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" } ], "name": "RepoTokenBlacklisted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" } ], "name": "RepoTokenConcentrationTooHigh", "type": "error" }, { "inputs": [], "name": "TimeToMaturityAboveThreshold", "type": "error" }, { "inputs": [], "name": "ZeroPurchaseTokenAmount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "stateMutability": "nonpayable", "type": "fallback" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "auctionClosed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "availableDepositLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "availableWithdrawLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" }, { "internalType": "uint256", "name": "discountRate", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateRepoTokenPresentValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "termAuction", "type": "address" }, { "internalType": "bytes32[]", "name": "offerIds", "type": "bytes32[]" } ], "name": "deleteAuctionOffers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "deployFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "freeFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" } ], "name": "getRepoTokenConcentrationRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" } ], "name": "getRepoTokenHoldingValue", "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": [], "name": "harvestAndReport", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "liquidReserveRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pauseDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOffers", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "repoTokenBlacklist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "repoTokenHoldings", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" }, { "internalType": "uint256", "name": "repoTokenAmount", "type": "uint256" } ], "name": "sellRepoToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddr", "type": "address" }, { "internalType": "uint256", "name": "minCollateralRatio", "type": "uint256" } ], "name": "setCollateralTokenParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdapter", "type": "address" } ], "name": "setDiscountRateAdapter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newDiscountRateMarkup", "type": "uint256" } ], "name": "setDiscountRateMarkup", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newGovernor", "type": "address" } ], "name": "setPendingGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" }, { "internalType": "bool", "name": "blacklisted", "type": "bool" } ], "name": "setRepoTokenBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newRepoTokenConcentrationLimit", "type": "uint256" } ], "name": "setRepoTokenConcentrationLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newRequiredReserveRatio", "type": "uint256" } ], "name": "setRequiredReserveRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTermControllerAddr", "type": "address" } ], "name": "setTermController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newTimeToMaturityThreshold", "type": "uint256" } ], "name": "setTimeToMaturityThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "shutdownWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "repoToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "simulateTransaction", "outputs": [ { "internalType": "uint256", "name": "simulatedWeightedMaturity", "type": "uint256" }, { "internalType": "uint256", "name": "simulatedRepoTokenConcentrationRatio", "type": "uint256" }, { "internalType": "uint256", "name": "simulatedLiquidityRatio", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "strategyState", "outputs": [ { "internalType": "address", "name": "assetVault", "type": "address" }, { "internalType": "address", "name": "eventEmitter", "type": "address" }, { "internalType": "address", "name": "governorAddress", "type": "address" }, { "internalType": "contract ITermController", "name": "prevTermController", "type": "address" }, { "internalType": "contract ITermController", "name": "currTermController", "type": "address" }, { "internalType": "contract ITermDiscountRateAdapter", "name": "discountRateAdapter", "type": "address" }, { "internalType": "uint256", "name": "timeToMaturityThreshold", "type": "uint256" }, { "internalType": "uint256", "name": "requiredReserveRatio", "type": "uint256" }, { "internalType": "uint256", "name": "discountRateMarkup", "type": "uint256" }, { "internalType": "uint256", "name": "repoTokenConcentrationLimit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ITermAuction", "name": "termAuction", "type": "address" }, { "internalType": "address", "name": "repoToken", "type": "address" }, { "internalType": "bytes32", "name": "idHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "offerPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "purchaseTokenAmount", "type": "uint256" } ], "name": "submitAuctionOffer", "outputs": [ { "internalType": "bytes32[]", "name": "offerIds", "type": "bytes32[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_totalIdle", "type": "uint256" } ], "name": "tendThis", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "tendTrigger", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenizedStrategyAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssetValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalLiquidBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpauseDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpauseStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
61012060405234801562000011575f80fd5b5060405162006aad38038062006aad8339810160408190526200003491620008d6565b80516001600160a01b0381166080523060a05260405183906200009d90620000699084908490339081908190602401620009cd565b60408051601f198184030181529190526020810180516001600160e01b03908116634b839d7360e11b17909152620002b016565b505073bb51273d6c746910c7c06fe718f30c936170fed07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505f805460ff191690556020808201516001600160a01b03908116610100526060830151811660c0526080516040805163313ce56760e01b81529051919092169263313ce56792600480820193918290030181865afa1580156200013c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000162919062000a0f565b6200016f90600a62000b3e565b60e0526020810151815162000192916001600160a01b03909116905f196200033f565b604080516101408101825261010080516001600160a01b0390811680845260c08051831660208601819052608080890180518616888a018190525f60608a015260a0808c01518816938a01849052998b015190961698880189905260e0808b0151858a018190528b890151918a01829052610120808d0151998b018a9052958c015195909901859052600a80546001600160a01b03199081169097179055600b80548716909417909355600c80548616909617909555600d805485169055600e805485169091179055600f805490931690961790915560109390935560119390935560125560135551620002a8907f7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f559062000490565b505062000bb8565b60605f8073bb51273d6c746910c7c06fe718f30c936170fed06001600160a01b031684604051620002e2919062000b4e565b5f60405180830381855af49150503d805f81146200031c576040519150601f19603f3d011682016040523d82523d5f602084013e62000321565b606091505b50915091508162000338576040513d805f833e8082fd5b9392505050565b801580620003bb5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000393573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000b6b565b155b620004335760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200048b918591620004fe16565b505050565b6200049c8282620005d0565b620004fa575f8281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f906200054c906001600160a01b038516908490620005fc565b905080515f14806200056f5750808060200190518101906200056f919062000b83565b6200048b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200042a565b5f8281526001602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b60606200060c84845f8562000614565b949350505050565b606082471015620006775760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200042a565b5f80866001600160a01b0316858760405162000694919062000b4e565b5f6040518083038185875af1925050503d805f8114620006d0576040519150601f19603f3d011682016040523d82523d5f602084013e620006d5565b606091505b509092509050620006e987838387620006f4565b979650505050505050565b60608315620007675782515f036200075f576001600160a01b0385163b6200075f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200042a565b50816200060c565b6200060c83838151156200077e5781518083602001fd5b8060405162461bcd60e51b81526004016200042a919062000ba4565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b0381118282101715620007d457620007d46200079a565b60405290565b5f5b83811015620007f6578181015183820152602001620007dc565b50505f910152565b80516001600160a01b038116811462000815575f80fd5b919050565b5f61014082840312156200082c575f80fd5b62000836620007ae565b90506200084382620007fe565b81526200085360208301620007fe565b60208201526200086660408301620007fe565b60408201526200087960608301620007fe565b60608201526200088c60808301620007fe565b60808201526200089f60a08301620007fe565b60a082015260c082015160c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b5f806101608385031215620008e9575f80fd5b82516001600160401b038082111562000900575f80fd5b818501915085601f83011262000914575f80fd5b8151818111156200092957620009296200079a565b604051601f8201601f19908116603f011681019083821181831017156200095457620009546200079a565b816040528281528860208487010111156200096d575f80fd5b62000980836020830160208801620007da565b80965050505050506200099784602085016200081a565b90509250929050565b5f8151808452620009b9816020860160208601620007da565b601f01601f19169290920160200192915050565b5f60018060a01b03808816835260a06020840152620009f060a0840188620009a0565b9581166040840152938416606083015250911660809091015292915050565b5f6020828403121562000a20575f80fd5b815160ff8116811462000338575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000a8557815f190482111562000a695762000a6962000a31565b8085161562000a7757918102915b93841c939080029062000a4a565b509250929050565b5f8262000a9d57506001620005f6565b8162000aab57505f620005f6565b816001811462000ac4576002811462000acf5762000aef565b6001915050620005f6565b60ff84111562000ae35762000ae362000a31565b50506001821b620005f6565b5060208310610133831016604e8410600b841016171562000b14575081810a620005f6565b62000b20838362000a45565b805f190482111562000b365762000b3662000a31565b029392505050565b5f6200033860ff84168362000a8d565b5f825162000b61818460208701620007da565b9190910192915050565b5f6020828403121562000b7c575f80fd5b5051919050565b5f6020828403121562000b94575f80fd5b8151801515811462000338575f80fd5b602081525f620003386020830184620009a0565b60805160a05160c05160e05161010051615db462000cf95f395f81816124bd01528181612ac80152818161345601526145ae01525f81816108950152818161090e0152818161148b015281816114b8015281816117a8015281816118be015281816118f80152818161260e0152818161264a015281816128a101528181612905015281816129e301528181612c840152612cc301525f8181610ae301528181610f0d01528181610fb001528181611046015281816110ec0152818161196001528181611b1301528181611c6001528181611d6f01528181611ed70152611f6801525f8181610ccb015261116301525f818161077201528181610a3101528181610dbb015281816112cd01528181611354015281816123e0015281816124250152818161256301528181612f92015281816132bd01526134800152615db45ff3fe608060405234801561000f575f80fd5b5060043610610287575f3560e01c806372db6dfc1161015a578063aeaaa299116100cc578063e3bafad211610085578063e3bafad21461067f578063e58bb63914610692578063ed22088e1461069a578063f235757f146106ad578063fb06a3bd146106c0578063fde813a8146105c357610287565b8063aeaaa29914610603578063aff518f31461060b578063b7bd869c1461061e578063d19a3bb814610631578063d547741f14610664578063d8c143f71461067757610287565b8063903c2c061161011e578063903c2c06146105a857806391d14854146105b05780639d7fb70c146105c3578063a217fddf146105d6578063ad568159146105dd578063add5ba4b146105f057610287565b806372db6dfc14610537578063740152831461054a57806383076af9146105785780638c02ea3a1461058d5780638f90ae5a146105a057610287565b806346aa2f12116101fe5780635c975abb116101b75780635c975abb146104cd5780635d265d3f146104d757806367747e571461050c57806369026e881461051f5780636bc912e014610527578063702848131461052f57610287565b806346aa2f121461046157806349317f1d14610475578063503160d91461047d5780635134f576146104905780635157ced5146104a357806354c885e0146104ab57610287565b8063176eacd311610250578063176eacd3146103d2578063248a9ca3146103e55780632f2ff15d1461040857806336568abe1461041b5780633d6cb5751461042e578063442e61aa1461044157610287565b80625446f2146102bc57806301ffc9a7146102cf57806304bd4629146102f757806311b4e2531461031857806312345134146103bf575b73bb51273d6c746910c7c06fe718f30c936170fed0365f80375f80365f845af43d5f803e8080156102b6573d5ff35b3d5ffd5b005b6102ba6102ca36600461555b565b6106c8565b6102e26102dd366004615585565b610a66565b60405190151581526020015b60405180910390f35b61030a6103053660046155ac565b610a9c565b6040519081526020016102ee565b600a54600b54600c54600d54600e54600f5460105460115460125460135461035a996001600160a01b039081169981169881169781169681169516939291908a565b604080516001600160a01b039b8c168152998b1660208b0152978a169789019790975294881660608801529287166080870152951660a085015260c084019490945260e0830193909352610100820192909252610120810191909152610140016102ee565b6102ba6103cd3660046155d4565b610aa5565b61030a6103e03660046155ac565b610b65565b61030a6103f336600461560b565b5f908152600160208190526040909120015490565b6102ba610416366004615622565b610baa565b6102ba610429366004615622565b610bd4565b6102ba61043c36600461560b565b610c52565b61045461044f366004615645565b610c66565b6040516102ee9190615692565b61030a61046f3660046155ac565b505f1990565b61030a610eae565b6102ba61048b36600461560b565b610ec4565b6102ba61049e36600461560b565b610ed5565b6102ba610f75565b6102e26104b93660046155ac565b60146020525f908152604090205460ff1681565b5f5460ff166102e2565b60408051600481526024810182526020810180516001600160e01b031663440368a360e01b17905290516102ee915f91615722565b6102ba61051a36600461560b565b61100e565b6102ba6110ae565b610454611131565b61030a61113d565b6102ba61054536600461573c565b61114e565b61055d61055836600461555b565b6112fa565b604080519384526020840192909252908201526060016102ee565b610580611577565b6040516102ee91906157bd565b61030a61059b3660046155ac565b611583565b61030a6117e3565b61030a6117ef565b6102e26105be366004615622565b6117f8565b6102ba6105d136600461560b565b611822565b61030a5f81565b61030a6105eb3660046157fd565b61182a565b6102ba6105fe36600461560b565b611928565b6102ba6119c8565b6102ba6106193660046155ac565b6119d3565b6102ba61062c3660046155ac565b611b9f565b61064c73bb51273d6c746910c7c06fe718f30c936170fed081565b6040516001600160a01b0390911681526020016102ee565b6102ba610672366004615622565b611cde565b6102ba611d03565b6102ba61068d36600461555b565b611d32565b6102ba611de3565b6102ba6106a836600461560b565b611f30565b6102ba6106bb3660046155ac565b611fd0565b6102ba612022565b6106d061204e565b6001600160a01b0382165f90815260146020526040902054829060ff161561071b57604051633d764d2b60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b5f8211610726575f80fd5b61072f83612093565b6107575760405163017dad6760e71b81526001600160a01b0384166004820152602401610712565b600f545f9081906107969060039087906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006121bc565b9250509150816107c45760405163017dad6760e71b81526001600160a01b0386166004820152602401610712565b6107cd5f6123c8565b5f6107d6612542565b90505f81116107e3575f80fd5b5f6107ed826125e7565b90505f81116107fa575f80fd5b600f54604051633580ec1360e11b81526001600160a01b0389811660048301525f921690636b01d82690602401602060405180830381865afa158015610842573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610866919061582f565b600f54604051631bf49af760e11b81526001600160a01b03808c1660048301529293505f92610905928c928c927f00000000000000000000000000000000000000000000000000000000000000009216906337e935ee906024015b602060405180830381865afa1580156108dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610900919061582f565b61268c565b90505f610944827f000000000000000000000000000000000000000000000000000000000000000088600a600801548761093f919061585a565b6127f4565b90508085101561097157604051633bf1b8e760e11b81526004810186905260248101829052604401610712565b5f6109868b8b610981858a61586d565b61287e565b6010549091508111156109ac57604051632391f20360e21b815260040160405180910390fd5b5f856109b8848961586d565b6109ca90670de0b6b3a7640000615880565b6109d49190615897565b6011549091508110156109fa57604051631342c8d960e11b815260040160405180910390fd5b610a068c858886612a74565b610a0f83612ab2565b610a246001600160a01b038d1633308e612bad565b610a586001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385612c18565b505050505050505050505050565b5f6001600160e01b03198216637965db0b60e01b1480610a9657506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610a96612542565b5f80516020615d5f833981519152610abc81612c48565b604051637948ecd560e01b81526001600160a01b03848116600483015283151560248301527f00000000000000000000000000000000000000000000000000000000000000001690637948ecd5906044015f604051808303815f87803b158015610b24575f80fd5b505af1158015610b36573d5f803e3d5ffd5b505050506001600160a01b03929092165f908152601460205260409020805460ff191691151591909117905550565b5f6001600160a01b038216610b8f5760405163017dad6760e71b81525f6004820152602401610712565b610a96825f610ba4610b9f612542565b6125e7565b5f612c52565b5f8281526001602081905260409091200154610bc581612c48565b610bcf8383612d25565b505050565b6001600160a01b0381163314610c445760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610712565b610c4e8282612d8f565b5050565b610c5a612df5565b610c6381612e2c565b50565b6060610c7061204e565b6001600160a01b0385165f90815260146020526040902054859060ff1615610cb657604051633d764d2b60e11b81526001600160a01b0382166004820152602401610712565b6040516348e4a64960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348e4a649906024015f6040518083038186803b158015610d13575f80fd5b505afa158015610d25573d5f803e3d5ffd5b50505050825f03610d495760405163b97ce22960e01b815260040160405180910390fd5b5f610d548888612e3d565b9050610d5f5f6123c8565b5f868152600960205260409020600101548490610da26040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b88815230602082015260408101889052606081018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080820152610df68b85838d8787613130565b95505f610e01612542565b90505f610e0d826125e7565b90505f8111610e1a575f80fd5b5f81610e2e84670de0b6b3a7640000615880565b610e389190615897565b601154909150811015610e5e57604051631342c8d960e11b815260040160405180910390fd5b5f610e6a5f808661287e565b601054909150811115610e9057604051632391f20360e21b815260040160405180910390fd5b610e9c8e5f855f612a74565b50505050505050505095945050505050565b5f610eb7612df5565b610ebf61355c565b905090565b610ecc612df5565b610c6381613579565b5f80516020615d5f833981519152610eec81612c48565b601354604051632efd6ecd60e21b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bbf5bb34906044015f604051808303815f87803b158015610f56575f80fd5b505af1158015610f68573d5f803e3d5ffd5b5050506013929092555050565b5f80516020615d5f833981519152610f8c81612c48565b6002805460ff19169055604080516305ad0e1f60e51b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163b5a1c3e0916004808301925f92919082900301818387803b158015610ff5575f80fd5b505af1158015611007573d5f803e3d5ffd5b5050505050565b5f80516020615d5f83398151915261102581612c48565b60115460405163627d8a0160e11b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c4fb1402906044015f604051808303815f87803b15801561108f575f80fd5b505af11580156110a1573d5f803e3d5ffd5b5050506011929092555050565b5f80516020615d5f8339815191526110c581612c48565b6002805460ff1916600117905560408051631022cfd760e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631022cfd7916004808301925f92919082900301818387803b158015610ff5575f80fd5b6060610ebf60076135ae565b5f610ebf611149612542565b613667565b6040516348e4a64960e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348e4a649906024015f6040518083038186803b1580156111ab575f80fd5b505afa1580156111bd573d5f803e3d5ffd5b505050506111ca83612093565b6111f25760405163f14a3cf960e01b81526001600160a01b0384166004820152602401610712565b5f8390505f816001600160a01b031663505d799e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125791906158b6565b60405163720e52c560e01b81529091506001600160a01b0382169063720e52c59061128890879087906004016158d1565b5f604051808303815f87803b15801561129f575f80fd5b505af11580156112b1573d5f803e3d5ffd5b5050600f546112f19250600791506003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006136a0565b6110075f6123c8565b5f805f80611306612542565b90505f806001600160a01b038816156114f05761132288612093565b61134a5760405163017dad6760e71b81526001600160a01b0389166004820152602401610712565b5f8061137860038b7f0000000000000000000000000000000000000000000000000000000000000000613b01565b91509150816113a55760405163017dad6760e71b81526001600160a01b038b166004820152602401610712565b600f54604051633580ec1360e11b81526001600160a01b038c811660048301525f921690636b01d82690602401602060405180830381865afa1580156113ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611411919061582f565b600f54604051631bf49af760e11b81526001600160a01b038e811660048301529293505f92909116906337e935ee90602401602060405180830381865afa15801561145e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611482919061582f565b90506114b08c8c7f00000000000000000000000000000000000000000000000000000000000000008461268c565b95506114e9867f000000000000000000000000000000000000000000000000000000000000000085600a600801548661093f919061585a565b9450505050505b6114ff8888610981848761586d565b95506001600160a01b0388161561152757611524888361151e866125e7565b84612c52565b94505b5f611531846125e7565b9050805f03611542575f945061156c565b8061154d838661586d565b61155f90670de0b6b3a7640000615880565b6115699190615897565b94505b505050509250925092565b6060610ebf6003613d43565b6001600160a01b0381165f9081526005602052604081205481901561178757600e5460405163e7e4b8db60e01b81526001600160a01b0385811660048301525f92169063e7e4b8db90602401602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190615908565b156116255750600e546001600160a01b03166116a4565b600d5460405163e7e4b8db60e01b81526001600160a01b0386811660048301529091169063e7e4b8db90602401602060405180830381865afa15801561166d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116919190615908565b156116a45750600d546001600160a01b03165b600f5460405163739d020f60e11b81526001600160a01b038381166004830152808716602483015261178392879291169063e73a041e90604401602060405180830381865afa1580156116f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171d919061582f565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa15801561175f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105eb919061582f565b9150505b600f54600d54600e546117d2926007926003926001600160a01b03928316927f0000000000000000000000000000000000000000000000000000000000000000928116911689613e09565b6117dc908261585a565b9392505050565b5f610ebf610b9f612542565b5f610ebf612542565b5f9182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610c63612df5565b5f80846001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015611868573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188c9190615923565b5050600f54604051631bf49af760e11b81526001600160a01b03808a1660048301529394505f936118f09350899288927f000000000000000000000000000000000000000000000000000000000000000092909116906337e935ee906024016108c1565b905061191e817f000000000000000000000000000000000000000000000000000000000000000084886127f4565b9695505050505050565b5f80516020615d5f83398151915261193f81612c48565b6012546040516309209da160e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906309209da1906044015f604051808303815f87803b1580156119a9575f80fd5b505af11580156119bb573d5f803e3d5ffd5b5050506012929092555050565b6119d15f6123c8565b565b5f80516020615d5f8339815191526119ea81612c48565b6001600160a01b0382166119fc575f80fd5b5f6001600160a01b0316826001600160a01b031663025f1a5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6691906158b6565b6001600160a01b031603611a78575f80fd5b60035482906001600160a01b03165b6001600160a01b03811615611ae657611a9f81612093565b611ac75760405163017dad6760e71b81526001600160a01b0382166004820152602401610712565b6001600160a01b039081165f9081526004602052604090205416611a87565b600e546040516333d864dd60e21b81526001600160a01b03918216600482018190528683166024830152917f0000000000000000000000000000000000000000000000000000000000000000169063cf619374906044015f604051808303815f87803b158015611b54575f80fd5b505af1158015611b66573d5f803e3d5ffd5b5050600d80546001600160a01b039485166001600160a01b031991821617909155600e8054969094169516949094179091555050505050565b5f80516020615d5f833981519152611bb681612c48565b5f8290505f6001600160a01b0316816001600160a01b03166342a9d1316040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2491906158b6565b6001600160a01b031603611c36575f80fd5b600f546040516399146dff60e01b81526001600160a01b03918216600482015284821660248201527f0000000000000000000000000000000000000000000000000000000000000000909116906399146dff906044015f604051808303815f87803b158015611ca3575f80fd5b505af1158015611cb5573d5f803e3d5ffd5b5050600f80546001600160a01b0319166001600160a01b03949094169390931790925550505050565b5f8281526001602081905260409091200154611cf981612c48565b610bcf8383612d8f565b5f80516020615d5f833981519152611d1a81612c48565b611d22614160565b506002805460ff19166001179055565b5f80516020615d5f833981519152611d4981612c48565b604051633759d6ad60e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000001690636eb3ad5a906044015f604051808303815f87803b158015611db0575f80fd5b505af1158015611dc2573d5f803e3d5ffd5b505050506001600160a01b03929092165f9081526006602052604090205550565b60025461010090046001600160a01b03163314611e355760405162461bcd60e51b815260206004820152601060248201526f10b832b73234b733a3b7bb32b93737b960811b6044820152606401610712565b600c54611e59905f80516020615d5f833981519152906001600160a01b0316612d8f565b600254611e82905f80516020615d5f8339815191529061010090046001600160a01b0316612d25565b60028054600c80546101008084046001600160a01b039081166001600160a01b031990931692909217909255610100600160a81b03199092169283905560405163a12f83a960e01b81529204811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a12f83a9906024015f604051808303815f87803b158015611f18575f80fd5b505af1158015611f2a573d5f803e3d5ffd5b50505050565b5f80516020615d5f833981519152611f4781612c48565b6010546040516368e5255760e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906368e52557906044015f604051808303815f87803b158015611fb1575f80fd5b505af1158015611fc3573d5f803e3d5ffd5b5050506010929092555050565b5f80516020615d5f833981519152611fe781612c48565b6001600160a01b038216611ff9575f80fd5b50600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b5f80516020615d5f83398151915261203981612c48565b6120416141b9565b506002805460ff19169055565b5f5460ff16156119d15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610712565b600e54600d545f916001600160a01b039081169116811580159061211a575060405163e7e4b8db60e01b81526001600160a01b03858116600483015283169063e7e4b8db90602401602060405180830381865afa1580156120f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211a9190615908565b15612129575060019392505050565b6001600160a01b038116158015906121a4575060405163e7e4b8db60e01b81526001600160a01b03858116600483015282169063e7e4b8db90602401602060405180830381865afa158015612180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a49190615908565b156121b3575060019392505050565b505f9392505050565b6001600160a01b0383165f9081526002850160205260408120548181156122f057856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015612219573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223d9190615923565b50919250505042811015612253575f92506123be565b604051633580ec1360e11b81526001600160a01b0387811660048301525f9190871690636b01d82690602401602060405180830381865afa9250505080156122b8575060408051601f3d908101601f191682019092526122b59181019061582f565b60015b156122c05790505b80156122ea578083146122ea576001600160a01b0387165f90815260028901602052604090208190555b506123b9565b604051633580ec1360e11b81526001600160a01b038781166004830152861690636b01d82690602401602060405180830381865afa925050508015612352575060408051601f3d908101601f1916820190925261234f9181019061582f565b60015b612361575f91505f92506123be565b801561236d5780612370565b60015b9250505f61237f888887613b01565b9250905080612391575f9350506123be565b61239b88886141f1565b506001600160a01b0386165f90815260028801602052604090208290555b600192505b9450945094915050565b600f54612404906007906003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006136a0565b61240e600361437d565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612472573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612496919061582f565b90508181111561252f57604051636e553f6560e01b815282820360048201523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303815f875af115801561250b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcf919061582f565b81811015610c4e57610c4e818303612ab2565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156125a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc919061582f565b9050806125d7614597565b6125e1919061585a565b91505090565b600d54600e54600f545f926001600160a01b039081169281169161263591600791600391167f0000000000000000000000000000000000000000000000000000000000000000868689613e09565b600f54612670906003906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008686614684565b61267a908661585a565b612684919061585a565b949350505050565b5f80856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ee9190615975565b6126f990600a615a75565b90505f866001600160a01b031663ef4474cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061275c919061582f565b9050835f0361279b57612777670de0b6b3a764000083615880565b856127828884615880565b61278c9190615880565b6127969190615897565b6127e9565b6127ad670de0b6b3a764000083615880565b6127bf90670de0b6b3a7640000615880565b85876127cb8785615880565b6127d59190615880565b6127df9190615880565b6127e99190615897565b979650505050505050565b5f80834211612826576301da9c008561280d428761586d565b6128179190615880565b6128219190615897565b612828565b5f5b9050670de0b6b3a764000061283d8285615880565b6128479190615897565b612851908661585a565b61285b8688615880565b6128659190615897565b9150858211612874578161191e565b5093949350505050565b600f545f90819081908190819081906128c5906003906001600160a01b03168b8b7f000000000000000000000000000000000000000000000000000000000000000061482a565b919450925090506128d6838661585a565b94506128e2828561585a565b600f549094505f9081908190612929906007906003906001600160a01b03168f8f7f0000000000000000000000000000000000000000000000000000000000000000614985565b9194509250905061293a838961585a565b9750612946828861585a565b965083158015612954575080155b801561296857506001600160a01b038c1615155b15612a2f57600f54604051631bf49af760e11b81526001600160a01b038e811660048301525f9216906337e935ee90602401602060405180830381865afa1580156129b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d9919061582f565b90505f612a088e8e7f00000000000000000000000000000000000000000000000000000000000000008561268c565b9050612a14818a61585a565b9850612a208e82614c33565b612a2a908b61585a565b995050505b86158015612a3b575089155b15612a50575f985050505050505050506117dc565b612a5a8a8861585a565b612a649089615897565b9c9b505050505050505050505050565b5f612a8185858585612c52565b60135490915081111561100757604051633cb36e3560e11b81526001600160a01b0386166004820152602401610712565b6040516363737ac960e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b460af9490829063c6e6f59290602401602060405180830381865afa158015612b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b41919061582f565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303815f875af1158015612b89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4e919061582f565b6040516001600160a01b0380851660248301528316604482015260648101829052611f2a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614c69565b6040516001600160a01b038316602482015260448101829052610bcf90849063a9059cbb60e01b90606401612be1565b610c638133614d3c565b5f8084612c5e87611583565b612c68919061585a565b90505f83612c76878761585a565b612c80919061586d565b90507f0000000000000000000000000000000000000000000000000000000000000000612cb583670de0b6b3a7640000615880565b612cbf9190615897565b91507f0000000000000000000000000000000000000000000000000000000000000000612cf482670de0b6b3a7640000615880565b612cfe9190615897565b90508015612d19578061278c83670de0b6b3a7640000615880565b505f9695505050505050565b612d2f82826117f8565b610c4e575f8281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b612d9982826117f8565b15610c4e575f8281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b3330146119d15760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b6044820152606401610712565b612e3461204e565b610c63816123c8565b5f612e4783612093565b612e6f5760405163f14a3cf960e01b81526001600160a01b0384166004820152602401610712565b612e7882612093565b612ea05760405163017dad6760e71b81526001600160a01b0383166004820152602401610712565b816001600160a01b031663cc5b6e4a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612edc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f00919061582f565b836001600160a01b031663cc5b6e4a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f60919061582f565b14612f895760405163017dad6760e71b81526001600160a01b0383166004820152602401610712565b5f612fb66003847f0000000000000000000000000000000000000000000000000000000000000000613b01565b50905080612fe25760405163017dad6760e71b81526001600160a01b0384166004820152602401610712565b5f846001600160a01b031663505d799e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561301f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061304391906158b6565b9050806001600160a01b031663eb54f9ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613081573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a5919061582f565b421115806131125750806001600160a01b031663ba829d716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310e919061582f565b4210155b156126845760405163f046007760e01b815260040160405180910390fd5b60605f866001600160a01b031663357a77d26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561316f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319391906158b6565b6040805160018082528183019092529192505f9190816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f199092019101816131ad57905050905086815f815181106131fb576131fb615a97565b6020026020010181905250838511156132e7578385035f61321a612542565b90508181101561324757604051633bf1b8e760e11b81526004810182905260248101839052604401610712565b61325082612ab2565b6132e4846001600160a01b0316635c4b440e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132b391906158b6565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169084614d95565b50505b60405163db875b6960e01b81526001600160a01b0389169063db875b6990613313908490600401615aab565b5f604051808303815f875af115801561332e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133559190810190615b55565b925082515f0361337857604051636df5846d60e01b815260040160405180910390fd5b835f036133f2576133ed835f8151811061339457613394615a97565b60200260200101516040518060800160405280896001600160a01b031681526020018a6060015181526020018c6001600160a01b031681526020018b6001600160a01b03168152506007614ea89092919063ffffffff16565b613431565b5f60076002015f855f8151811061340b5761340b615a97565b602002602001015181526020019081526020015f20905087606001518160010181905550505b83851015613550576040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691636e553f65917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134e9919061582f565b6040516001600160e01b031960e084901b16815260048101919091523060248201526044016020604051808303815f875af115801561352a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354e919061582f565b505b50509695505050505050565b5f61356561204e565b61356e5f6123c8565b610ebf610b9f612542565b61358161204e565b60025460ff16156135a55760405163035edea360e41b815260040160405180910390fd5b610c635f6123c8565b60605f6135ba836150bf565b90508015613661578067ffffffffffffffff8111156135db576135db615a83565b604051908082528060200260200182016040528015613604578160200160208202803683370190505b5083549092505f905b801561365e5780848361361f81615bf6565b94508151811061363157613631615a97565b60200260200101818152505061365785825f908152600191909101602052604090205490565b905061360d565b50505b50919050565b5f80613672836125e7565b9050805f0361368357505f92915050565b8061369684670de0b6b3a7640000615880565b6117dc9190615897565b835415611f2a578354805b8115613af9575f828152600287810160209081526040808420815160808101835281546001600160a01b0390811682526001808401548387015295830154811682850152600390920154821660608201908152888752948c0190935281852054935191516372e3a5b160e01b8152600481018890529294929116906372e3a5b19060240160e060405180830381865afa15801561374a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061376e9190615c0e565b6080015190505f83604001516001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137d99190615908565b15613950575082516001905f9081906137f5908c908c8c6121bc565b92505091508115801561380757508042115b15613949575f865f015190505f816001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015613850573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138749190615923565b506040516370a0823160e01b815230600482018190529194508493506001600160a01b038085169350637e237e899291908716906370a0823190602401602060405180830381865afa1580156138cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f0919061582f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015613933575f80fd5b505af1925050508015613944575060015b505050505b5050613a73565b83604001516001600160a01b0316638dfea9e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613990573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b49190615908565b15613a68576040805160018082528183019092525f916020808301908036833701905050905086815f815181106139ed576139ed615a97565b60200260200101818152505084606001516001600160a01b031663720e52c5826040518263ffffffff1660e01b8152600401613a299190615692565b5f604051808303815f87803b158015613a40575f80fd5b505af1925050508015613a51575060015b613a5d575f9150613a62565b600191505b50613a73565b815f03613a73575060015b8015613aec575f8681526001808c01602090815260408084208490556002808f01909252832080546001600160a01b0319908116825592810193909355820180548216905560039091018054909116905589548603613ad457828a55613aec565b5f85815260018b016020526040902083905593945084935b50909392506136ab915050565b505050505050565b5f805f80856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa158015613b41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b659190615923565b929550909350909150506001600160a01b0380831690861614613b8c575f93505050613d3b565b42831015613b9e575f93505050613d3b565b5f816001600160a01b031663190e80126040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bff9190615975565b60ff1690505f5b81811015613d325760405163172c48c760e01b8152600481018290525f906001600160a01b0385169063172c48c790602401602060405180830381865afa158015613c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c7791906158b6565b6001600160a01b0381165f90815260038c016020526040812054919250819003613ca9575f9750505050505050613d3b565b6040516320db25d560e01b81526001600160a01b0383811660048301528291908716906320db25d590602401602060405180830381865afa158015613cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d14919061582f565b1015613d28575f9750505050505050613d3b565b5050600101613c06565b50600194505050505b935093915050565b60605f613d4f836150fc565b90508015613661578067ffffffffffffffff811115613d7057613d70615a83565b604051908082528060200260200182016040528015613d99578160200160208202803683370190505b5083549092505f906001600160a01b03165b6001600160a01b0381161561365e57808483613dc681615bf6565b945081518110613dd857613dd8615a97565b60200260200101906001600160a01b031690816001600160a01b031681525050613e02858261514d565b9050613dab565b86545f90613e1857505f6127e9565b87545f905b8015614153575f81815260028b01602052604090206001600160a01b03851615801590613e57575080546001600160a01b03868116911614155b15613e7257505f90815260018a016020526040902054613e1d565b60038101546040516372e3a5b160e01b8152600481018490525f916001600160a01b0316906372e3a5b19060240160e060405180830381865afa158015613ebb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613edf9190615c0e565b6080015182546001600160a01b03165f90815260028d016020526040902054909150158015613f7f5750816002015f9054906101000a90046001600160a01b03166001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7f9190615908565b1561412f5760028201546001600160a01b0385811691161461412a5781546040516370a0823160e01b81523060048201525f9161405d916001600160a01b039091169081906370a0823190602401602060405180830381865afa158015613fe8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061400c919061582f565b8c8e6001600160a01b03166337e935ee885f015f9054906101000a90046001600160a01b03166040518263ffffffff1660e01b81526004016108c191906001600160a01b0391909116815260200190565b835490915061410b9082908c9061407c906001600160a01b031661516f565b8e6001600160a01b0316636b01d826885f015f9054906101000a90046001600160a01b03166040518263ffffffff1660e01b81526004016140cc91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156140e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093f919061582f565b614115908761585a565b60028401549096506001600160a01b03169450505b61413c565b614139818661585a565b94505b50505f90815260018a016020526040902054613e1d565b5050979650505050505050565b61416861204e565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861419c3390565b6040516001600160a01b03909116815260200160405180910390a1565b6141c16151da565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361419c565b81546001600160a01b031680614239575081546001600160a01b039091166001600160a01b0319918216811783555f9081526001909201602052604090912080549091169055565b5f6142438361516f565b90505f5b6001600160a01b0383161561100757836001600160a01b0316836001600160a01b03160315611007575f61427a8461516f565b905080831015614315576001600160a01b0382166142b05785546001600160a01b0319166001600160a01b0386161786556142e0565b6001600160a01b038281165f908152600188016020526040902080546001600160a01b0319169187169190911790555b506001600160a01b038481165f908152600187016020526040902080546001600160a01b031916918516919091179055611007565b5f614320878661514d565b90506001600160a01b0381166143735750506001600160a01b038084165f90815260018701602052604080822080549388166001600160a01b031994851681179091558252902080549091169055611007565b9391506142479050565b80546001600160a01b031661438f5750565b80546001600160a01b0316805b6001600160a01b03821615610bcf575f426143b68461516f565b11611f2a576040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614401573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614425919061582f565b905080156144fa575f856001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa15801561446a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061448e9190615923565b50604051637e237e8960e01b8152306004820152602481018690529093506001600160a01b0384169250637e237e8991506044015f604051808303815f87803b1580156144d9575f80fd5b505af19250505080156144ea575060015b156144f457600192505b506144ff565b600191505b614509868661514d565b9250811561458d5785546001600160a01b03908116908616036145405785546001600160a01b0319166001600160a01b0384161786555b6001600160a01b038085165f908152600188016020908152604080832080548589166001600160a01b03199182161790915593891683528083208054909416909355600289019052908120555b505091905061439c565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a9082906370a0823190602401602060405180830381865afa158015614603573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614627919061582f565b6040518263ffffffff1660e01b815260040161464591815260200190565b602060405180830381865afa158015614660573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf919061582f565b84545f906001600160a01b031661469c57505f614821565b85546001600160a01b03165b6001600160a01b0381161561481f575f6146c18261516f565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa158015614708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061472c919061582f565b604051633580ec1360e11b81526001600160a01b0385811660048301529192505f918a1690636b01d82690602401602060405180830381865afa158015614775573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614799919061582f565b604051631bf49af760e11b81526001600160a01b0380871660048301529192505f916147d691879186918d918f16906337e935ee906024016108c1565b9050428411156147fd576147ec818a86856127f4565b6147f6908761585a565b955061480a565b614807818761585a565b95505b6148148b8661514d565b9450505050506146a8565b505b95945050505050565b84545f90819081906001600160a01b031661484c57505f91508190508061497a565b87546001600160a01b03165b6001600160a01b03811615614978576040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156148ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148cf919061582f565b9050801561496657816001600160a01b0316886001600160a01b031603614901576148fa878261585a565b9050600192505b604051631bf49af760e11b81526001600160a01b0380841660048301525f9161493c91859185918b91908f16906337e935ee906024016108c1565b90505f6149498483614c33565b9050614955818861585a565b9650614961828761585a565b955050505b6149708a8361514d565b915050614858565b505b955095509592505050565b85545f908190819061499e57505f915081905080614c27565b88545f905b8015614c24575f81815260028c016020526040812080549091906001600160a01b03808c169116036149da57506001935087614bd4565b60038201546040516372e3a5b160e01b8152600481018590526001600160a01b03909116906372e3a5b19060240160e060405180830381865afa158015614a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a479190615c0e565b6080015182546001600160a01b03165f90815260028e016020526040902054909150158015614ae75750816002015f9054906101000a90046001600160a01b03166001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ae79190615908565b15614bd45760028201546001600160a01b03858116911614614bd45781546040516370a0823160e01b8152306004820152614bc1916001600160a01b03169081906370a0823190602401602060405180830381865afa158015614b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b70919061582f565b8a8e6001600160a01b03166337e935ee875f015f9054906101000a90046001600160a01b03166040518263ffffffff1660e01b81526004016108c191906001600160a01b0391909116815260200190565b60028301546001600160a01b0316945090505b8015614c0d5781545f90614bf1906001600160a01b031683614c33565b9050614bfd818961585a565b9750614c09828861585a565b9650505b50505f90815260018b0160205260409020546149a3565b50505b96509650969350505050565b5f80614c3e8461516f565b905042811115614c62575f614c5282615222565b9050614c5e8482615880565b9250505b5092915050565b5f614cbd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661522d9092919063ffffffff16565b905080515f1480614cdd575080806020019051810190614cdd9190615908565b610bcf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610712565b614d4682826117f8565b610c4e57614d538161523b565b614d5e83602061524d565b604051602001614d6f929190615ca8565b60408051601f198184030181529082905262461bcd60e51b825261071291600401615d1c565b801580614e0d5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015614de7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e0b919061582f565b155b614e785760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610712565b6040516001600160a01b038316602482015260448101829052610bcf90849063095ea7b360e01b90606401612be1565b5f835f0154905081604001516001600160a01b0316635fb8f3ed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f139190615908565b15614f1c575f80fd5b80614f9b57508183555f9182526001808401602090815260408085208590556002958601825293849020835181546001600160a01b03199081166001600160a01b039283161783559285015193820193909355938301519484018054821695831695909517909455606090910151600390920180549093169116179055565b5f5b811561505157818414615051575f82815260028087016020526040918290200154908401516001600160a01b039182169181168211156150105782614fe457858755614ff7565b5f83815260018801602052604090208690555b50505f8481526001860160205260409020829055615051565b5f84815260018801602052604090205480615046575050505f828152600186016020526040808220869055858252812055615051565b939250614f9d915050565b50505f91825260029283016020908152604092839020825181546001600160a01b039182166001600160a01b03199182161783559284015160018301559383015194810180549585169583169590951790945560609091015160039093018054939092169216919091179055565b80545f906150ce57505f919050565b81545b801561366157816150e181615bf6565b5f928352600185016020526040909220549192506150d19050565b80545f906001600160a01b031661511457505f919050565b81546001600160a01b03165b6001600160a01b03811615613661578161513981615bf6565b925050615146838261514d565b9050615120565b6001600160a01b038082165f9081526001840160205260409020541692915050565b5f816001600160a01b03166379502c556040518163ffffffff1660e01b8152600401608060405180830381865afa1580156151ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151d09190615923565b5091949350505050565b5f5460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610712565b5f610a96428361586d565b606061268484845f856153e3565b6060610a966001600160a01b03831660145b60605f61525b836002615880565b61526690600261585a565b67ffffffffffffffff81111561527e5761527e615a83565b6040519080825280601f01601f1916602001820160405280156152a8576020820181803683370190505b509050600360fc1b815f815181106152c2576152c2615a97565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106152f0576152f0615a97565b60200101906001600160f81b03191690815f1a9053505f615312846002615880565b61531d90600161585a565b90505b6001811115615394576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061535157615351615a97565b1a60f81b82828151811061536757615367615a97565b60200101906001600160f81b03191690815f1a90535060049490941c9361538d81615d2e565b9050615320565b5083156117dc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610712565b6060824710156154445760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610712565b5f80866001600160a01b0316858760405161545f9190615d43565b5f6040518083038185875af1925050503d805f8114615499576040519150601f19603f3d011682016040523d82523d5f602084013e61549e565b606091505b50915091506127e987838387606083156155185782515f03615511576001600160a01b0385163b6155115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610712565b5081612684565b612684838381511561552d5781518083602001fd5b8060405162461bcd60e51b81526004016107129190615d1c565b6001600160a01b0381168114610c63575f80fd5b5f806040838503121561556c575f80fd5b823561557781615547565b946020939093013593505050565b5f60208284031215615595575f80fd5b81356001600160e01b0319811681146117dc575f80fd5b5f602082840312156155bc575f80fd5b81356117dc81615547565b8015158114610c63575f80fd5b5f80604083850312156155e5575f80fd5b82356155f081615547565b91506020830135615600816155c7565b809150509250929050565b5f6020828403121561561b575f80fd5b5035919050565b5f8060408385031215615633575f80fd5b82359150602083013561560081615547565b5f805f805f60a08688031215615659575f80fd5b853561566481615547565b9450602086013561567481615547565b94979496505050506040830135926060810135926080909101359150565b602080825282518282018190525f9190848201906040850190845b818110156156c9578351835292840192918401916001016156ad565b50909695505050505050565b5f5b838110156156ef5781810151838201526020016156d7565b50505f910152565b5f815180845261570e8160208601602086016156d5565b601f01601f19169290920160200192915050565b8215158152604060208201525f61268460408301846156f7565b5f805f6040848603121561574e575f80fd5b833561575981615547565b9250602084013567ffffffffffffffff80821115615775575f80fd5b818601915086601f830112615788575f80fd5b813581811115615796575f80fd5b8760208260051b85010111156157aa575f80fd5b6020830194508093505050509250925092565b602080825282518282018190525f9190848201906040850190845b818110156156c95783516001600160a01b0316835292840192918401916001016157d8565b5f805f6060848603121561580f575f80fd5b833561581a81615547565b95602085013595506040909401359392505050565b5f6020828403121561583f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a9657610a96615846565b81810381811115610a9657610a96615846565b8082028115828204841417610a9657610a96615846565b5f826158b157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156158c6575f80fd5b81516117dc81615547565b602080825281018290525f6001600160fb1b038311156158ef575f80fd5b8260051b80856040850137919091016040019392505050565b5f60208284031215615918575f80fd5b81516117dc816155c7565b5f805f8060808587031215615936575f80fd5b84519350602085015161594881615547565b604086015190935061595981615547565b606086015190925061596a81615547565b939692955090935050565b5f60208284031215615985575f80fd5b815160ff811681146117dc575f80fd5b600181815b808511156159cf57815f19048211156159b5576159b5615846565b808516156159c257918102915b93841c939080029061599a565b509250929050565b5f826159e557506001610a96565b816159f157505f610a96565b8160018114615a075760028114615a1157615a2d565b6001915050610a96565b60ff841115615a2257615a22615846565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715615a50575081810a610a96565b615a5a8383615995565b805f1904821115615a6d57615a6d615846565b029392505050565b5f6117dc60ff8416836159d7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015615b1757815180518552868101516001600160a01b0390811688870152868201518787015260608083015190870152608091820151169085015260a09093019290850190600101615ac7565b5091979650505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615b4d57615b4d615a83565b604052919050565b5f6020808385031215615b66575f80fd5b825167ffffffffffffffff80821115615b7d575f80fd5b818501915085601f830112615b90575f80fd5b815181811115615ba257615ba2615a83565b8060051b9150615bb3848301615b24565b8181529183018401918481019088841115615bcc575f80fd5b938501935b83851015615bea57845182529385019390850190615bd1565b98975050505050505050565b5f60018201615c0757615c07615846565b5060010190565b5f60e08284031215615c1e575f80fd5b60405160e0810181811067ffffffffffffffff82111715615c4157615c41615a83565b604052825181526020830151615c5681615547565b8060208301525060408301516040820152606083015160608201526080830151608082015260a0830151615c8981615547565b60a082015260c0830151615c9c816155c7565b60c08201529392505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351615cdf8160178501602088016156d5565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615d108160288401602088016156d5565b01602801949350505050565b602081525f6117dc60208301846156f7565b5f81615d3c57615d3c615846565b505f190190565b5f8251615d548184602087016156d5565b919091019291505056fe7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f55a264697066735822122027e063c3efd1cd593de2673271bd141faab490a4884b2d45fe69f5a381e4ed2764736f6c63430008170033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000027af15ed04dfb358ea86f22ff93625d6b7cef4940000000000000000000000001b707eb09d622150f5e2e1cd285b0a4fb513e088000000000000000000000000824726bc2f7c9e8e0a7556660af26c50b93df5f9000000000000000000000000ad3e98096f768a44426824e0b63c65d722480088000000000000000000000000fe62875e936dc7842c9300d6390d9572d31bfa9d000000000000000000000000810a105531f6cfdfd5ad930927f34fd9ff217a0500000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000006ebe0000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000f757364635f776574685f676f765f350000000000000000000000000000000000