[ { "inputs": [], "name": "tickOutOfRange", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount0Earned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Earned", "type": "uint256" } ], "name": "FeesEarned", "type": "event" }, { "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": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Snapshot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STEER_FRACTION_OF_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STRATEGIST_FRACTION_OF_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOTAL_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "accruedFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "accruedFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "algebraMintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Wanted", "type": "int256" }, { "internalType": "int256", "name": "amount1Wanted", "type": "int256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "algebraSwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "feeIdentifier", "type": "string" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "collectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Used", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Used", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" } ], "name": "emergencyBurn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeDetails", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "string[]", "name": "", "type": "string[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPositions", "outputs": [ { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "uint16[]", "name": "", "type": "uint16[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_vaultManager", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "_steer", "type": "address" }, { "internalType": "bytes", "name": "_params", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxTickChange", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IAlgebraPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "components": [ { "internalType": "int24[]", "name": "lowerTick", "type": "int24[]" }, { "internalType": "int24[]", "name": "upperTick", "type": "int24[]" }, { "internalType": "uint16[]", "name": "relativeWeight", "type": "uint16[]" } ], "internalType": "struct KimMultiPositionLiquidityManager.TendLiquidityPositions", "name": "newPositions", "type": "tuple" }, { "internalType": "bytes", "name": "timeSensitiveData", "type": "bytes" } ], "name": "tend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twapInterval", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff166200002f5760005460ff161562000039565b62000039620000de565b620000a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000c4576000805461ffff19166101011790555b8015620000d7576000805461ff00191690555b5062000102565b6000620000f630620000fc60201b6200252d1760201c565b15905090565b3b151590565b615df580620001126000396000f3fe608060405234801561001057600080fd5b506004361061020f5760003560e01c806301ffc9a71461021457806306fdde031461023c578063095ea7b3146102515780630dfe1681146102645780631053f8711461028457806316f0115b146102ab57806318160ddd146102be57806318178358146102d05780631c1f1936146102da5780631f2c5443146102e357806323b872dd146102fb578063246581f71461030e578063248a9ca3146103215780632c8958f6146103345780632f2ff15d1461034757806330faab2a1461035a578063313ce5671461036357806336568abe14610372578063365d0ed71461038557806339509351146103a75780633bec034a146103ba5780633c1d5df0146103e55780633dd657c5146104115780633f4ba83a146104245780635c975abb1461042c57806363db7eae1461043757806370a0823114610440578063802758601461046957806380814ffb146104805780638456cb591461048a5780638ec4daf6146104925780638f747bb8146104a557806391d14854146104b857806395d89b41146104cb578063a217fddf146104d3578063a457c2d7146104db578063a9059cbb146104ee578063abbffcb914610501578063b7ab45b614610529578063c4a7761e14610555578063d21220a71461055d578063d331bef714610570578063d547741f14610583578063dd62ed3e14610596578063ef095f8d146105cf575b600080fd5b6102276102223660046149b4565b6105d9565b60405190151581526020015b60405180910390f35b610244610656565b6040516102339190614a36565b61022761025f366004614a5e565b6106e8565b60fc54610277906001600160a01b031681565b6040516102339190614a8a565b60fe5461029890600160a01b900460020b81565b60405160029190910b8152602001610233565b60fe54610277906001600160a01b031681565b6035545b604051908152602001610233565b6102d86106fe565b005b6102c2611a0b81565b6102eb6108ac565b6040516102339493929190614ad9565b610227610309366004614b97565b610b31565b6102d861031c366004614cef565b610be2565b6102c261032f366004614d77565b611136565b6102d8610342366004614dd8565b61114b565b6102d8610355366004614e2a565b6111b3565b6102c2610d0581565b60405160128152602001610233565b6102d8610380366004614e2a565b6111d0565b610398610393366004614e5a565b61124e565b60405161023393929190614ea7565b6102276103b5366004614a5e565b6115cd565b6102c26103c8366004614edd565b805160208183018101805160ff8252928201919093012091525481565b60fe546103fc90600160b81b900463ffffffff1681565b60405163ffffffff9091168152602001610233565b6102d861041f366004614dd8565b611609565b6102d8611654565b60655460ff16610227565b6102c26105dc81565b6102c261044e366004614f11565b6001600160a01b031660009081526033602052604090205490565b610471611678565b60405161023393929190614f61565b6102c26101025481565b6102d86118a5565b6102d86104a0366004614fce565b6118c6565b6102d86104b33660046150cc565b611a83565b6102276104c6366004614e2a565b611f4b565b610244611f76565b6102c2600081565b6102276104e9366004614a5e565b611f85565b6102276104fc366004614a5e565b61201e565b61051461050f36600461521c565b61202b565b60408051928352602083019190915201610233565b6102c2610537366004614edd565b80516020818301810180516101008252928201919093012091525481565b61051461214d565b60fd54610277906001600160a01b031681565b61051461057e366004615267565b61240b565b6102d8610591366004614e2a565b612510565b6102c26105a43660046152a8565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6102c26101035481565b60fb5460405163ab8b2a7360e01b81526001600160e01b0319831660048201526000916001600160a01b03169063ab8b2a7390602401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065091906152e6565b92915050565b60606036805461066590615301565b80601f016020809104026020016040519081016040528092919081815260200182805461069190615301565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b60006106f5338484612533565b50600192915050565b600061012d805480602002602001604051908101604052809291908181526020016000905b828210156107755760008481526020908190206040805160608101825291850154600281810b845263010000008204900b83850152600160301b900461ffff1690820152825260019092019101610723565b5050825192935060009150505b8181146108a75760006107cf8483815181106107a0576107a061533c565b6020026020010151600001518584815181106107be576107be61533c565b602002602001015160200151612657565b50505050905060008111156108965760fe5484516001600160a01b0390911690633b3bc70e908690859081106108075761080761533c565b6020026020010151600001518685815181106108255761082561533c565b60200260200101516020015160006040518463ffffffff1660e01b815260040161085193929190615352565b60408051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190615387565b50505b506108a0816153c1565b9050610782565b505050565b604080516002808252606082810190935260009291829182918591816020016020820280368337505060fb5460408051638da5cb5b60e01b815290519394506001600160a01b0390911692638da5cb5b925060048083019260209291908290030181865afa158015610922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094691906153e7565b816000815181106109595761095961533c565b6001600160a01b03928316602091820292909201015260fb5460405163015a1d6760e31b8152911690630ad0eb3890610996903090600401614a8a565b602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906153e7565b816001815181106109ea576109ea61533c565b6001600160a01b03929092166020928302919091019091015260408051600280825260608201909252600091816020015b6060815260200190600190039081610a1b5790505090506040518060400160405280600a81526020016953544545525f4645455360b01b81525081600081518110610a6857610a6861533c565b60200260200101819052506040518060400160405280600f81526020016e535452415445474953545f4645455360881b81525081600181518110610aae57610aae61533c565b602090810291909101015260408051600280825260608201909252600091816020016020820280368337019050509050611a0b81600081518110610af457610af461533c565b602002602001018181525050610d0581600181518110610b1657610b1661533c565b60209081029190910101526105dc9792965090945092509050565b6000610b3e848484612701565b6001600160a01b038416600090815260346020908152604080832033845290915290205482811015610bc85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610bd58533858403612533565b60019150505b9392505050565b600054610100900460ff16610bfd5760005460ff1615610c01565b303b155b610c645760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bbf565b600054610100900460ff16158015610c86576000805461ffff19166101011790555b60008060008085806020019051810190610ca09190615404565b9350935093509350600960020b8260020b138015610cc357506107d1600283900b125b610ccc57600080fd5b601e63ffffffff8216118015610ce9575061025863ffffffff8216105b610cf257600080fd5b826001600160a01b0316846001600160a01b031610610d1057600080fd5b60fb8054336001600160a01b03199182161790915560fc805482166001600160a01b0387811691821790925560fd805490931691861691821790925560405163d9a641e160e01b81526004810192909252602482015260009073b5f00c2c5f8821155d8ed27e31932cfd9db3c5d59063d9a641e190604401602060405180830381865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc991906153e7565b90506001600160a01b038116610dde57600080fd5b60fe80546001600160a01b0319166001600160a01b0383169081179091556040805163ef01df4f60e01b815290516000929163ef01df4f9160048083019260209291908290030181865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e91906153e7565b90506001600160a01b038116610e7357600080fd5b6040805160028082526060820183526000926020830190803683370190505090508381600081518110610ea857610ea861533c565b63ffffffff90921660209283029190910190910152604051639d3a524160e01b81526001600160a01b03831690639d3a524190610ee9908490600401615461565b600060405180830381865afa158015610f06573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2e919081019061551c565b505060fb60009054906101000a90046001600160a01b03166001600160a01b031663d0fb02036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa791906153e7565b61010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000611045336001600160a01b031663381193696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906155e7565b611040906001615600565b6128bd565b905061108f8160405160200161105b9190615618565b6040516020818303038152906040528260405160200161107b9190615654565b6040516020818303038152906040526129c2565b6110976129fb565b61109f612a34565b6110b7600080516020615da08339815191528c612a73565b6110cf600080516020615d608339815191528e612a73565b505060fe805463ffffffff909416600160b81b0263ffffffff60b81b1962ffffff909616600160a01b029590951666ffffffffffffff60a01b19909416939093179390931790915550508215915061112f9050576000805461ff00191690555b5050505050565b600090815260c9602052604090206001015490565b60fe546001600160a01b0316331461116257600080fd5b60fe54600160e01b900460ff1661117857600080fd5b60fe805460ff60e01b1916905560008080861315611194578591505b60008513156111a05750835b6111ab338383612a7d565b505050505050565b6111bc82611136565b6111c68133612ab7565b6108a78383612b1b565b6001600160a01b03811633146112405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610bbf565b61124a8282612ba1565b5050565b600080600061125f60655460ff1690565b1561127c5760405162461bcd60e51b8152600401610bbf90615683565b6001600160a01b03841661128f57600080fd5b60fb546040516367a44ca360e01b81526000916001600160a01b0316906367a44ca3906112c0903090600401614a8a565b600060405180830381865afa1580156112dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113059190810190615701565b519050600181600481111561131c5761131c6157c7565b148061133957506003816004811115611337576113376157c7565b145b61134257600080fd5b61134a6106fe565b600061135560355490565b905060008061136261214d565b9150915082600014806113755750600082115b806113805750600081115b61138c5761138c6157dd565b826113b8578b95508a94506113a18686612c08565b9650620f42408710156113b357600080fd5b6114b4565b816113dc576113c88b8483612c1e565b96506113d5878285612cb4565b94506114b4565b80611400576113ec8c8484612c1e565b96506113f9878385612cb4565b95506114b4565b600061141e61140f838f6157f3565b611419858f6157f3565b612d34565b9050600081116114545760405162461bcd60e51b81526020600482015260016024820152604360f81b6044820152606401610bbf565b81611460600183615812565b61146a919061583f565b611475906001615600565b965082611483600183615812565b61148d919061583f565b611498906001615600565b9550816114a6828686612c1e565b6114b0919061583f565b9750505b600087116114c157600080fd5b898610156114f55760405162461bcd60e51b81526020600482015260016024820152600360fc1b6044820152606401610bbf565b888510156115295760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610bbf565b85156115475760fc54611547906001600160a01b0316333089612d43565b84156115655760fd54611565906001600160a01b0316333088612d43565b61156f8888612dae565b876001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68989896040516115b693929190614ea7565b60405180910390a350505050955095509592505050565b3360008181526034602090815260408083206001600160a01b038716845290915281205490916106f5918590611604908690615600565b612533565b60fe546001600160a01b0316331461162057600080fd5b60fe54600160d81b900460ff1661163657600080fd5b60fe805460ff60d81b1916905561164e338585612a7d565b50505050565b600080516020615da083398151915261166d8133612ab7565b611675612e7b565b50565b61012d5460408051606081810183528082526020820181905291810182905290918291829190816001600160401b038111156116b6576116b6614bd8565b6040519080825280602002602001820160405280156116df578160200160208202803683370190505b508152816001600160401b038111156116fa576116fa614bd8565b604051908082528060200260200182016040528015611723578160200160208202803683370190505b506020820152816001600160401b0381111561174157611741614bd8565b60405190808252806020026020018201604052801561176a578160200160208202803683370190505b50604082015260005b82811461188b5761012d818154811061178e5761178e61533c565b6000918252602090912001548251805160029290920b91839081106117b5576117b561533c565b602002602001019060020b908160020b8152505061012d81815481106117dd576117dd61533c565b9060005260206000200160000160039054906101000a900460020b8260200151828151811061180e5761180e61533c565b602002602001019060020b908160020b8152505061012d81815481106118365761183661533c565b9060005260206000200160000160069054906101000a900461ffff16826040015182815181106118685761186861533c565b61ffff90921660209283029190910190910152611884816153c1565b9050611773565b508051602082015160409092015190969195509350915050565b600080516020615da08339815191526118be8133612ab7565b611675612f08565b60655460ff16156118e95760405162461bcd60e51b8152600401610bbf90615683565b610101546001600160a01b0316331461190157600080fd5b6101015460405163f3aefd5560e01b81526000916001600160a01b03169063f3aefd55906119359030908890600401615853565b602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197691906153e7565b9050600060ff8560405161198a9190615877565b90815260200160405180910390205490506000610100866040516119ae9190615877565b9081526040519081900360200190205490508415611a21576119d08583615812565b60ff876040516119e09190615877565b908152602001604051809103902081905550846101026000828254611a059190615812565b909155505060fc54611a21906001600160a01b03168487612f60565b83156111ab57611a318482615812565b61010087604051611a429190615877565b908152602001604051809103902081905550836101036000828254611a679190615812565b909155505060fd546111ab906001600160a01b03168486612f60565b600080516020615d60833981519152611a9c8133612ab7565b60655460ff1615611abf5760405162461bcd60e51b8152600401610bbf90615683565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152612710861115611b0f57600080fd5b611b1b83850185614e2a565b6001600160a01b03908116602084015290825260fe54604080516339db007960e21b81529051919092169163e76c01e49160048083019260c09291908290030181865afa158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b949190615893565b5050505060020b606083018190526001600160a01b039091166040830152611bbb90612f90565b611bc66001806131c8565b50508451516080820181905215611d0a57611be461012d60006148de565b60005b8160800151811015611d08576000604051806060016040528088600001518481518110611c1657611c1661533c565b602002602001015160020b815260200188602001518481518110611c3c57611c3c61533c565b602002602001015160020b815260200188604001518481518110611c6257611c6261533c565b60209081029190910181015161ffff90811690925261012d805460018101825560009190915283517f193a3ae4da5049eb74cee39e4cf5827f7ce7b1d1d1775ef1c6311eb60558e6d5909101805492850151604090950151909316600160301b0261ffff60301b1962ffffff95861663010000000265ffffffffffff19909416959092169490941791909117169190911790555080611d00816153c1565b915050611be7565b505b805115611e965780516000811360e0830152600160ff1b1415611d2c57600080fd5b60fe805460ff60e01b198116600160e01b1790915560e08201516001600160a01b039091169063128acb0890309080611d6f578451611d6a9061591b565b611d72565b84515b60208601516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529215156024840152604483019190915291909116606482015260a06084820152600060a482015260c40160408051808303816000875af1158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e079190615387565b505060fe60009054906101000a90046001600160a01b03166001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e809190615893565b5050506001600160a01b03909216604084015250505b611e9e613789565b60a0820152611eab61380f565b60c08201819052604082015160a08301517f2fd4737bac0995700ade358ae308c92f20ee63884dfbe658bf55d2f99f60f07792611ee760355490565b604080516001600160a01b039095168552602085019390935291830152606082015260800160405180910390a185156111ab576111ab8160400151611f338360a0015189612710612c1e565b611f448460c001518a612710612c1e565b8451613845565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461066590615301565b3360009081526034602090815260408083206001600160a01b0386168452909152812054828110156120075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bbf565b6120143385858403612533565b5060019392505050565b60006106f5338484612701565b600080600080516020615da08339815191526120478133612ab7565b60fe54604051631d9de38760e11b81526001600160a01b0390911690633b3bc70e9061207b90899089908990600401615352565b60408051808303816000875af1158015612099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bd9190615387565b60fe546040516309e3d67b60e31b81529295509093506001600160a01b031690634f1eb3d8906121009030908a908a906001600160801b03908190600401615938565b60408051808303816000875af115801561211e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121429190615975565b505050935093915050565b600080612158613789565b915061216261380f565b9050600061012d805480602002602001604051908101604052809291908181526020016000905b828210156121db5760008481526020908190206040805160608101825291850154600281810b845263010000008204900b83850152600160301b900461ffff1690820152825260019092019101612189565b505050509050600060fe60009054906101000a90046001600160a01b03166001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015612236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225a9190615893565b505061010154604051634867e20360e11b81529495506000946001600160a01b0390911693506390cfc406925061229691503090600401614a8a565b602060405180830381865afa1580156122b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d791906155e7565b905060006122e782612710615812565b845190915060005b81811461240157600080600061232e8985815181106123105761231061533c565b6020026020010151600001518a86815181106107be576107be61533c565b6001600160801b031694506001600160801b03169450505092506000806123a18a6123758d89815181106123645761236461533c565b602002602001015160000151613d5d565b61239b8e8a8151811061238a5761238a61533c565b602002602001015160200151613d5d565b88614038565b915091506123b28489612710612c1e565b6123bc9083615600565b6123c6908e615600565b9c506123d58389612710612c1e565b6123df9082615600565b6123e9908d615600565b9b505050505050806123fa906153c1565b90506122ef565b5050505050509091565b6000806001600160a01b03831661242157600080fd5b6000861161242e57600080fd5b600061243960355490565b905061244533886140d4565b612457612450613789565b8883612c1e565b925061246461245061380f565b915060008061247389846131c8565b90925090506124828286615600565b945061248e8185615600565b93508785101561249d57600080fd5b868410156124aa57600080fd5b6124b5868686612a7d565b856001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8b88886040516124fc93929190614ea7565b60405180910390a350505094509492505050565b61251982611136565b6125238133612ab7565b6108a78383612ba1565b3b151590565b6001600160a01b0383166125955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbf565b6001600160a01b0382166125f65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbf565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60fe5460009081908190819081906001600160a01b031663514ea4bf61268f308a8a601892831b62ffffff9283161790921b91161790565b6040518263ffffffff1660e01b81526004016126ad91815260200190565b60a060405180830381865afa1580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee91906159a4565b939b929a50909850965090945092505050565b6001600160a01b0383166127655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bbf565b6001600160a01b0382166127c75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bbf565b6001600160a01b0383166000908152603360205260409020548181101561283f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bbf565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290612876908490615600565b92505081905550826001600160a01b0316846001600160a01b0316600080516020615d80833981519152846040516128b091815260200190565b60405180910390a361164e565b6060816128e15750506040805180820190915260018152600360fc1b602082015290565b8160005b811561290b57806128f5816153c1565b91506129049050600a8361583f565b91506128e5565b6000816001600160401b0381111561292557612925614bd8565b6040519080825280601f01601f19166020018201604052801561294f576020820181803683370190505b5090505b84156129ba57612964600183615812565b9150612971600a866159ed565b61297c906030615600565b60f81b8183815181106129915761299161533c565b60200101906001600160f81b031916908160001a9053506129b3600a8661583f565b9450612953565b949350505050565b600054610100900460ff166129e95760405162461bcd60e51b8152600401610bbf90615a01565b6129f1614210565b61124a8282614237565b600054610100900460ff16612a225760405162461bcd60e51b8152600401610bbf90615a01565b612a2a614210565b612a32614285565b565b600054610100900460ff16612a5b5760405162461bcd60e51b8152600401610bbf90615a01565b612a63614210565b612a6b614210565b612a32614210565b61124a8282612b1b565b8115612a9a5760fc54612a9a906001600160a01b03168484612f60565b80156108a75760fd546108a7906001600160a01b03168483612f60565b612ac18282611f4b565b61124a57612ad9816001600160a01b031660146142b8565b612ae48360206142b8565b604051602001612af5929190615a4c565b60408051601f198184030181529082905262461bcd60e51b8252610bbf91600401614a36565b612b258282611f4b565b61124a57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b5d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612bab8282611f4b565b1561124a57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818311612c175781610bdb565b5090919050565b60008383028160001985870982811083820303915050808411612c4057600080fd5b80612c5057508290049050610bdb565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b6000831580612cd557505082820282848281612cd257612cd2615829565b04145b15612cf65760008211612ce757600080fd5b81810490829006151501610bdb565b612d01848484612c1e565b905060008280612d1357612d13615829565b8486091115610bdb576000198110612d2a57600080fd5b6001019392505050565b6000818310612c175781610bdb565b6040516001600160a01b038085166024830152831660448201526064810182905261164e9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614453565b6001600160a01b038216612e045760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bbf565b8060356000828254612e169190615600565b90915550506001600160a01b03821660009081526033602052604081208054839290612e43908490615600565b90915550506040518181526001600160a01b03831690600090600080516020615d808339815191529060200160405180910390a35050565b60655460ff16612ec45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bbf565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612efe9190614a8a565b60405180910390a1565b60655460ff1615612f2b5760405162461bcd60e51b8152600401610bbf90615683565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612ef13390565b6040516001600160a01b0383166024820152604481018290526108a790849063a9059cbb60e01b90606401612d77565b60fe5460408051600280825260608201835263ffffffff600160b81b85041693600160a01b9004810b9260009291906020830190803683370190505090508281600081518110612fe257612fe261533c565b63ffffffff90921660209283029190910182015260fe546040805163ef01df4f60e01b815290516001600160a01b039092169263ef01df4f926004808401938290030181865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e91906153e7565b6001600160a01b0316639d3a5241826040518263ffffffff1660e01b81526004016130899190615461565b600060405180830381865afa9250505080156130c757506040513d6000823e601f3d908101601f191682016040526130c4919081019061551c565b60015b6130d35761164e612f08565b6000826000815181106130e8576130e861533c565b6020026020010151836001815181106131035761310361533c565b60200260200101516131159190615abb565b90506000613127600388900b83615b0b565b905060008260060b12801561314d575061314763ffffffff881683615b49565b60060b15155b15613160578061315c81615b6b565b9150505b61316a8682615b8f565b60020b8860020b1315801561318e57506131848682615bd6565b60020b8860020b12155b6131be5760405162461bcd60e51b81526020600482015260016024820152602b60f91b6044820152606401610bbf565b5050505050505050565b600080600061012d805480602002602001604051908101604052809291908181526020016000905b828210156132425760008481526020908190206040805160608101825291850154600281810b845263010000008204900b83850152600160301b900461ffff16908201528252600190920191016131f0565b50505050905060008060008351905060005b81811461344157600085828151811061326f5761326f61533c565b602002602001015160000151905060008683815181106132915761329161533c565b60200260200101516020015190506000806132ac8484612657565b5050505090506132bd818e8e612c1e565b9150506001600160801b0381161561342d5760fe54604051631d9de38760e11b815260009182916001600160a01b0390911690633b3bc70e9061330890889088908890600401615352565b60408051808303816000875af1158015613326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334a9190615387565b60fe546040516309e3d67b60e31b815292945090925060009182916001600160a01b031690634f1eb3d8906133929030908b908b906001600160801b03908190600401615938565b60408051808303816000875af11580156133b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d49190615975565b6001600160801b0391821693501690506133ee848f615600565b9d506133fa838e615600565b9c506134068483615812565b613410908c615600565b9a5061341c8382615812565b613426908b615600565b9950505050505b5050508061343a906153c1565b9050613254565b5060408051848152602081018490527fc28ad1de9c0c32e5394ba60323e44d8d9536312236a47231772e448a3e49de42910160405180910390a161010154604051639af608c960e01b81526000916001600160a01b031690639af608c9906134ad903090600401614a8a565b600060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134f29190810190615c14565b61010154604051634867e20360e11b81529192506000916001600160a01b03909116906390cfc40690613529903090600401614a8a565b602060405180830381865afa158015613546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356a91906155e7565b90506000808615613585576135828784612710612c1e565b91505b851561359b576135988684612710612c1e565b90505b8161010260008282546135ae9190615600565b925050819055508061010360008282546135c89190615600565b909155506135d890508288615812565b96506135e48187615812565b955060005b8451811461374b5761361b838683815181106136075761360761533c565b602002602001015160200151612710612c1e565b60ff86838151811061362f5761362f61533c565b6020026020010151600001516040516136489190615877565b9081526020016040518091039020546136619190615600565b60ff8683815181106136755761367561533c565b60200260200101516000015160405161368e9190615877565b9081526020016040518091039020819055506136b6828683815181106136075761360761533c565b6101008683815181106136cb576136cb61533c565b6020026020010151600001516040516136e49190615877565b9081526020016040518091039020546136fd9190615600565b6101008683815181106137125761371261533c565b60200260200101516000015160405161372b9190615877565b90815260405190819003602001902055613744816153c1565b90506135e9565b50613757878d8d612c1e565b613761908b615600565b995061376e868d8d612c1e565b613778908a615600565b985050505050505050509250929050565b6101025460fc546040516370a0823160e01b8152600092916001600160a01b0316906370a08231906137bf903090600401614a8a565b602060405180830381865afa1580156137dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380091906155e7565b61380a9190615812565b905090565b6101035460fd546040516370a0823160e01b8152600092916001600160a01b0316906370a08231906137bf903090600401614a8a565b600061012d805480602002602001604051908101604052809291908181526020016000905b828210156138bc5760008481526020908190206040805160608101825291850154600281810b845263010000008204900b83850152600160301b900461ffff169082015282526001909201910161386a565b505050509050606080600080600085519050806001600160401b038111156138e6576138e6614bd8565b60405190808252806020026020018201604052801561390f578160200160208202803683370190505b509450806001600160401b0381111561392a5761392a614bd8565b604051908082528060200260200182016040528015613953578160200160208202803683370190505b50935060005b818114613aee5760018110613a175786818151811061397a5761397a61533c565b60200260200101516000015160020b876001836139979190615812565b815181106139a7576139a761533c565b60200260200101516000015160020b128015613a0e57508681815181106139d0576139d061533c565b60200260200101516020015160020b876001836139ed9190615812565b815181106139fd576139fd61533c565b60200260200101516020015160020b125b613a1757600080fd5b600080613a828d613a338b86815181106123645761236461533c565b613a488c878151811061238a5761238a61533c565b8c8781518110613a5a57613a5a61533c565b60200260200101516040015161ffff16670de0b6b3a7640000613a7d91906157f3565b614038565b9150915081888481518110613a9957613a9961533c565b60200260200101818152505080878481518110613ab857613ab861533c565b6020908102919091010152613acd8287615600565b9550613ad98186615600565b9450505080613ae7906153c1565b9050613959565b5060005b818114613cc1576000808511613b09576000613b2d565b613b2d878381518110613b1e57613b1e61533c565b60200260200101518c87612c1e565b90506000808511613b3f576000613b54565b613b54878481518110613b1e57613b1e61533c565b90506000613b8d8e613b718c87815181106123645761236461533c565b613b868d888151811061238a5761238a61533c565b8686614528565b90506001600160801b03811615613cad5760fe805460ff60d81b198116600160d81b179091558a516001600160a01b039091169063aafe29c090309081908e9089908110613bdd57613bdd61533c565b6020026020010151600001518e8981518110613bfb57613bfb61533c565b60209081029190910181015101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152600290810b60448401520b60648201526001600160801b038416608482015260c060a4820152600060c482015260e4016060604051808303816000875af1158015613c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca99190615cff565b5050505b50505080613cba906153c1565b9050613af2565b506000871315613d0c576064613cd860058a6157f3565b613ce2919061583f565b613cea61380f565b10613d075760405162461bcd60e51b8152600401610bbf90615d2d565b613d51565b6000871215613d51576064613d2260058b6157f3565b613d2c919061583f565b613d34613789565b10613d515760405162461bcd60e51b8152600401610bbf90615d2d565b50505050505050505050565b6000600282900b60171d62ffffff818401821816620d89e8811115613d9557604051633c10250f60e01b815260040160405180910390fd5b600160801b6001821615613db657506ffffcb933bd6fad37aa2d162d1a5940015b6002821615613dd5576ffff97272373d413259a46990580e213a0260801c5b6004821615613df4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613e13576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613e32576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613e51576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613e70576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613e8f576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613eaf576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613ecf576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613eef576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613f0f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613f2f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613f4f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613f6f576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613f8f576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613fb0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613fd0576e5d6af8dedb81196699c329225ee6040260801c5b6204000082106140165762040000821615613ff9576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614016576b048a170391f7dc42444e8fa20260801c5b60008560020b131561402757600019045b63ffffffff0160201c949350505050565b600080836001600160a01b0316856001600160a01b03161115614059579293925b846001600160a01b0316866001600160a01b0316116140845761407d8585856145ec565b91506140cb565b836001600160a01b0316866001600160a01b031610156140bd576140a98685856145ec565b91506140b685878561465b565b90506140cb565b6140c885858561465b565b90505b94509492505050565b6001600160a01b0382166141345760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bbf565b6001600160a01b038216600090815260336020526040902054818110156141a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bbf565b6001600160a01b03831660009081526033602052604081208383039055603580548492906141d7908490615812565b90915550506040518281526000906001600160a01b03851690600080516020615d808339815191529060200160405180910390a3505050565b600054610100900460ff16612a325760405162461bcd60e51b8152600401610bbf90615a01565b600054610100900460ff1661425e5760405162461bcd60e51b8152600401610bbf90615a01565b81516142719060369060208501906148fc565b5080516108a79060379060208401906148fc565b600054610100900460ff166142ac5760405162461bcd60e51b8152600401610bbf90615a01565b6065805460ff19169055565b606060006142c78360026157f3565b6142d2906002615600565b6001600160401b038111156142e9576142e9614bd8565b6040519080825280601f01601f191660200182016040528015614313576020820181803683370190505b509050600360fc1b8160008151811061432e5761432e61533c565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061435d5761435d61533c565b60200101906001600160f81b031916908160001a90535060006143818460026157f3565b61438c906001615600565b90505b6001811115614404576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106143c0576143c061533c565b1a60f81b8282815181106143d6576143d661533c565b60200101906001600160f81b031916908160001a90535060049490941c936143fd81615d48565b905061438f565b508315610bdb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bbf565b60006144a8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661469e9092919063ffffffff16565b90508051600014806144c95750808060200190518101906144c991906152e6565b6108a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bbf565b6000836001600160a01b0316856001600160a01b03161115614548579293925b846001600160a01b0316866001600160a01b0316116145735761456c8585856146ad565b90506145e3565b836001600160a01b0316866001600160a01b031610156145d557600061459a8786866146ad565b905060006145a9878986614710565b9050806001600160801b0316826001600160801b0316106145ca57806145cc565b815b925050506145e3565b6145e0858584614710565b90505b95945050505050565b6000826001600160a01b0316846001600160a01b0316111561460c579192915b836001600160a01b0316614645606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316612c1e565b8161465257614652615829565b04949350505050565b6000826001600160a01b0316846001600160a01b0316111561467b579192915b6129ba826001600160801b03168585036001600160a01b0316600160601b612c1e565b60606129ba848460008561474d565b6000826001600160a01b0316846001600160a01b031611156146cd579192915b60006146f0856001600160a01b0316856001600160a01b0316600160601b612c1e565b90506145e361470b84838888036001600160a01b0316612c1e565b614828565b6000826001600160a01b0316846001600160a01b03161115614730579192915b6129ba61470b83600160601b8787036001600160a01b0316612c1e565b6060824710156147ae5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610bbf565b600080866001600160a01b031685876040516147ca9190615877565b60006040518083038185875af1925050503d8060008114614807576040519150601f19603f3d011682016040523d82523d6000602084013e61480c565b606091505b509150915061481d87838387614843565b979650505050505050565b806001600160801b038116811461483e57600080fd5b919050565b606083156148af5782516148a8576001600160a01b0385163b6148a85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bbf565b50816129ba565b6129ba83838151156148c45781518083602001fd5b8060405162461bcd60e51b8152600401610bbf9190614a36565b50805460008255906000526020600020908101906116759190614980565b82805461490890615301565b90600052602060002090601f01602090048101928261492a5760008555614970565b82601f1061494357805160ff1916838001178555614970565b82800160010185558215614970579182015b82811115614970578251825591602001919060010190614955565b5061497c92915061499f565b5090565b5b8082111561497c5780546001600160401b0319168155600101614981565b5b8082111561497c57600081556001016149a0565b6000602082840312156149c657600080fd5b81356001600160e01b031981168114610bdb57600080fd5b60005b838110156149f95781810151838201526020016149e1565b8381111561164e5750506000910152565b60008151808452614a228160208601602086016149de565b601f01601f19169290920160200192915050565b602081526000610bdb6020830184614a0a565b6001600160a01b038116811461167557600080fd5b60008060408385031215614a7157600080fd5b8235614a7c81614a49565b946020939093013593505050565b6001600160a01b0391909116815260200190565b600081518084526020808501945080840160005b83811015614ace57815187529582019590820190600101614ab2565b509495945050505050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015614b235784516001600160a01b031683529383019391830191600101614afe565b5050848103604086015286518082528282019350600581901b8201830183890160005b83811015614b7457601f19858403018752614b62838351614a0a565b96860196925090850190600101614b46565b50508681036060880152614b888189614a9e565b9b9a5050505050505050505050565b600080600060608486031215614bac57600080fd5b8335614bb781614a49565b92506020840135614bc781614a49565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614c1057614c10614bd8565b60405290565b60405160c081016001600160401b0381118282101715614c1057614c10614bd8565b604080519081016001600160401b0381118282101715614c1057614c10614bd8565b604051601f8201601f191681016001600160401b0381118282101715614c8257614c82614bd8565b604052919050565b60006001600160401b03821115614ca357614ca3614bd8565b50601f01601f191660200190565b6000614cc4614cbf84614c8a565b614c5a565b9050828152838383011115614cd857600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215614d0557600080fd5b8435614d1081614a49565b93506020850135614d2081614a49565b92506040850135614d3081614a49565b915060608501356001600160401b03811115614d4b57600080fd5b8501601f81018713614d5c57600080fd5b614d6b87823560208401614cb1565b91505092959194509250565b600060208284031215614d8957600080fd5b5035919050565b60008083601f840112614da257600080fd5b5081356001600160401b03811115614db957600080fd5b602083019150836020828501011115614dd157600080fd5b9250929050565b60008060008060608587031215614dee57600080fd5b843593506020850135925060408501356001600160401b03811115614e1257600080fd5b614e1e87828801614d90565b95989497509550505050565b60008060408385031215614e3d57600080fd5b823591506020830135614e4f81614a49565b809150509250929050565b600080600080600060a08688031215614e7257600080fd5b853594506020860135935060408601359250606086013591506080860135614e9981614a49565b809150509295509295909350565b9283526020830191909152604082015260600190565b600082601f830112614ece57600080fd5b610bdb83833560208501614cb1565b600060208284031215614eef57600080fd5b81356001600160401b03811115614f0557600080fd5b6129ba84828501614ebd565b600060208284031215614f2357600080fd5b8135610bdb81614a49565b600081518084526020808501945080840160005b83811015614ace57815160020b87529582019590820190600101614f42565b606081526000614f746060830186614f2e565b602083820381850152614f878287614f2e565b8481036040860152855180825282870193509082019060005b81811015614fc057845161ffff1683529383019391830191600101614fa0565b509098975050505050505050565b600080600060608486031215614fe357600080fd5b83356001600160401b03811115614ff957600080fd5b61500586828701614ebd565b9660208601359650604090950135949350505050565b60006001600160401b0382111561503457615034614bd8565b5060051b60200190565b8060020b811461167557600080fd5b600082601f83011261505e57600080fd5b8135602061506e614cbf8361501b565b82815260059290921b8401810191818101908684111561508d57600080fd5b8286015b848110156150b15780356150a48161503e565b8352918301918301615091565b509695505050505050565b61ffff8116811461167557600080fd5b600080600080606085870312156150e257600080fd5b843593506020808601356001600160401b038082111561510157600080fd5b908701906060828a03121561511557600080fd5b61511d614bee565b82358281111561512c57600080fd5b6151388b82860161504d565b825250838301358281111561514c57600080fd5b6151588b82860161504d565b858301525060408301358281111561516f57600080fd5b80840193505089601f84011261518457600080fd5b8235615192614cbf8261501b565b81815260059190911b8401850190858101908c8311156151b157600080fd5b948601945b828610156151d85785356151c9816150bc565b825294860194908601906151b6565b8060408501525050508096505060408801359250808311156151f957600080fd5b5050614e1e87828801614d90565b6001600160801b038116811461167557600080fd5b60008060006060848603121561523157600080fd5b833561523c8161503e565b9250602084013561524c8161503e565b9150604084013561525c81615207565b809150509250925092565b6000806000806080858703121561527d57600080fd5b843593506020850135925060408501359150606085013561529d81614a49565b939692955090935050565b600080604083850312156152bb57600080fd5b82356152c681614a49565b91506020830135614e4f81614a49565b8051801515811461483e57600080fd5b6000602082840312156152f857600080fd5b610bdb826152d6565b600181811c9082168061531557607f821691505b6020821081141561533657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600293840b81529190920b60208201526001600160801b03909116604082015260806060820181905260009082015260a00190565b6000806040838503121561539a57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60006000198214156153d5576153d56153ab565b5060010190565b805161483e81614a49565b6000602082840312156153f957600080fd5b8151610bdb81614a49565b6000806000806080858703121561541a57600080fd5b845161542581614a49565b602086015190945061543681614a49565b60408601519093506154478161503e565b606086015190925063ffffffff8116811461529d57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561549f57835163ffffffff168352928401929184019160010161547d565b50909695505050505050565b600082601f8301126154bc57600080fd5b815160206154cc614cbf8361501b565b82815260059290921b840181019181810190868411156154eb57600080fd5b8286015b848110156150b15780516001600160581b038116811461550f5760008081fd5b83529183019183016154ef565b6000806040838503121561552f57600080fd5b82516001600160401b038082111561554657600080fd5b818501915085601f83011261555a57600080fd5b8151602061556a614cbf8361501b565b82815260059290921b8401810191818101908984111561558957600080fd5b948201945b838610156155b75785518060060b81146155a85760008081fd5b8252948201949082019061558e565b918801519196509093505050808211156155d057600080fd5b506155dd858286016154ab565b9150509250929050565b6000602082840312156155f957600080fd5b5051919050565b60008219821115615613576156136153ab565b500190565b7353544545525f414c47454252415f5641554c545f60601b8152600082516156478160148501602087016149de565b9190910160140192915050565b6629aa22a2a920ab60c91b8152600082516156768160078501602087016149de565b9190910160070192915050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b80516005811061483e57600080fd5b600082601f8301126156cd57600080fd5b81516156db614cbf82614c8a565b8181528460208386010111156156f057600080fd5b6129ba8260208301602087016149de565b60006020828403121561571357600080fd5b81516001600160401b038082111561572a57600080fd5b9083019060c0828603121561573e57600080fd5b615746614c16565b61574f836156ad565b8152602083015160208201526040830151604082015260608301518281111561577757600080fd5b615783878286016156bc565b606083015250615795608084016153dc565b608082015260a0830151828111156157ac57600080fd5b6157b8878286016156bc565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600081600019048311821515161561580d5761580d6153ab565b500290565b600082821015615824576158246153ab565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261584e5761584e615829565b500490565b6001600160a01b03831681526040602082018190526000906129ba90830184614a0a565b600082516158898184602087016149de565b9190910192915050565b60008060008060008060c087890312156158ac57600080fd5b86516158b781614a49565b60208801519096506158c88161503e565b60408801519095506158d9816150bc565b606088015190945060ff811681146158f057600080fd5b6080880151909350615901816150bc565b915061590f60a088016152d6565b90509295509295509295565b6000600160ff1b821415615931576159316153ab565b5060000390565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6000806040838503121561598857600080fd5b825161599381615207565b6020840151909250614e4f81615207565b600080600080600060a086880312156159bc57600080fd5b85519450602086015193506040860151925060608601516159dc81615207565b6080870151909250614e9981615207565b6000826159fc576159fc615829565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615a7e8160178501602088016149de565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615aaf8160288401602088016149de565b01602801949350505050565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615ae657615ae66153ab565b81667fffffffffffff018313811615615b0157615b016153ab565b5090039392505050565b60008160060b8360060b80615b2257615b22615829565b667fffffffffffff19821460001982141615615b4057615b406153ab565b90059392505050565b60008260060b80615b5c57615b5c615829565b808360060b0791505092915050565b60008160020b627fffff19811415615b8557615b856153ab565b6000190192915050565b60008160020b8360020b6000821282627fffff03821381151615615bb557615bb56153ab565b82627fffff19038212811615615bcd57615bcd6153ab565b50019392505050565b60008160020b8360020b6000811281627fffff1901831281151615615bfd57615bfd6153ab565b81627fffff018313811615615b0157615b016153ab565b60006020808385031215615c2757600080fd5b82516001600160401b0380821115615c3e57600080fd5b818501915085601f830112615c5257600080fd5b8151615c60614cbf8261501b565b81815260059190911b83018401908481019088831115615c7f57600080fd5b8585015b83811015615cf257805185811115615c9b5760008081fd5b86016040818c03601f1901811315615cb35760008081fd5b615cbb614c38565b8983015188811115615ccd5760008081fd5b615cdb8e8c838701016156bc565b825250910151888201528352918601918601615c83565b5098975050505050505050565b600080600060608486031215615d1457600080fd5b8351925060208401519150604084015161525c81615207565b6020808252600190820152605360f81b604082015260600190565b600081615d5757615d576153ab565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efc62a261ff212893ed0a2ac422d821462bb04a4b5c153a746ad6a15108fb4f951a264697066735822122049be77f86768942d1115a312b9fca115f0e69b2cd03f12a879bf97b8a5c7803a64736f6c634300080c0033