@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
1,413 lines • 164 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "OrderBook",
"sourceName": "contracts/OrderBook.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AlreadyInitialized",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientLiquidity",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSpread",
"type": "error"
},
{
"inputs": [],
"name": "LengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "MarketFeeError",
"type": "error"
},
{
"inputs": [],
"name": "MarketStateError",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetInsufficient",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetNotRequired",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetTransferFail",
"type": "error"
},
{
"inputs": [],
"name": "NewOwnerIsZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "NoHandoverRequest",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "OnlyOwnerAllowedError",
"type": "error"
},
{
"inputs": [],
"name": "OnlyVaultAllowed",
"type": "error"
},
{
"inputs": [],
"name": "OrderAlreadyFilledOrCancelled",
"type": "error"
},
{
"inputs": [],
"name": "PostOnlyError",
"type": "error"
},
{
"inputs": [],
"name": "PriceError",
"type": "error"
},
{
"inputs": [],
"name": "ProvisionError",
"type": "error"
},
{
"inputs": [],
"name": "SizeError",
"type": "error"
},
{
"inputs": [],
"name": "SlippageExceeded",
"type": "error"
},
{
"inputs": [],
"name": "TickSizeError",
"type": "error"
},
{
"inputs": [],
"name": "TooMuchSizeFilled",
"type": "error"
},
{
"inputs": [],
"name": "Unauthorized",
"type": "error"
},
{
"inputs": [],
"name": "UnauthorizedCallContext",
"type": "error"
},
{
"inputs": [],
"name": "UpgradeFailed",
"type": "error"
},
{
"inputs": [],
"name": "WrongOrderTypeCancel",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40",
"name": "orderId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "uint40",
"name": "flippedId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint32",
"name": "price",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "flippedPrice",
"type": "uint32"
},
{
"indexed": false,
"internalType": "bool",
"name": "isBuy",
"type": "bool"
}
],
"name": "FlipOrderCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40",
"name": "orderId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "uint96",
"name": "size",
"type": "uint96"
}
],
"name": "FlipOrderUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40[]",
"name": "orderIds",
"type": "uint40[]"
},
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "FlipOrdersCanceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40",
"name": "orderId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "uint40",
"name": "flippedId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint32",
"name": "price",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "flippedPrice",
"type": "uint32"
},
{
"indexed": false,
"internalType": "bool",
"name": "isBuy",
"type": "bool"
}
],
"name": "FlippedOrderCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40",
"name": "orderId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint32",
"name": "price",
"type": "uint32"
},
{
"indexed": false,
"internalType": "bool",
"name": "isBuy",
"type": "bool"
}
],
"name": "OrderCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40[]",
"name": "orderId",
"type": "uint40[]"
},
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OrdersCanceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "OwnershipHandoverCanceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "OwnershipHandoverRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint40",
"name": "orderId",
"type": "uint40"
},
{
"indexed": false,
"internalType": "address",
"name": "makerAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isBuy",
"type": "bool"
},
{
"indexed": false,
"internalType": "uint256",
"name": "price",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint96",
"name": "updatedSize",
"type": "uint96"
},
{
"indexed": false,
"internalType": "address",
"name": "takerAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "txOrigin",
"type": "address"
},
{
"indexed": false,
"internalType": "uint96",
"name": "filledSize",
"type": "uint96"
}
],
"name": "Trade",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_price",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"internalType": "bool",
"name": "_postOnly",
"type": "bool"
}
],
"name": "addBuyOrder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_price",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_flippedPrice",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_size",
"type": "uint96"
},
{
"internalType": "bool",
"name": "_provisionOrRevert",
"type": "bool"
}
],
"name": "addFlipBuyOrder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_price",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_flippedPrice",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_size",
"type": "uint96"
},
{
"internalType": "bool",
"name": "_provisionOrRevert",
"type": "bool"
}
],
"name": "addFlipSellOrder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_bidPrice",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_askPrice",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_bidSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "_askSize",
"type": "uint96"
}
],
"name": "addPairedLiquidity",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_price",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"internalType": "bool",
"name": "_postOnly",
"type": "bool"
}
],
"name": "addSellOrder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "bidPrices",
"type": "uint32[]"
},
{
"internalType": "uint32[]",
"name": "askPrices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "bidSizes",
"type": "uint96[]"
},
{
"internalType": "uint96[]",
"name": "askSizes",
"type": "uint96[]"
}
],
"name": "batchAddPairedLiquidity",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint40[]",
"name": "_orderIds",
"type": "uint40[]"
}
],
"name": "batchCancelFlipOrders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint40[]",
"name": "_orderIds",
"type": "uint40[]"
}
],
"name": "batchCancelOrders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "prices",
"type": "uint32[]"
},
{
"internalType": "uint32[]",
"name": "flipPrices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "sizes",
"type": "uint96[]"
},
{
"internalType": "bool[]",
"name": "isBuy",
"type": "bool[]"
},
{
"internalType": "bool",
"name": "_provisionOrRevert",
"type": "bool"
}
],
"name": "batchProvisionLiquidity",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "buyPrices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "buySizes",
"type": "uint96[]"
},
{
"internalType": "uint32[]",
"name": "sellPrices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "sellSizes",
"type": "uint96[]"
},
{
"internalType": "uint40[]",
"name": "orderIdsToCancel",
"type": "uint40[]"
},
{
"internalType": "bool",
"name": "postOnly",
"type": "bool"
}
],
"name": "batchUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "bestBidAsk",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "cancelOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "collectFees",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "completeOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getL2Book",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getMarketParams",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVaultParams",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "enum IOrderBook.OrderBookType",
"name": "_type",
"type": "uint8"
},
{
"internalType": "address",
"name": "_baseAssetAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_baseAssetDecimals",
"type": "uint256"
},
{
"internalType": "address",
"name": "_quoteAssetAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quoteAssetDecimals",
"type": "uint256"
},
{
"internalType": "address",
"name": "_marginAccountAddress",
"type": "address"
},
{
"internalType": "uint96",
"name": "_sizePrecision",
"type": "uint96"
},
{
"internalType": "uint32",
"name": "_pricePrecision",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_tickSize",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_minSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "_maxSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_takerFeeBps",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_makerFeeBps",
"type": "uint256"
},
{
"internalType": "address",
"name": "_kuruAmmVault",
"type": "address"
},
{
"internalType": "uint96",
"name": "_kuruAmmSpread",
"type": "uint96"
},
{
"internalType": "address",
"name": "__trustedForwarder",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "forwarder",
"type": "address"
}
],
"name": "isTrustedForwarder",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "result",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "ownershipHandoverExpiresAt",
"outputs": [
{
"internalType": "uint256",
"name": "result",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint96",
"name": "_quoteSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_minAmountOut",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_isMargin",
"type": "bool"
},
{
"internalType": "bool",
"name": "_isFillOrKill",
"type": "bool"
}
],
"name": "placeAndExecuteMarketBuy",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint96",
"name": "_size",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_minAmountOut",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_isMargin",
"type": "bool"
},
{
"internalType": "bool",
"name": "_isFillOrKill",
"type": "bool"
}
],
"name": "placeAndExecuteMarketSell",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "_prices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "_sizes",
"type": "uint96[]"
},
{
"internalType": "bool",
"name": "_postOnly",
"type": "bool"
}
],
"name": "placeMultipleBuyOrders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "_prices",
"type": "uint32[]"
},
{
"internalType": "uint96[]",
"name": "_sizes",
"type": "uint96[]"
},
{
"internalType": "bool",
"name": "_postOnly",
"type": "bool"
}
],
"name": "placeMultipleSellOrders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "requestOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "s_buyPricePoints",
"outputs": [
{
"internalType": "uint40",
"name": "head",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "tail",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "s_buyTree",
"outputs": [
{
"internalType": "bytes32",
"name": "level0",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "s_orderIdCounter",
"outputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"name": "s_orders",
"outputs": [
{
"internalType": "address",
"name": "ownerAddress",
"type": "address"
},
{
"internalType": "uint96",
"name": "size",
"type": "uint96"
},
{
"internalType": "uint40",
"name": "prev",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "next",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "flippedId",
"type": "uint40"
},
{
"internalType": "uint32",
"name": "price",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "flippedPrice",
"type": "uint32"
},
{
"internalType": "bool",
"name": "isBuy",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "s_sellPricePoints",
"outputs": [
{
"internalType": "uint40",
"name": "head",
"type": "uint40"
},
{
"internalType": "uint40",
"name": "tail",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "s_sellTree",
"outputs": [
{
"internalType": "bytes32",
"name": "level0",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_state",
"type": "bool"
}
],
"name": "toggleMarkets",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint96",
"name": "_vaultAskOrderSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "_vaultBidOrderSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_askPrice",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_bidPrice",
"type": "uint256"
}
],
"name": "updateVaultOrdSz",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "vaultAskOrderSize",
"outputs": [
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "vaultBestAsk",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a080604052346099573060805263409feecd195460018116608c5760011c6002600160401b0319016048575b61776d908161009e82396080518181816111a9015261126b0152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a1602c565b63f92ee8a95f526004601cfd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816302b90c6514611e0e575080630e2e2ffe14611dbb5780631c0d9c2214611d1257806323afbff314611c905780632569296214611c475780632819fc0d146119505780632bf1360e1461192c5780632e2822b71461160157806340e79b1b146115c157806346fdfbb1146113c5578063474b848c146113a85780634792b6ea146113835780634d781103146113305780634f1ef2861461121757806351130ac6146111f157806352d1902d14611196578063532c46db146111705780635339c59f14610f5757806354d1f13d14610f13578063572b6c0514610ede5780636d1016b014610eb9578063715018a614610e7f5780637c51d6cf14610e5157806388bb4f6014610db65780638da5cb5b14610d8a57806390c9427c14610cea5780639ea5925814610c7f578063a09e904014610c3f578063a9914abd14610bc5578063b4de8b7014610b94578063ba42d8bd14610968578063badc92d11461094b578063c827fdcc146105da578063c87965721461052b578063cca97a3c14610397578063e55bb4e3146102eb578063e6d29b5114610294578063f04e283e14610247578063f2fde38b1461020a5763fee81cf4146101d4575f80fd5b34610206576020366003190112610206576101ed611f2e565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b60203660031901126102065761021e611f2e565b610226614b47565b8060601b1561023a5761023890614c21565b005b637448fbae5f526004601cfd5b60203660031901126102065761025b611f2e565b610263614b47565b63389a75e1600c52805f526020600c209081544211610287575f6102389255614c21565b636f5e88185f526004601cfd5b34610206576020366003190112610206576004355f5260086020526102e760405f2054604051918164ffffffffff80859460281c1691168390929164ffffffffff60209181604085019616845216910152565b0390f35b34610206576080366003190112610206576004356001600160601b03811680910361020657610318611e6b565b5f546001600160a01b0316330361038857600454906001600160601b0360601b9060601b16906001600160601b0360601b1916176004556001600160601b031960055416176005555f196003541461037d575b6001541561037557005b606435600155005b60443560035561036b565b631628c08760e31b5f5260045ffd5b346102065760a0366003190112610206576004356001600160401b038111610206576103c7903690600401611e28565b6024356001600160401b038111610206576103e6903690600401611e28565b6044356001600160401b03811161020657610405903690600401611e28565b6064959195356001600160401b03811161020657610427903690600401611e28565b9390956084359485151586036102065760ff60125460281c166104de578282036102065780840361020657838203610206575f5b82811061046457005b61046f81838b611fe1565b35908115158203610206578a818787878b8e975f146104ec576104a68580946104ab6104a66104bc996104b799976104b197611fe1565b612070565b9a611fe1565b94611fe1565b612081565b9260ff60125460281c166104de576001936104d8928b926124e8565b0161045b565b6225b2dd60e11b5f5260045ffd5b6104a68580946104ab6104a661050a996104b799976104b197611fe1565b9260ff60125460281c166104de57600193610526928b92612bdc565b6104d8565b34610206575f36600319011261020657601c54601754601b54601854601a546040516324facdb160e11b81526001600160a01b03948516600482015260248101939093529083166044830152606482015291602091839160849183915f91165af180156105cf576105a2575b5f601b819055601a55005b6105c39060203d6020116105c8575b6105bb8183612406565b810190612891565b610597565b503d6105b1565b6040513d5f823e3d90fd5b3461020657610220366003190112610206576105f4611f2e565b6024356003811015610206576044356001600160a01b03811690819003610206576084356001600160a01b03811692908390036102065760c4356001600160a01b03811692908390036102065760e435936001600160601b038516850361020657610104359063ffffffff8216820361020657610124359463ffffffff8616860361020657610144356001600160601b03811680910361020657610164356001600160601b03811681036102065761018435906101a435926101c4359460018060a01b038616809603610206576101e435966001600160601b03881680980361020657610204356001600160a01b0381169c908d90036102065763409feecd199e8f80546003819255610922575b50638b78c6d81954610915576001600160a01b0316801560ff1b8117638b78c6d819555f5f805160206177188339815191528180a385611f4002611f4081048703610901576127109004871115806108f6575b156108e7576001600160601b03600a8a061615806108de575b806108d3575b156108c4578e9d600a9a6005549c60018060a01b031960175416176017556018549460643560155560a43560165560018060a01b0319601c541617601c5571ffffffffffffffffffffffff0000000000006012549163ffffffff60901b9060901b169260301b16906601000000000000600160b01b031916171760125563ffffffff60a01b9060a01b16916001600160401b0360c01b161717601855601954916001600160601b0360601b9060601b16916001600160401b0360c01b16171760195560135560145560018060a01b03195f5416175f55046001600160601b0360601b9060601b169160ff60c01b9060c01b1690600160601b600160c81b03191617176005555f1960035560018060a01b0319600654161760065561089457005b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1005b633cd146b160e01b5f5260045ffd5b506101f48910610774565b5088151561076e565b63a926954560e01b5f5260045ffd5b506127108610610755565b634e487b7160e01b5f52601160045260245ffd5b630dc149f05f526004601cfd5b909f90600181811c14303b101561093e5760ff1b1b9e5f610702565b63f92ee8a95f526004601cfd5b34610206575f366003190112610206576020600a54604051908152f35b34610206576020366003190112610206576004356001600160401b03811161020657610998903690600401611e28565b5f5b8181106109e057507f5f815e5292cf3b123df58ad6d4531c085d94d5717a3b02740369a04273fde96c916109db6109cf6134b3565b60405193849384612017565b0390a1005b6109f36109ee828486611fe1565b612005565b9064ffffffffff82165f52600760205260405f20600160405191610a16836123d6565b8054828060a01b038116845260a01c602084015201549064ffffffffff8216604082015264ffffffffff8260281c166060820152608081019164ffffffffff8160501c16835263ffffffff8160781c1660a083015260ff60c083019163ffffffff8160981c16835260b81c16151560e0830152610a9382866158d0565b610a9b6134b3565b82516001600160a01b03908116911603610b85575163ffffffff1615610b765760019364ffffffffff610ad693511680610add575b50615a06565b500161099a565b80610b6f915f52600760205260405f209060ff8860405193610afe856123d6565b8054828060a01b038116865260a01c6020860152015464ffffffffff8116604085015264ffffffffff8160281c16606085015264ffffffffff8160501c16608085015263ffffffff8160781c1660a085015263ffffffff8160981c1660c085015260b81c16151560e0830152615a06565b5087610ad0565b631765682760e31b5f5260045ffd5b63a0cdd78160e01b5f5260045ffd5b34610206575f366003190112610206576040610bae6134ee565b9050610bb86135d8565b8351928352602083015250f35b3461020657610bd336611f84565b9360ff60125460281c166104de57818403610c30575f5b848110610bf357005b610c016104a6828785611fe1565b90610c106104b7828688611fe1565b60ff60125460281c166104de5787610c2a916001946130e3565b01610bea565b631fec674760e31b5f5260045ffd5b3461020657606036600319011261020657610c58611e58565b610c60611e6b565b610c68611e81565b9060ff60125460281c166104de57610238926130e3565b3461020657610c8d36611f84565b9360ff60125460281c166104de57818403610c30575f5b848110610cad57005b610cbb6104a6828785611fe1565b90610cca6104b7828688611fe1565b60ff60125460281c166104de5787610ce49160019461211e565b01610ca4565b34610206575f3660031901126102065761016060125460018060a01b03601754166015546001600160601b0360185463ffffffff60165491601954926013549560145497866040519a868160901c168c5260301c1660208b015260408a0152606089015260018060a01b038216608089015260a088015260a01c1660c086015281811660e086015260601c16610100840152610120830152610140820152f35b34610206575f36600319011261020657638b78c6d819546040516001600160a01b039091168152602090f35b34610206575f3660031901126102065760018060a01b035f5416600154906001600160601b036002541691600354926004549160055490600a6001600160601b038360601c1602936001600160601b03851694850361090157610100966001600160601b03948593604051988952602089015260408801526060870152818116608087015260601c1660a08501521660c083015260e0820152f35b610e5a36611f44565b9060ff60129493945460281c166104de57602093610e7793612efc565b604051908152f35b5f36600319011261020657610e92614b47565b5f638b78c6d819545f805160206177188339815191528280a3600160ff1b638b78c6d81955005b3461020657610ec736611edd565b9160ff60125460281c166104de5761023893612bdc565b34610206576020366003190112610206576020610ef9611f2e565b6006546040516001600160a01b0392831691909216148152f35b5f3660031901126102065763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b346102065760c0366003190112610206576004356001600160401b03811161020657610f87903690600401611e28565b906024356001600160401b03811161020657610fa7903690600401611e28565b9290916044356001600160401b03811161020657610fc9903690600401611e28565b6064929192356001600160401b03811161020657610feb903690600401611e28565b9190926084356001600160401b0381116102065761100d903690600401611e28565b97909860a4359788151589036102065760ff60125460281c166104de57818103610c3057858503610c30578a5f5b8b80821061114f575050505f5b8181106110f4575b50505050505f5b818110611099575b5050505050508061106c57005b7f386974f41b61738b510019ccd5a3524a43eccf0d136929e09d524e87aeeca2c4916109db6109cf6134b3565b63ffffffff6110ac6104a6838589611fe1565b16156110ef576110c06104a6828488611fe1565b906110cf6104b7828688611fe1565b60ff60125460281c166104de57876110e9916001