0 txs
1 call
constructor
constructor(address _router, address _roleStore, address _dataStore, address _eventEmitter, address _depositHandler, address _withdrawalHandler, address _shiftHandler, address _orderHandler, address _externalHandler)
functions
dataStore
viewfunction dataStore() view returns (address)
depositHandler
viewfunction depositHandler() view returns (address)
eventEmitter
viewfunction eventEmitter() view returns (address)
externalHandler
viewfunction externalHandler() view returns (address)
orderHandler
viewfunction orderHandler() view returns (address)
roleStore
viewfunction roleStore() view returns (address)
router
viewfunction router() view returns (address)
shiftHandler
viewfunction shiftHandler() view returns (address)
withdrawalHandler
viewfunction withdrawalHandler() view returns (address)
cancelDeposit
payablefunction cancelDeposit(bytes32 key) payable
cancelOrder
payablefunction cancelOrder(bytes32 key) payable
cancelShift
payablefunction cancelShift(bytes32 key) payable
cancelWithdrawal
payablefunction cancelWithdrawal(bytes32 key) payable
claimAffiliateRewards
payablefunction claimAffiliateRewards(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
claimCollateral
payablefunction claimCollateral(address[] markets, address[] tokens, uint256[] timeKeys, address receiver) payable returns (uint256[])
claimFundingFees
payablefunction claimFundingFees(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
claimUiFees
payablefunction claimUiFees(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
createDeposit
payablefunction createDeposit(tuple params) payable returns (bytes32)
createOrder
payablefunction createOrder(tuple params) payable returns (bytes32)
createShift
payablefunction createShift(tuple params) payable returns (bytes32)
createWithdrawal
payablefunction createWithdrawal(tuple params) payable returns (bytes32)
executeAtomicWithdrawal
payablefunction executeAtomicWithdrawal(tuple params, tuple oracleParams) payable
makeExternalCalls
payablefunction makeExternalCalls(address[] externalCallTargets, bytes[] externalCallDataList, address[] refundTokens, address[] refundReceivers) payable
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
sendNativeToken
payablefunction sendNativeToken(address receiver, uint256 amount) payable
sendTokens
payablefunction sendTokens(address token, address receiver, uint256 amount) payable
sendWnt
payablefunction sendWnt(address receiver, uint256 amount) payable
setSavedCallbackContract
payablefunction setSavedCallbackContract(address market, address callbackContract) payable
setUiFeeFactor
payablefunction setUiFeeFactor(uint256 uiFeeFactor) payable
simulateExecuteDeposit
payablefunction simulateExecuteDeposit(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteLatestDeposit
payablefunction simulateExecuteLatestDeposit(tuple simulatedOracleParams) payable
simulateExecuteLatestOrder
payablefunction simulateExecuteLatestOrder(tuple simulatedOracleParams) payable
simulateExecuteLatestShift
payablefunction simulateExecuteLatestShift(tuple simulatedOracleParams) payable
simulateExecuteLatestWithdrawal
payablefunction simulateExecuteLatestWithdrawal(tuple simulatedOracleParams, uint8 swapPricingType) payable
simulateExecuteOrder
payablefunction simulateExecuteOrder(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteShift
payablefunction simulateExecuteShift(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteWithdrawal
payablefunction simulateExecuteWithdrawal(bytes32 key, tuple simulatedOracleParams, uint8 swapPricingType) payable
updateOrder
payablefunction updateOrder(bytes32 key, uint256 sizeDeltaUsd, uint256 acceptablePrice, uint256 triggerPrice, uint256 minOutputAmount, uint256 validFromTime, bool autoCancel) payable
events
No events.
errors
CollateralAlreadyClaimed
error CollateralAlreadyClaimed(uint256 adjustedClaimableAmount, uint256 claimedAmount)
DisabledFeature
error DisabledFeature(bytes32 key)
DisabledMarket
error DisabledMarket(address market)
EmptyAddressInMarketTokenBalanceValidation
error EmptyAddressInMarketTokenBalanceValidation(address market, address token)
EmptyDeposit
error EmptyDeposit()
EmptyHoldingAddress
error EmptyHoldingAddress()
EmptyMarket
error EmptyMarket()
EmptyOrder
error EmptyOrder()
EmptyReceiver
error EmptyReceiver()
EmptyTokenTranferGasLimit
error EmptyTokenTranferGasLimit(address token)
InvalidClaimableFactor
error InvalidClaimableFactor(uint256 value)
InvalidClaimAffiliateRewardsInput
error InvalidClaimAffiliateRewardsInput(uint256 marketsLength, uint256 tokensLength)
InvalidClaimCollateralInput
error InvalidClaimCollateralInput(uint256 marketsLength, uint256 tokensLength, uint256 timeKeysLength)
InvalidClaimFundingFeesInput
error InvalidClaimFundingFeesInput(uint256 marketsLength, uint256 tokensLength)
InvalidClaimUiFeesInput
error InvalidClaimUiFeesInput(uint256 marketsLength, uint256 tokensLength)
InvalidMarketTokenBalance
error InvalidMarketTokenBalance(address market, address token, uint256 balance, uint256 expectedMinBalance)
InvalidMarketTokenBalanceForClaimableFunding
error InvalidMarketTokenBalanceForClaimableFunding(address market, address token, uint256 balance, uint256 claimableFundingFeeAmount)
InvalidMarketTokenBalanceForCollateralAmount
error InvalidMarketTokenBalanceForCollateralAmount(address market, address token, uint256 balance, uint256 collateralAmount)
InvalidUiFeeFactor
error InvalidUiFeeFactor(uint256 uiFeeFactor, uint256 maxUiFeeFactor)
TokenTransferError
error TokenTransferError(address token, address receiver, uint256 amount)
Unauthorized
error Unauthorized(address msgSender, string role)
creation bytecode
0x6101a06040523480156200001257600080fd5b506040516200631538038062006315833981016040819052620000359162000097565b60016000556001600160a01b0397881660805297871660a05294861660c05292851660e0529084166101005283166101205282166101405281166101605216610180526200016e565b6001600160a01b03811681146200009457600080fd5b50565b60008060008060008060008060006101208a8c031215620000b757600080fd5b8951620000c4816200007e565b60208b0151909950620000d7816200007e565b60408b0151909850620000ea816200007e565b60608b0151909750620000fd816200007e565b60808b015190965062000110816200007e565b60a08b015190955062000123816200007e565b60c08b015190945062000136816200007e565b60e08b015190935062000149816200007e565b6101008b01519092506200015d816200007e565b809150509295985092959850929598565b60805160a05160c05160e0516101005161012051610140516101605161018051615ff4620003216000396000818161027101526119c90152600081816104e601528181610f5e0152818161132c015281816115440152818161159a0152611b6b01526000818161057901528181610db0015281816114c00152818161176d0152611c440152600081816102300152818161083d0152818161103d0152818161119f0152818161171301526117c30152600081816104250152818161098901528181610b4601528181610eaf0152610fe5015260008181610459015281816106f501528181610cab01528181610e5c015281816119210152611e3001526000818161035901528181610635015281816106d4015281816107ff015281816108d601528181610a2801528181610bf001528181610c8a01528181610dfd01528181610e3b01528181610fa7015281816110b00152818161121001528181611379015281816113d901528181611506015281816118740152818161190001528181611a8001528181611c0601528181611d830152611e0f0152600081816105d30152611cc3015260006102de0152615ff46000f3fe6080604052600436106101b55760003560e01c806301a9cbb2146101ba578063054d5174146101e3578063073fb09e146101f85780632a3db3eb1461020b5780632c2f3c071461021e5780632e944bd61461025f578063314044841461029357806349287a22146102a657806349e58799146102b95780634a4a7b04146102cc57806353ead2d3146103005780635a03cd94146103135780635b4e956114610326578063660d0d67146103475780636996807b1461037b5780636adbfaf51461038e5780636b5341a1146103a15780637213c5a0146103b45780637489ec23146103c75780637d39aaf1146103da57806396be2898146103ed578063983fa392146104005780639c8b2cfb146104135780639ff78c3014610447578063a7115fa81461047b578063ac9650d81461048e578063ad23c5a1146104ae578063b1f906b9146104c1578063b5848305146104d4578063bc190c1414610508578063c41b1ab31461051b578063d59922b01461052e578063dd5baad214610541578063e10f8aa614610554578063e65c9ae114610567578063e6d66ac81461059b578063e9249b57146105ae578063f887ea40146105c1575b600080fd5b6101cd6101c8366004614153565b6105f5565b6040516101da91906141ca565b60405180910390f35b6101f66101f136600461431a565b6107f0565b005b6101f6610206366004614367565b6108b7565b6101f66102193660046143a0565b61096a565b34801561022a57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6040516101da91906143e6565b34801561026b57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66102a13660046143fa565b6109ee565b6101cd6102b4366004614153565b610bb9565b6101f66102c73660046143a0565b610d91565b3480156102d857600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f661030e366004614413565b610de7565b6101f66103213660046143fa565b610e2d565b61033961033436600461443f565b610e8d565b6040519081526020016101da565b34801561035357600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b61033961038936600461447a565b610f3b565b6101f661039c3660046144b5565b610f98565b6101f66103af366004614502565b61101c565b6101f66103c23660046143fa565b611076565b6101f66103d53660046143fa565b6111d6565b6101f66103e8366004614413565b611363565b6101f66103fb3660046143fa565b61139f565b6101f661040e3660046144b5565b6114f7565b34801561041f57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561045357600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66104893660046143a0565b61157b565b6104a161049c366004614561565b6115d1565b6040516101da919061467a565b6103396104bc36600461468d565b6116f0565b6103396104cf3660046146c1565b61174a565b3480156104e057600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66105163660046146d4565b6117a4565b6101cd610529366004614153565b61183d565b6101f661053c366004614751565b6119aa565b6101f661054f3660046148c1565b611a46565b6101f66105623660046144b5565b611bf7565b34801561057357600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66105a9366004614921565b611c7b565b6101cd6105bc366004614962565b611d2c565b3480156105cd57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b60606105ff611ee9565b825184511461063057835183516040516374cee48d60e01b8152600401610627929190614a50565b60405180910390fd5b6106627f000000000000000000000000000000000000000000000000000000000000000061065d30611f42565b611fcf565b835133906000906001600160401b0381111561068057610680613f3d565b6040519080825280602002602001820160405280156106a9578160200160208202803683370190505b50905060005b86518110156107db57737ef312048b09864b7245fe3575df57c68f360a60637ed7d8ea7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868b868151811061072757610727614a5e565b60200260200101518b878151811061074157610741614a5e565b60200260200101518b6040518763ffffffff1660e01b815260040161076b96959493929190614a81565b602060405180830381865af4158015610788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac9190614abb565b8282815181106107be576107be614a5e565b6020908102919091010152806107d381614aea565b9150506106af565b509150506107e96001600055565b9392505050565b6107f8611ee9565b60006108237f0000000000000000000000000000000000000000000000000000000000000000611ffa565b604051632f06430560e21b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc190c149061087690849087908790600401614be0565b600060405180830381600087803b15801561089057600080fd5b505af11580156108a4573d6000803e3d6000fd5b50505050506108b36001600055565b5050565b6108bf611ee9565b60405163b3678d5b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015233602483015280841660448301528216606482015273ff90c1b35de997863b3d69464216e7c3ab2716689063b3678d5b9060840160006040518083038186803b15801561094857600080fd5b505af415801561095c573d6000803e3d6000fd5b505050506108b36001600055565b610972611ee9565b604051632a3db3eb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a3db3eb906109c09085908590600401614c19565b600060405180830381600087803b1580156109da57600080fd5b505af115801561095c573d6000803e3d6000fd5b6109f6611ee9565b60405163fdfc26f360e01b815260009073142dc88526b6ba847ce41a3a73384b7a6f5b10f89063fdfc26f390610a52907f0000000000000000000000000000000000000000000000000000000000000000908690600401614c32565b600060405180830381865af4158015610a6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a979190810190614d61565b90506000610aa482515190565b6001600160a01b031603610acb576040516395b66fe960e01b815260040160405180910390fd5b33610ad582515190565b6001600160a01b031614610b30576040805163a35b150b60e01b8152336004820152602481019190915260196044820152781858d8dbdd5b9d08199bdc8818d85b98d95b11195c1bdcda5d603a1b6064820152608401610627565b604051630c50112160e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906331404484906024015b600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b5050505050610bb66001600055565b50565b6060610bc3611ee9565b8251845114610beb5783518351604051635b3043dd60e01b8152600401610627929190614a50565b610c187f000000000000000000000000000000000000000000000000000000000000000061065d30612014565b835133906000906001600160401b03811115610c3657610c36613f3d565b604051908082528060200260200182016040528015610c5f578160200160208202803683370190505b50905060005b86518110156107db5773c79ee602188126348c02a48e36812566446e1ea363d57d53997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a8581518110610cdc57610cdc614a5e565b60200260200101518a8681518110610cf657610cf6614a5e565b6020026020010151888b6040518763ffffffff1660e01b8152600401610d2196959493929190614a81565b602060405180830381865af4158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d629190614abb565b828281518110610d7457610d74614a5e565b602090810291909101015280610d8981614aea565b915050610c65565b610d99611ee9565b6040516349e5879960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906349e58799906109c09085908590600401614c19565b610def611ee9565b610df882612068565b610e237f0000000000000000000000000000000000000000000000000000000000000000838361208f565b6108b36001600055565b610e35611ee9565b33610e827f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000838561219b565b50610bb66001600055565b6000610e97611ee9565b60405162bd80c160e61b815233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632f60304090610ee69084908790600401614f48565b6020604051808303816000875af1158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190614abb565b915050610f366001600055565b919050565b6000610f45611ee9565b60405163b29e7ea960e01b815233906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b29e7ea990610ee69084908790600090600401615198565b610fa0611ee9565b6000610fcb7f0000000000000000000000000000000000000000000000000000000000000000611ffa565b604051632a3db3eb60e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a3db3eb90610b799084908690600401614c19565b611024611ee9565b60405163021bb5a760e61b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906386ed69c090610876908490879087906004016153e9565b61107e611ee9565b60405163fdfc26f360e01b8152600090736e4aec8c54d79e738cbae0985bf42f65a7eb68039063fdfc26f3906110da907f0000000000000000000000000000000000000000000000000000000000000000908690600401614c32565b600060405180830381865af41580156110f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111f9190810190615503565b90503361112b82515190565b6001600160a01b031614611189576040805163a35b150b60e01b81523360048201526024810191909152601c60448201527b1858d8dbdd5b9d08199bdc8818d85b98d95b15da5d1a191c985dd85b60221b6064820152608401610627565b6040516303909e2d60e51b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637213c5a090602401610b79565b6111de611ee9565b60405163fdfc26f360e01b815260009073dd5a1905dd97e4cf1d2bdcd40d7cea2516caba989063fdfc26f39061123a907f0000000000000000000000000000000000000000000000000000000000000000908690600401614c32565b600060405180830381865af4158015611257573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261127f9190810190615756565b9050600061128c82515190565b6001600160a01b0316036112b357604051631630779760e01b815260040160405180910390fd5b336112bd82515190565b6001600160a01b031614611316576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b6064820152608401610627565b604051637489ec2360e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec2390602401610b79565b61136b611ee9565b61137482612068565b610e237f00000000000000000000000000000000000000000000000000000000000000008383612369565b6113a7611ee9565b60405163fdfc26f360e01b8152600090737a58c55962ab8c67d5d13cd62ee3b4b424374e119063fdfc26f390611403907f0000000000000000000000000000000000000000000000000000000000000000908690600401614c32565b61016060405180830381865af4158015611421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144591906158ed565b90503361145182515190565b6001600160a01b0316146114aa576040805163a35b150b60e01b8152336004820152602481019190915260176044820152761858d8dbdd5b9d08199bdc8818d85b98d95b14da1a599d604a1b6064820152608401610627565b6040516312d7c51360e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396be289890602401610b79565b6114ff611ee9565b600061152a7f0000000000000000000000000000000000000000000000000000000000000000611ffa565b6040516314e22bf560e31b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a7115fa890610b799084908690600401614c19565b611583611ee9565b6040516314e22bf560e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a7115fa8906109c09085908590600401614c19565b6060816001600160401b038111156115eb576115eb613f3d565b60405190808252806020026020018201604052801561161e57816020015b60608152602001906001900390816116095790505b50905060005b828110156116e8576000803086868581811061164257611642614a5e565b905060200281019061165491906159aa565b6040516116629291906159f0565b600060405180830381855af49150503d806000811461169d576040519150601f19603f3d011682016040523d82523d6000602084013e6116a2565b606091505b5091509150816116b5576116b5816123ec565b808484815181106116c8576116c8614a5e565b6020026020010181905250505080806116e090614aea565b915050611624565b505b92915050565b60006116fa611ee9565b604051634c5a91e560e11b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906398b523ca90610ee69084908790600401615a00565b6000611754611ee9565b60405163074ed6cf60e21b815233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d3b5b3c90610ee69084908790600401615a24565b6117ac611ee9565b604051632f06430560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc190c14906117fc90869086908690600401614be0565b600060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506118386001600055565b505050565b6060611847611ee9565b825184511461186f5783518351604051637363cfa560e01b8152600401610627929190614a50565b61189c7f000000000000000000000000000000000000000000000000000000000000000061065d30612425565b6118a582612068565b835133906000906001600160401b038111156118c3576118c3613f3d565b6040519080825280602002602001820160405280156118ec578160200160208202803683370190505b50905060005b86518110156107db5761197b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089848151811061195257611952614a5e565b602002602001015189858151811061196c5761196c614a5e565b6020026020010151878a612474565b82828151811061198d5761198d614a5e565b6020908102919091010152806119a281614aea565b9150506118f2565b6119b2611ee9565b604051630d59922b60e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d59922b090611a04908790879087908790600401615ad7565b600060405180830381600087803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b50505050611a406001600055565b50505050565b611a4e611ee9565b60405163fdfc26f360e01b815260009073dd5a1905dd97e4cf1d2bdcd40d7cea2516caba989063fdfc26f390611aaa907f0000000000000000000000000000000000000000000000000000000000000000908c90600401614c32565b600060405180830381865af4158015611ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aef9190810190615756565b905033611afb82515190565b6001600160a01b031614611b54576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b6064820152608401610627565b60405163483becf160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639077d9e290611bb1908b908b908b908b908b908b908b908b90600090600401615bb1565b600060405180830381600087803b158015611bcb57600080fd5b505af1158015611bdf573d6000803e3d6000fd5b5050505050611bee6001600055565b50505050505050565b611bff611ee9565b6000611c2a7f0000000000000000000000000000000000000000000000000000000000000000611ffa565b6040516349e5879960e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906349e5879990610b799084908690600401614c19565b611c83611ee9565b611c8c82612068565b6040516303704f0f60e31b81526001600160a01b0384811660048301523360248301819052848216604484015260648301849052917f000000000000000000000000000000000000000000000000000000000000000090911690631b82787890608401600060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050506118386001600055565b6060611d36611ee9565b83518551141580611d4957508251845114155b15611d7e5784518451845160405163216068f960e11b8152600481019390935260248301919091526044820152606401610627565b611dab7f000000000000000000000000000000000000000000000000000000000000000061065d306126f9565b611db482612068565b845133906000906001600160401b03811115611dd257611dd2613f3d565b604051908082528060200260200182016040528015611dfb578160200160208202803683370190505b50905060005b8751811015611ed357611ea47f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a8481518110611e6157611e61614a5e565b60200260200101518a8581518110611e7b57611e7b614a5e565b60200260200101518a8681518110611e9557611e95614a5e565b6020026020010151888b612746565b828281518110611eb657611eb6614a5e565b602090810291909101015280611ecb81614aea565b915050611e01565b50915050611ee16001600055565b949350505050565b600260005403611f3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610627565b6002600055565b6000604051602001611f85906020808252601e908201527f434c41494d5f55495f464545535f464541545552455f44495341424c45440000604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b611fd98282612bde565b156108b35760405163dd70e0c960e01b815260048101829052602401610627565b60008061200683612c4a565b90506000611ee18483612cf9565b6000604051602001611f859060208082526028908201527f434c41494d5f414646494c494154455f524557415244535f464541545552455f604082015267111254d05093115160c21b606082015260800190565b6001600160a01b038116610bb65760405163d551823d60e01b815260040160405180910390fd5b8060000361209c57505050565b6120a582612068565b6000836001600160a01b031663bd02d0f56040516020016120f7906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161212b91815260200190565b602060405180830381865afa158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c9190614abb565b90506000806000806000868887f190508015612189575050505050565b612194858585612369565b5050505050565b6000846001600160a01b031663bd02d0f56040516020016121e19060208082526011908201527026a0ac2faaa4afa322a2afa320a1aa27a960791b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161221591815260200190565b602060405180830381865afa158015612232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122569190614abb565b90508082111561227d578181604051638146813960e01b8152600401610627929190614a50565b846001600160a01b031663e2a4853a61229585612d2c565b846040518363ffffffff1660e01b81526004016122b3929190614a50565b6020604051808303816000875af11580156122d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f69190614abb565b506040516311bfdfd160e21b815273b93e9c9436e1591e745fc17ea949515dd2a5e517906346ff7f449061233290879087908790600401615cfb565b60006040518083038186803b15801561234a57600080fd5b505af415801561235e573d6000803e3d6000fd5b505050505050505050565b8060000361237657505050565b61237f82612068565b600061238a84612d5f565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123c757600080fd5b505af11580156123db573d6000803e3d6000fd5b5050505050611a4084828585612e0c565b6000806123f883613042565b91509150801561241c578160405162461bcd60e51b81526004016106279190615d1f565b611838836130d2565b6000604051602001611f859060208082526023908201527f434c41494d5f46554e44494e475f464545535f464541545552455f444953414260408201526213115160ea1b606082015260800190565b6000806124828686866130db565b60405163bd02d0f560e01b8152600481018290529091506000906001600160a01b038a169063bd02d0f590602401602060405180830381865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f19190614abb565b604051637152429d60e11b81529091506001600160a01b038a169063e2a4853a90612523908590600090600401614a50565b6020604051808303816000875af1158015612542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125669190614abb565b506000896001600160a01b031663e98aabc16125828a8a61314c565b846040518363ffffffff1660e01b81526004016125a0929190614a50565b6020604051808303816000875af11580156125bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e39190614abb565b60405163078d3b7960e01b81529091506001600160a01b0389169063078d3b7990612616908a9089908790600401615cfb565b600060405180830381600087803b15801561263057600080fd5b505af1158015612644573d6000803e3d6000fd5b505050506126528a8961319a565b604051634ee4c83160e01b81526001600160a01b03808b166004830152808a166024830152808916604483015280881660648301528616608482015260a4810183905260c4810182905273b93e9c9436e1591e745fc17ea949515dd2a5e51790634ee4c8319060e40160006040518083038186803b1580156126d357600080fd5b505af41580156126e7573d6000803e3d6000fd5b50939c9b505050505050505050505050565b6000604051602001611f859060208082526021908201527f434c41494d5f434f4c4c41544552414c5f464541545552455f44495341424c456040820152601160fa1b606082015260800190565b600080886001600160a01b031663bd02d0f5612764898989896131b2565b6040518263ffffffff1660e01b815260040161278291815260200190565b602060405180830381865afa15801561279f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c39190614abb565b90506000808a6001600160a01b031663bd02d0f56127e28b8b8b61322a565b6040518263ffffffff1660e01b815260040161280091815260200190565b602060405180830381865afa15801561281d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128419190614abb565b905060008b6001600160a01b031663bd02d0f56128608c8c8c8c61327f565b6040518263ffffffff1660e01b815260040161287e91815260200190565b602060405180830381865afa15801561289b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bf9190614abb565b90508082116128ce57806128d0565b815b9250505068327cb2734119d3b7a9601e1b81111561290457604051636c2738d360e01b815260048101829052602401610627565b60008a6001600160a01b031663bd02d0f56129218b8b8b8b613290565b6040518263ffffffff1660e01b815260040161293f91815260200190565b602060405180830381865afa15801561295c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129809190614abb565b9050600061298e84846132cf565b90508181116129b4578082604051631d8db13960e31b8152600401610627929190614a50565b60006129c08383615d32565b90508c6001600160a01b031663e2a4853a6129dd8d8d8d8d613290565b846040518363ffffffff1660e01b81526004016129fb929190614a50565b6020604051808303816000875af1158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e9190614abb565b5060008d6001600160a01b031663e98aabc1612a5a8e8e6132e8565b846040518363ffffffff1660e01b8152600401612a78929190614a50565b6020604051808303816000875af1158015612a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abb9190614abb565b60405163078d3b7960e01b81529091506001600160a01b038d169063078d3b7990612aee908e908c908790600401615cfb565b600060405180830381600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b50505050612b2a8e8d61319a565b6040516359e8c46f60e11b81526001600160a01b03808f166004830152808e166024830152808d166044830152606482018c9052808b166084830152891660a482015260c4810183905260e4810182905273b93e9c9436e1591e745fc17ea949515dd2a5e5179063b3d188de906101040160006040518083038186803b158015612bb357600080fd5b505af4158015612bc7573d6000803e3d6000fd5b509398505050505050505050979650505050505050565b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e99190615d45565b6000816001600160a01b031663bd02d0f5604051602001612c84906020808252600590820152644e4f4e434560d81b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612cb891815260200190565b602060405180830381865afa158015612cd5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea9190614abb565b60008282604051602001612d0e929190614c32565b60405160208183030381529060405280519060200120905092915050565b6000604051602001611f85906020808252600d908201526c2aa4afa322a2afa320a1aa27a960991b604082015260600190565b6000816001600160a01b03166321f8a721604051602001612d979060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612dcb91815260200190565b602060405180830381865afa158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea9190615d62565b8015611a4057612e1b82612068565b6000846001600160a01b031663bd02d0f5612e35866132f9565b6040518263ffffffff1660e01b8152600401612e5391815260200190565b602060405180830381865afa158015612e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e949190614abb565b905080600003612eb95783604051634fe14bfd60e11b815260040161062791906143e6565b6000612ec785858585613337565b5090508015612ed7575050611a40565b6000866001600160a01b03166321f8a721604051602001612f1b906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612f4f91815260200190565b602060405180830381865afa158015612f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f909190615d62565b90506001600160a01b038116612fb957604051633a6de2f560e21b815260040160405180910390fd5b600080612fc888848888613337565b915091508115612fdc575050505050611a40565b6000612fe782613042565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae818360405161301b929190615d7f565b60405180910390a188888860405163012f3b8f60e71b815260040161062793929190615cfb565b60606000604483511015613069575050604080516020810190915260008082529092909150565b6000613076846020015190565b90506307b9e43360e51b6001600160e01b03198216016130b557600484019350838060200190518101906130aa9190615da4565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b60006040516020016130ec90615e11565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915280851660608301528316608082015260a0015b6040516020818303038152906040528051906020012090509392505050565b600060405160200161315d90615e11565b60408051601f198184030181528282528051602091820120908301526001600160a01b038086169183019190915283166060820152608001612d0e565b60006131a6838361349f565b9050611838838261354c565b60006040516020016131c390615e43565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380881691830191909152808616606083015260808201859052831660a082015260c001604051602081830303815290604052805190602001209050949350505050565b600060405160200161323b90615e78565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380871691830191909152841660608201526080810183905260a00161312d565b60006040516020016131c390615e78565b60006040516020016131c39060208082526019908201527810d3105253515117d0d3d31310551154905317d05353d55395603a1b604082015260600190565b60006107e9838368327cb2734119d3b7a9601e1b61358f565b600060405160200161315d90615e43565b6000604051602001611f85906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b8686604051602401613358929190614c32565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b031686846040516133a99190615ead565b60006040518083038160008787f1925050503d80600081146133e7576040519150601f19603f3d011682016040523d82523d6000602084013e6133ec565b606091505b5091509150811561348d57805160000361344a576001600160a01b0389163b61344a5760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050613496565b6000815111801561346c57508080602001905181019061346a9190615d45565b155b1561347f57600094509250613496915050565b600194509250613496915050565b60009450925050505b94509492505050565b60408051608081018252600080825260208201819052918101829052606081019190915260405163a8d8fff560e01b81526000907352b56626ff94a23778cf914153bb3cbd3955bc1d9063a8d8fff5906134ff9087908790600401615ec9565b608060405180830381865af415801561351c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135409190615ee3565b90506107e9848261359c565b61355b82828360400151613665565b80606001516001600160a01b031681604001516001600160a01b031603613580575050565b6108b382828360600151613665565b6000611ee184848461385a565b80516001600160a01b03166135c4576040516302fde0d760e11b815260040160405180910390fd5b6000826001600160a01b0316637ae1cfca6135e28460000151613944565b6040518263ffffffff1660e01b815260040161360091815260200190565b602060405180830381865afa15801561361d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136419190615d45565b905080156118385781516040516309f8c93760e01b815261062791906004016143e6565b81516001600160a01b0316158061368357506001600160a01b038116155b156136a657815160405163e474a42560e01b815261062791908390600401615ec9565b81516040516370a0823160e01b81526000916001600160a01b038416916370a08231916136d5916004016143e6565b602060405180830381865afa1580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190614abb565b9050600061372585858561397c565b9050808210156137515783516040516333a1ea6b60e01b81526106279190859085908590600401615f4a565b600061376586866000015186600180613c9f565b905061377a8686600001518660006001613c9f565b6137849082615f73565b9050808310156137b057845160405163808c464f60e01b81526106279190869086908590600401615f4a565b6000866001600160a01b031663bd02d0f56137cf88600001518861314c565b6040518263ffffffff1660e01b81526004016137ed91815260200190565b602060405180830381865afa15801561380a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382e9190614abb565b905080841015611bee578551604051639dd026db60e01b81526106279190879087908590600401615f4a565b60008080600019858709858702925082811083820303915050806000036138945783828161388a5761388a615f86565b04925050506107e9565b8084116138db5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610627565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000604051602001611f85906020808252601290820152711254d7d3505492d15517d11254d05093115160721b604082015260600190565b60006139b76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b031663bd02d0f56139d4866000015186613d2f565b6040518263ffffffff1660e01b81526004016139f291815260200190565b602060405180830381865afa158015613a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a339190614abb565b81528351613a4390869085613d60565b602082015283516001600160a01b0386169063bd02d0f590613a6590866132e8565b6040518263ffffffff1660e01b8152600401613a8391815260200190565b602060405180830381865afa158015613aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac49190614abb565b604082015283516001600160a01b0386169063bd02d0f590613ae69086613dda565b6040518263ffffffff1660e01b8152600401613b0491815260200190565b602060405180830381865afa158015613b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b459190614abb565b606082015283516001600160a01b0386169063bd02d0f590613b679086613e14565b6040518263ffffffff1660e01b8152600401613b8591815260200190565b602060405180830381865afa158015613ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc69190614abb565b608082015283516001600160a01b0386169063bd02d0f590613be89086613e51565b6040518263ffffffff1660e01b8152600401613c0691815260200190565b602060405180830381865afa158015613c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c479190614abb565b60a0820181905260808201516060830151604084015160208501518551613c6e9190615f73565b613c789190615f73565b613c829190615f73565b613c8c9190615f73565b613c969190615f73565b95945050505050565b600081866001600160a01b031663bd02d0f5613cbc888888613e87565b6040518263ffffffff1660e01b8152600401613cda91815260200190565b602060405180830381865afa158015613cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1b9190614abb565b613d259190615f9c565b9695505050505050565b600060405160200161315d906020808252600b908201526a1413d3d317d05353d5539560aa1b604082015260600190565b6000836001600160a01b031663bd02d0f5613d7b8585613f00565b6040518263ffffffff1660e01b8152600401613d9991815260200190565b602060405180830381865afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee19190614abb565b600060405160200161315d9060208082526014908201527310d31052535050931157d1915157d05353d5539560621b604082015260600190565b600060405160200161315d9060208082526017908201527610d31052535050931157d55257d1915157d05353d55395604a1b604082015260600190565b600060405160200161315d9060208082526010908201526f10519192531250551157d49155d0549160821b604082015260600190565b6000604051602001613ebb906020808252600e908201526d434f4c4c41544552414c5f53554d60901b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915284166060820152821515608082015260a00161312d565b600060405160200161315d9060208082526017908201527614d5d05417d253541050d517d413d3d317d05353d55395604a1b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613f7557613f75613f3d565b60405290565b604080519081016001600160401b0381118282101715613f7557613f75613f3d565b60405160c081016001600160401b0381118282101715613f7557613f75613f3d565b604051606081016001600160401b0381118282101715613f7557613f75613f3d565b60405161012081016001600160401b0381118282101715613f7557613f75613f3d565b60405160e081016001600160401b0381118282101715613f7557613f75613f3d565b60405161016081016001600160401b0381118282101715613f7557613f75613f3d565b60405161010081016001600160401b0381118282101715613f7557613f75613f3d565b604051601f8201601f191681016001600160401b038111828210171561409457614094613f3d565b604052919050565b60006001600160401b038211156140b5576140b5613f3d565b5060051b60200190565b6001600160a01b0381168114610bb657600080fd5b8035610f36816140bf565b600082601f8301126140f057600080fd5b813560206141056141008361409c565b61406c565b82815260059290921b8401810191818101908684111561412457600080fd5b8286015b8481101561414857803561413b816140bf565b8352918301918301614128565b509695505050505050565b60008060006060848603121561416857600080fd5b83356001600160401b038082111561417f57600080fd5b61418b878388016140df565b945060208601359150808211156141a157600080fd5b506141ae868287016140df565b92505060408401356141bf816140bf565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015614202578351835292840192918401916001016141e6565b50909695505050505050565b60006080828403121561422057600080fd5b614228613f53565b905081356001600160401b038082111561424157600080fd5b61424d858386016140df565b835260209150818401358181111561426457600080fd5b84019050601f8101851361427757600080fd5b80356142856141008261409c565b81815260069190911b820183019083810190878311156142a457600080fd5b928401925b828410156142e757604084890312156142c25760008081fd5b6142ca613f7b565b8435815285850135868201528252604090930192908401906142a9565b80858701525050505050604082013560408201526060820135606082015292915050565b803560068110610f3657600080fd5b6000806040838503121561432d57600080fd5b82356001600160401b0381111561434357600080fd5b61434f8582860161420e565b92505061435e6020840161430b565b90509250929050565b6000806040838503121561437a57600080fd5b8235614385816140bf565b91506020830135614395816140bf565b809150509250929050565b600080604083850312156143b357600080fd5b8235915060208301356001600160401b038111156143d057600080fd5b6143dc8582860161420e565b9150509250929050565b6001600160a01b0391909116815260200190565b60006020828403121561440c57600080fd5b5035919050565b6000806040838503121561442657600080fd5b8235614431816140bf565b946020939093013593505050565b60006020828403121561445157600080fd5b81356001600160401b0381111561446757600080fd5b820161018081850312156107e957600080fd5b60006020828403121561448c57600080fd5b81356001600160401b038111156144a257600080fd5b82016101e081850312156107e957600080fd5b6000602082840312156144c757600080fd5b81356001600160401b038111156144dd57600080fd5b611ee18482850161420e565b600061016082840312156144fc57600080fd5b50919050565b6000806040838503121561451557600080fd5b82356001600160401b038082111561452c57600080fd5b614538868387016144e9565b9350602085013591508082111561454e57600080fd5b5083016060818603121561439557600080fd5b6000806020838503121561457457600080fd5b82356001600160401b038082111561458b57600080fd5b818501915085601f83011261459f57600080fd5b8135818111156145ae57600080fd5b8660208260051b85010111156145c357600080fd5b60209290920196919550909350505050565b60005b838110156145f05781810151838201526020016145d8565b50506000910152565b600081518084526146118160208601602086016145d5565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561466d57828403895261465b8483516145f9565b98850198935090840190600101614643565b5091979650505050505050565b6020815260006107e96020830184614625565b60006020828403121561469f57600080fd5b81356001600160401b038111156146b557600080fd5b611ee1848285016144e9565b600061010082840312156144fc57600080fd5b6000806000606084860312156146e957600080fd5b8335925060208401356001600160401b0381111561470657600080fd5b6147128682870161420e565b9250506147216040850161430b565b90509250925092565b60006001600160401b0382111561474357614743613f3d565b50601f01601f191660200190565b6000806000806080858703121561476757600080fd5b84356001600160401b038082111561477e57600080fd5b61478a888389016140df565b95506020915081870135818111156147a157600080fd5b8701601f810189136147b257600080fd5b80356147c06141008261409c565b81815260059190911b8201840190848101908b8311156147df57600080fd5b8584015b83811015614853578035868111156147fa57600080fd5b8501603f81018e1361480b57600080fd5b8781013561481b6141008261472a565b8181528f60408385010111156148315760008081fd5b81604084018b83013760009181018a01919091528452509186019186016147e3565b509750505050604087013591508082111561486d57600080fd5b614879888389016140df565b9350606087013591508082111561488f57600080fd5b5061489c878288016140df565b91505092959194509250565b8015158114610bb657600080fd5b8035610f36816148a8565b600080600080600080600060e0888a0312156148dc57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614911816148a8565b8091505092959891949750929550565b60008060006060848603121561493657600080fd5b8335614941816140bf565b92506020840135614951816140bf565b929592945050506040919091013590565b6000806000806080858703121561497857600080fd5b84356001600160401b038082111561498f57600080fd5b61499b888389016140df565b95506020915081870135818111156149b257600080fd5b6149be89828a016140df565b9550506040870135818111156149d357600080fd5b87019050601f810188136149e657600080fd5b80356149f46141008261409c565b81815260059190911b8201830190838101908a831115614a1357600080fd5b928401925b82841015614a3157833582529284019290840190614a18565b8096505050505050614a45606086016140d4565b905092959194509250565b918252602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03169052565b6001600160a01b0396871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260c00190565b600060208284031215614acd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201614afc57614afc614ad4565b5060010190565b600081518084526020808501945080840160005b83811015614b3c5781516001600160a01b031687529582019590820190600101614b17565b509495945050505050565b6000815160808452614b5c6080850182614b03565b60208481015186830387830152805180845290820193509091600091908301905b80831015614ba857845180518352840151848301529383019360019290920191604090910190614b7d565b5060408601516040880152606086015160608801528094505050505092915050565b634e487b7160e01b600052602160045260246000fd5b838152606060208201526000614bf96060830185614b47565b905060068310614c0b57614c0b614bca565b826040830152949350505050565b828152604060208201526000611ee16040830184614b47565b6001600160a01b03929092168252602082015260400190565b8051610f36816140bf565b600082601f830112614c6757600080fd5b81516020614c776141008361409c565b82815260059290921b84018101918181019086841115614c9657600080fd5b8286015b84811015614148578051614cad816140bf565b8352918301918301614c9a565b600060c08284031215614ccc57600080fd5b614cd4613f9d565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015292915050565b600060208284031215614d2457600080fd5b604051602081016001600160401b0381118282101715614d4657614d46613f3d565b80604052508091508251614d59816148a8565b905292915050565b600060208284031215614d7357600080fd5b81516001600160401b0380821115614d8a57600080fd5b8184019150610100808387031215614da157600080fd5b614da9613fbf565b835183811115614db857600080fd5b84016101208189031215614dcb57600080fd5b614dd3613fe1565b614ddc82614c4b565b8152614dea60208301614c4b565b6020820152614dfb60408301614c4b565b6040820152614e0c60608301614c4b565b6060820152614e1d60808301614c4b565b6080820152614e2e60a08301614c4b565b60a0820152614e3f60c08301614c4b565b60c082015260e082015185811115614e5657600080fd5b614e628a828501614c56565b60e0830152508382015185811115614e7957600080fd5b614e858a828501614c56565b8286015250825250614e9a8760208601614cba565b6020820152614eac8760e08601614d12565b60408201529695505050505050565b6000808335601e19843603018112614ed257600080fd5b83016020810192503590506001600160401b03811115614ef157600080fd5b8060051b3603821315614f0357600080fd5b9250929050565b8183526000602080850194508260005b85811015614b3c578135614f2d816140bf565b6001600160a01b031687529582019590820190600101614f1a565b6001600160a01b0383168152604060208201819052614f71908201614f6c846140d4565b614a74565b6000614f7f602084016140d4565b614f8c6060840182614a74565b50614f99604084016140d4565b614fa66080840182614a74565b50614fb3606084016140d4565b614fc060a0840182614a74565b50614fcd608084016140d4565b614fda60c0840182614a74565b50614fe760a084016140d4565b614ff460e0840182614a74565b5061500260c0840184614ebb565b610180610100818187015261501c6101c087018486614f0a565b935061502b60e0880188614ebb565b9350610120603f198887030181890152615046868684614f0a565b955061014094508289013585890152615060818a016148b6565b925050506101606150748188018315159052565b928701359186019190915250909301356101a09092019190915250919050565b600081356150a1816140bf565b6001600160a01b0390811684526020830135906150bd826140bf565b90811660208501526040830135906150d4826140bf565b90811660408501526060830135906150eb826140bf565b9081166060850152608083013590615102826140bf565b16608084015261511460a083016140d4565b61512160a0850182614a74565b5061512f60c0830183614ebb565b60e060c0860152613c9660e086018284614f0a565b60098110610bb657600080fd5b8035610f3681615144565b6009811061516c5761516c614bca565b9052565b60038110610bb657600080fd5b8035610f3681615170565b6003811061516c5761516c614bca565b6001600160a01b038416815260606020820152600083353685900360de190181126151c257600080fd5b6101e08060608501526151db6102408501878401615094565b91506152366080850160208801803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e08301525050565b6152436101208701615151565b6101806152528187018361515c565b61525f610140890161517d565b91506101a061527081880184615188565b61527d6101608a016148b6565b92506101c061528f8189018515159052565b61529a838b016148b6565b8015158987015293506152ae828b016148b6565b15156102008901528901356102208801525050505083151560408401529050611ee1565b60006101606152e484614f6c856140d4565b6152f0602084016140d4565b6152fd6020860182614a74565b5061530a604084016140d4565b6153176040860182614a74565b50615324606084016140d4565b6153316060860182614a74565b5061533f6080840184614ebb565b8260808701526153528387018284614f0a565b9250505061536360a0840184614ebb565b85830360a0870152615376838284614f0a565b9250505060c083013560c085015260e083013560e085015261010061539c8185016148b6565b15159085015261012083810135908501526101409283013592909301919091525090565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526060602080830182905260009161540e908401866152d2565b83810360408501526154208586614ebb565b60608352615432606084018284614f0a565b91505061544183870187614ebb565b83830385850152615453838284614f0a565b925050506154646040870187614ebb565b83830360408501528293508083528483019350848160051b8401018260005b838110156154f257858303601f19018752813536869003601e190181126154a957600080fd5b850188810190356001600160401b038111156154c457600080fd5b8036038213156154d357600080fd5b6154de8582846153c0565b988a01989450505090870190600101615483565b50909b9a5050505050505050505050565b60006020828403121561551557600080fd5b81516001600160401b038082111561552c57600080fd5b90830190610100828603121561554157600080fd5b615549613fbf565b82518281111561555857600080fd5b830160e0818803121561556a57600080fd5b615572614004565b61557b82614c4b565b815261558960208301614c4b565b602082015261559a60408301614c4b565b60408201526155ab60608301614c4b565b60608201526155bc60808301614c4b565b608082015260a0820151848111156155d357600080fd5b6155df89828501614c56565b60a08301525060c0820151848111156155f757600080fd5b61560389828501614c56565b60c0830152508252506156198660208501614cba565b602082015261562b8660e08501614d12565b604082015295945050505050565b8051610f3681615144565b8051610f3681615170565b6000610160828403121561566257600080fd5b61566a614026565b905061567582615639565b815261568360208301615644565b602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012080830151818301525061014080830151818301525092915050565b60006080828403121561570057600080fd5b615708613f53565b90508151615715816148a8565b81526020820151615725816148a8565b60208201526040820151615738816148a8565b6040820152606082015161574b816148a8565b606082015292915050565b60006020828403121561576857600080fd5b81516001600160401b038082111561577f57600080fd5b90830190610200828603121561579457600080fd5b61579c613fbf565b8251828111156157ab57600080fd5b830161010081880312156157be57600080fd5b6157c6614049565b6157cf82614c4b565b81526157dd60208301614c4b565b60208201526157ee60408301614c4b565b60408201526157ff60608301614c4b565b606082015261581060808301614c4b565b608082015261582160a08301614c4b565b60a082015261583260c08301614c4b565b60c082015260e08201518481111561584957600080fd5b61585589828501614c56565b60e08301525082525061586b866020850161564f565b602082015261562b8661018085016156ee565b600060a0828403121561589057600080fd5b60405160a081016001600160401b03811182821017156158b2576158b2613f3d565b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015160808201525092915050565b600081830361016081121561590157600080fd5b615909613f7b565b60c082121561591757600080fd5b61591f613f9d565b9150835161592c816140bf565b8252602084015161593c816140bf565b6020830152604084015161594f816140bf565b60408301526060840151615962816140bf565b60608301526080840151615975816140bf565b608083015260a0840151615988816140bf565b60a083015281815261599d8560c0860161587e565b6020820152949350505050565b6000808335601e198436030181126159c157600080fd5b8301803591506001600160401b038211156159db57600080fd5b602001915036819003821315614f0357600080fd5b8183823760009101908152919050565b6001600160a01b0383168152604060208201819052600090611ee1908301846152d2565b6001600160a01b0383811682526101208201908335615a42816140bf565b8181166020850152506020840135615a59816140bf565b81811660408501525050615a6f604084016140d4565b615a7c6060840182614a74565b50615a89606084016140d4565b615a966080840182614a74565b50615aa3608084016140d4565b615ab060a0840182614a74565b5060a083013560c083015260c083013560e083015260e08301356101008301529392505050565b608081526000615aea6080830187614b03565b8281036020840152615afc8187614625565b90508281036040840152615b108186614b03565b90508281036060840152615b248185614b03565b979650505050505050565b615b3a82825161515c565b6020810151615b4c6020840182615188565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152505050565b60006101208b83528a60208401528960408401528860608401528760808401528660a084015285151560c08401528060e084015284516102008285015260018060a01b039150818151166103208501528160208201511661034085015260408101519150615c23610360850183614a74565b60608101519150615c38610380850183614a74565b60808101519150615c4d6103a0850183614a74565b60a08101519150615c626103c0850183614a74565b60c08101519150615c776103e0850183614a74565b60e081015191505061010080610400850152615c97610420850183614b03565b91506020860151615cac610140860182615b2f565b50604095860151805115156102a0860152602081015115156102c08601529586015115156102e08501526060909501511515610300840152921515939091019290925298975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020815260006107e960208301846145f9565b818103818111156116ea576116ea614ad4565b600060208284031215615d5757600080fd5b81516107e9816148a8565b600060208284031215615d7457600080fd5b81516107e9816140bf565b604081526000615d9260408301856145f9565b8281036020840152613c9681856145f9565b600060208284031215615db657600080fd5b81516001600160401b03811115615dcc57600080fd5b8201601f81018413615ddd57600080fd5b8051615deb6141008261472a565b818152856020838501011115615e0057600080fd5b613c968260208301602086016145d5565b60208082526018908201527710d31052535050931157d1955391125391d7d05353d5539560421b604082015260600190565b6020808252601b908201527a10d31052535050931157d0d3d31310551154905317d05353d55395602a1b604082015260600190565b6020808252601b908201527a21a620a4a6a0a12622afa1a7a62620aa22a920a62fa320a1aa27a960291b604082015260600190565b60008251615ebf8184602087016145d5565b9190910192915050565b6001600160a01b0392831681529116602082015260400190565b600060808284031215615ef557600080fd5b615efd613f53565b8251615f08816140bf565b81526020830151615f18816140bf565b60208201526040830151615f2b816140bf565b60408201526060830151615f3e816140bf565b60608201529392505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b808201808211156116ea576116ea614ad4565b634e487b7160e01b600052601260045260246000fd5b600082615fb957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220cbd87b22cd7923ee34d81e4999ad007cd10b818bdc66b54a7b67ea4ad255103864736f6c634300081200330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb000000000000000000000000fe2df84627950a0fb98ead49c69a1de3f66867d6000000000000000000000000edb5cd878871f074371e816ac67cbe010c31f00b00000000000000000000000048787f7847068f9cc1398e5f589bef9744730c8d000000000000000000000000fc9bc118fddb89ff6ff720840446d73478de4153000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5