Commit 66ae120d authored by clabby's avatar clabby Committed by GitHub

fix(ctb): `LibPosition` downcasting (#10150)

* Correct `LibPosition` types

* bindings, locks, etc.
parent f32d1972
......@@ -31,7 +31,7 @@ var (
// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract.
var FaultDisputeGameMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"},{\"name\":\"_weth\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"},{\"name\":\"_anchorStateRegistry\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bond\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameCreator\",\"inputs\":[],\"outputs\":[{\"name\":\"creator_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChallengerDuration\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"duration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredBond\",\"inputs\":[{\"name\":\"_position\",\"type\":\"uint128\",\"internalType\":\"Position\"}],\"outputs\":[{\"name\":\"requiredBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"l2ChainId_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"startingBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingRootHash\",\"inputs\":[],\"outputs\":[{\"name\":\"startingRootHash_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weth\",\"inputs\":[],\"outputs\":[{\"name\":\"weth_\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AnchorRootNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DuplicateStep\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101a06040523480156200001257600080fd5b5060405162004967380380620049678339810160408190526200003591620000d0565b868610620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff9098166101205260809690965260a09490945260c0929092526001600160401b031660e0526001600160a01b03908116610100529081166101405216610160526101805262000183565b6001600160a01b0381168114620000bb57600080fd5b50565b8051620000cb81620000a5565b919050565b60008060008060008060008060006101208a8c031215620000f057600080fd5b895163ffffffff811681146200010557600080fd5b60208b015160408c015160608d015160808e0151939c50919a50985096506001600160401b03811681146200013957600080fd5b60a08b01519095506200014c81620000a5565b93506200015c60c08b01620000be565b92506200016c60e08b01620000be565b91506101008a015190509295985092959850929598565b60805160a05160c05160e05161010051610120516101405161016051610180516146af620002b86000396000818161072201526127f8015260008181610a7a015261152901526000818161039001528181610bcf015281816113e5015281816118f00152613bfe01526000818161057e015281816114e8015261289201526000818161035d0152818161216501526124c10152600081816107750152818161101101528181611b2701526129870152600081816107a801528181610ec001528181610f8901528181611fc0015281816126c001528181612daa015281816134e7015281816136150152818161371d01526137f901526000818161081f01528181610f2c01528181611c1e01528181611ca401528181611eaf0152611fe1015260008181610543015261207701526146af6000f3fe6080604052600436106102175760003560e01c80638b85902b11610126578063d5d44d80116100a7578063ec5e630811610079578063fa24f74311610061578063fa24f743146107ec578063fa315aa914610810578063fdffbb281461084357005b8063ec5e630814610799578063f8f43ff6146107cc57005b8063d5d44d80146106e6578063d6ae3cd514610713578063d8cc1a3c14610746578063e1f0c3761461076657005b8063bd8da956116100f8578063c55cd0c7116100e0578063c55cd0c714610628578063c6f0308c1461063b578063cf09e0d0146106c557005b8063bd8da956146105e8578063c395e1ca1461060857005b80638b85902b146104f45780638d450a9514610534578063bbdc02db14610567578063bcef3b55146105a857005b806354fd4d50116101b0578063632247ea1161018257806370872aa51161016a57806370872aa5146104c25780638129fc1c146104d75780638980e0cc146104df57005b8063632247ea1461046f5780636361506d1461048257005b806354fd4d50146103b457806357da950e1461040a578063609d33341461043a57806360e274641461044f57005b806335fef567116101e957806335fef567146102da57806337b1b229146102ed5780633a7684631461034e5780633fc8cef31461038157005b806319effeb414610220578063200d2ed21461026b57806325fc2ace146102a65780632810e1d6146102c557005b3661021e57005b005b34801561022c57600080fd5b5060005461024d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5060005461029990700100000000000000000000000000000000900460ff1681565b6040516102629190613f9f565b3480156102b257600080fd5b506007545b604051908152602001610262565b3480156102d157600080fd5b50610299610856565b61021e6102e8366004613fe0565b610afb565b3480156102f957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610262565b34801561035a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b34801561038d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b3480156103c057600080fd5b506103fd6040518060400160405280600681526020017f302e31322e30000000000000000000000000000000000000000000000000000081525081565b604051610262919061406d565b34801561041657600080fd5b50600754600854610425919082565b60408051928352602083019190915201610262565b34801561044657600080fd5b506103fd610b10565b34801561045b57600080fd5b5061021e61046a3660046140a5565b610b1e565b61021e61047d3660046140de565b610cca565b34801561048e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356102b7565b3480156104ce57600080fd5b506008546102b7565b61021e61147e565b3480156104eb57600080fd5b506001546102b7565b34801561050057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356102b7565b34801561054057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561057357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610262565b3480156105b457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356102b7565b3480156105f457600080fd5b5061024d610603366004614113565b6119b2565b34801561061457600080fd5b506102b761062336600461412c565b611b71565b61021e610636366004613fe0565b611d5b565b34801561064757600080fd5b5061065b610656366004614113565b611d67565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610262565b3480156106d157600080fd5b5060005461024d9067ffffffffffffffff1681565b3480156106f257600080fd5b506102b76107013660046140a5565b60026020526000908152604090205481565b34801561071f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561075257600080fd5b5061021e6107613660046141a7565b611dfe565b34801561077257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024d565b3480156107a557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b3480156107d857600080fd5b5061021e6107e7366004614231565b612433565b3480156107f857600080fd5b50610801612890565b6040516102629392919061425d565b34801561081c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b61021e610851366004614113565b6128f0565b600080600054700100000000000000000000000000000000900460ff16600281111561088457610884613f70565b146108bb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff1661091f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008154811061094b5761094b61428b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610986576001610989565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610a3a57610a3a613f70565b021790556002811115610a4f57610a4f613f70565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae057600080fd5b505af1158015610af4573d6000803e3d6000fd5b5050505090565b610b0782826000610cca565b5050565b905090565b6060610b0b60546020612d0c565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610b83576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610c85576040519150601f19603f3d011682016040523d82523d6000602084013e610c8a565b606091505b5050905080610cc5576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610cf657610cf6613f70565b14610d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610d4257610d4261428b565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610e079083908690612d5e16565b90506000610ea7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610ee95750610ee67f000000000000000000000000000000000000000000000000000000000000000060026142e9565b81145b8015610ef3575084155b15610f2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610f84576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610faf7f000000000000000000000000000000000000000000000000000000000000000060016142e9565b8103610fc157610fc186888588612d66565b34610fcb83611b71565b14611002576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061100d886119b2565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82160361107f576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff16156110fd576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b8152602001908152602001600020600180805490506113929190614301565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60065460ff16156114bb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190614318565b9092509050816115cf576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905580367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511611686576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b607a361461169c57639824bdab6000526004601cfd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600080600054700100000000000000000000000000000000900460ff1660028111156119e0576119e0613f70565b14611a17576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611a2c57611a2c61428b565b600091825260208220600590910201805490925063ffffffff90811614611a9b57815460018054909163ffffffff16908110611a6a57611a6a61428b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611ad390700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611ae79067ffffffffffffffff1642614301565b611b06611ac6846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611b1a91906142e9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff8216811015611b6457809450611b68565b8194505b50505050919050565b600080611c10836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611c76576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611c91838361436b565b9050670de0b6b3a76400006000611cc8827f000000000000000000000000000000000000000000000000000000000000000061437f565b90506000611ce6611ce1670de0b6b3a76400008661437f565b612f27565b90506000611cf48484613182565b90506000611d0283836131d1565b90506000611d0f826131ff565b90506000611d2e82611d29670de0b6b3a76400008f61437f565b6133e7565b90506000611d3c8b836131d1565b9050611d48818d61437f565b9f9e505050505050505050505050505050565b610b0782826001610cca565b60018181548110611d7757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611e2a57611e2a613f70565b14611e61576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611e7657611e7661428b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ed57f000000000000000000000000000000000000000000000000000000000000000060016142e9565b611f71826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611fb2576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156120a1576120057f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614301565b6001901b612024846fffffffffffffffffffffffffffffffff16613421565b67ffffffffffffffff1661203891906143bc565b156120755761206c61205d60016fffffffffffffffffffffffffffffffff87166143d0565b865463ffffffff1660006134c7565b60030154612097565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506120cb565b600385015491506120c861205d6fffffffffffffffffffffffffffffffff86166001614401565b90505b600882901b60088a8a6040516120e2929190614435565b6040518091039020901b14612123576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061212e8c6135ab565b9050600061213d836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906121b7908f908f908f908f908a9060040161448e565b6020604051808303816000875af11580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa91906144c8565b6004850154911491506000906002906122a5906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612341896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61234b91906144e1565b6123559190614502565b67ffffffffffffffff16159050811515810361239d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156123f4576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561245f5761245f613f70565b14612496576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806124a5866135da565b935093509350935060006124bb858585856139e9565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190614529565b9050600189036126465773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846125aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561261c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264091906144c8565b50612885565b600289036126725773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84896125aa565b6003890361269e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84876125aa565b600489036127ba5760006126e46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613aa8565b6008546126f191906142e9565b6126fc9060016142e9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561278f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b391906144c8565b5050612885565b60058903612853576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016125fd565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606128e9610b10565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561291c5761291c613f70565b14612953576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106129685761296861428b565b906000526020600020906005020190506000612983836119b2565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821610156129f6576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612a3f576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612a5c57508415155b15612af6578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612a8f5781612aab565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612ab78187613b5d565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612c3e576000858281548110612b2757612b2761428b565b6000918252602080832090910154808352600590915260409091205490915060ff16612b7f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612b9457612b9461428b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612bed575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612c2b576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612c3790614546565b9050612b0b565b50612c8673ffffffffffffffffffffffffffffffffffffffff831615612c645782612c80565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613b5d565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b6000612d856fffffffffffffffffffffffffffffffff84166001614401565b90506000612d95828660016134c7565b9050600086901a8380612e885750612dce60027f00000000000000000000000000000000000000000000000000000000000000006143bc565b6004830154600290612e72906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612e7c9190614502565b67ffffffffffffffff16145b15612ee05760ff811660011480612ea2575060ff81166002145b612edb576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161167d565b612f1e565b60ff811615612f1e576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161167d565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612f8657631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a7640000021582026131bf57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156131ef5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361322d57919050565b680755bf798b4a1bf1e5821261324b5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613418670de0b6b3a7640000836133ff86612f27565b613409919061457e565b613413919061463a565b6131ff565b90505b92915050565b6000806134ae837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826135105761350b6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613c56565b61352b565b61352b856fffffffffffffffffffffffffffffffff16613e14565b9050600184815481106135405761354061428b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146135a357815460018054909163ffffffff1690811061358e5761358e61428b565b90600052602060002090600502019150613551565b509392505050565b60008060008060006135bc866135da565b93509350935093506135d0848484846139e9565b9695505050505050565b60008060008060008590506000600182815481106135fa576135fa61428b565b600091825260209091206004600590920201908101549091507f0000000000000000000000000000000000000000000000000000000000000000906136d1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613712576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f0000000000000000000000000000000000000000000000000000000000000000906137d9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561385557825463ffffffff1661381f7f000000000000000000000000000000000000000000000000000000000000000060016142e9565b8303613829578391505b6001818154811061383c5761383c61428b565b9060005260206000209060050201935080945050613716565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff166138be6138a9856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156139855760006138f6836fffffffffffffffffffffffffffffffff16613421565b67ffffffffffffffff16111561395957600061393061392860016fffffffffffffffffffffffffffffffff86166143d0565b8960016134c7565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a5061395f9050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506139db565b60006139a76139286fffffffffffffffffffffffffffffffff85166001614401565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103613a4f578282604051602001613a329291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050613aa0565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613b35847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613bad9084906142e9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c4257600080fd5b505af1158015612f1e573d6000803e3d6000fd5b600081613cf5846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613d36576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d3f83613e14565b905081613dde826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161341b57613418613dfb8360016142e9565b6fffffffffffffffffffffffffffffffff831690613ec0565b60008119600183011681613ea8827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613f4d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613fda577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613ff357600080fd5b50508035926020909101359150565b6000815180845260005b818110156140285760208185018101518683018201520161400c565b8181111561403a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006134186020830184614002565b73ffffffffffffffffffffffffffffffffffffffff811681146140a257600080fd5b50565b6000602082840312156140b757600080fd5b81356140c281614080565b9392505050565b803580151581146140d957600080fd5b919050565b6000806000606084860312156140f357600080fd5b833592506020840135915061410a604085016140c9565b90509250925092565b60006020828403121561412557600080fd5b5035919050565b60006020828403121561413e57600080fd5b81356fffffffffffffffffffffffffffffffff811681146140c257600080fd5b60008083601f84011261417057600080fd5b50813567ffffffffffffffff81111561418857600080fd5b6020830191508360208285010111156141a057600080fd5b9250929050565b600080600080600080608087890312156141c057600080fd5b863595506141d0602088016140c9565b9450604087013567ffffffffffffffff808211156141ed57600080fd5b6141f98a838b0161415e565b9096509450606089013591508082111561421257600080fd5b5061421f89828a0161415e565b979a9699509497509295939492505050565b60008060006060848603121561424657600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006142826060830184614002565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156142fc576142fc6142ba565b500190565b600082821015614313576143136142ba565b500390565b6000806040838503121561432b57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261437a5761437a61433c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143b7576143b76142ba565b500290565b6000826143cb576143cb61433c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156143f9576143f96142ba565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561442c5761442c6142ba565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006144a2606083018789614445565b82810360208401526144b5818688614445565b9150508260408301529695505050505050565b6000602082840312156144da57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156143f9576143f96142ba565b600067ffffffffffffffff8084168061451d5761451d61433c565b92169190910692915050565b60006020828403121561453b57600080fd5b81516140c281614080565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614577576145776142ba565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156145bf576145bf6142ba565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156145fa576145fa6142ba565b60008712925087820587128484161615614616576146166142ba565b8785058712818416161561462c5761462c6142ba565b505050929093029392505050565b6000826146495761464961433c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561469d5761469d6142ba565b50059056fea164736f6c634300080f000a",
Bin: "0x6101a06040523480156200001257600080fd5b5060405162004919380380620049198339810160408190526200003591620000d0565b868610620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff9098166101205260809690965260a09490945260c0929092526001600160401b031660e0526001600160a01b03908116610100529081166101405216610160526101805262000183565b6001600160a01b0381168114620000bb57600080fd5b50565b8051620000cb81620000a5565b919050565b60008060008060008060008060006101208a8c031215620000f057600080fd5b895163ffffffff811681146200010557600080fd5b60208b015160408c015160608d015160808e0151939c50919a50985096506001600160401b03811681146200013957600080fd5b60a08b01519095506200014c81620000a5565b93506200015c60c08b01620000be565b92506200016c60e08b01620000be565b91506101008a015190509295985092959850929598565b60805160a05160c05160e0516101005161012051610140516101605161018051614661620002b86000396000818161072201526127e4015260008181610a7a015261152201526000818161039001528181610bcf015281816113de015281816118e90152613bcf01526000818161057e015281816114e1015261287e01526000818161035d0152818161215801526124ad0152600081816107750152818161100a01528181611b2001526129730152600081816107a801528181610eb901528181610f8201528181611fab015281816126ac01528181612d96015281816134c5015281816135f3015281816136f401526137c901526000818161081f01528181610f2501528181611c1001528181611c9601528181611ea10152611fcc015260008181610543015261206a01526146616000f3fe6080604052600436106102175760003560e01c80638b85902b11610126578063d5d44d80116100a7578063ec5e630811610079578063fa24f74311610061578063fa24f743146107ec578063fa315aa914610810578063fdffbb281461084357005b8063ec5e630814610799578063f8f43ff6146107cc57005b8063d5d44d80146106e6578063d6ae3cd514610713578063d8cc1a3c14610746578063e1f0c3761461076657005b8063bd8da956116100f8578063c55cd0c7116100e0578063c55cd0c714610628578063c6f0308c1461063b578063cf09e0d0146106c557005b8063bd8da956146105e8578063c395e1ca1461060857005b80638b85902b146104f45780638d450a9514610534578063bbdc02db14610567578063bcef3b55146105a857005b806354fd4d50116101b0578063632247ea1161018257806370872aa51161016a57806370872aa5146104c25780638129fc1c146104d75780638980e0cc146104df57005b8063632247ea1461046f5780636361506d1461048257005b806354fd4d50146103b457806357da950e1461040a578063609d33341461043a57806360e274641461044f57005b806335fef567116101e957806335fef567146102da57806337b1b229146102ed5780633a7684631461034e5780633fc8cef31461038157005b806319effeb414610220578063200d2ed21461026b57806325fc2ace146102a65780632810e1d6146102c557005b3661021e57005b005b34801561022c57600080fd5b5060005461024d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5060005461029990700100000000000000000000000000000000900460ff1681565b6040516102629190613f54565b3480156102b257600080fd5b506007545b604051908152602001610262565b3480156102d157600080fd5b50610299610856565b61021e6102e8366004613f95565b610afb565b3480156102f957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610262565b34801561035a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b34801561038d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b3480156103c057600080fd5b506103fd6040518060400160405280600681526020017f302e31332e30000000000000000000000000000000000000000000000000000081525081565b6040516102629190614022565b34801561041657600080fd5b50600754600854610425919082565b60408051928352602083019190915201610262565b34801561044657600080fd5b506103fd610b10565b34801561045b57600080fd5b5061021e61046a36600461405a565b610b1e565b61021e61047d366004614093565b610cca565b34801561048e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356102b7565b3480156104ce57600080fd5b506008546102b7565b61021e611477565b3480156104eb57600080fd5b506001546102b7565b34801561050057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356102b7565b34801561054057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561057357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610262565b3480156105b457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356102b7565b3480156105f457600080fd5b5061024d6106033660046140c8565b6119ab565b34801561061457600080fd5b506102b76106233660046140e1565b611b6a565b61021e610636366004613f95565b611d4d565b34801561064757600080fd5b5061065b6106563660046140c8565b611d59565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610262565b3480156106d157600080fd5b5060005461024d9067ffffffffffffffff1681565b3480156106f257600080fd5b506102b761070136600461405a565b60026020526000908152604090205481565b34801561071f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561075257600080fd5b5061021e61076136600461415c565b611df0565b34801561077257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024d565b3480156107a557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b3480156107d857600080fd5b5061021e6107e73660046141e6565b61241f565b3480156107f857600080fd5b5061080161287c565b60405161026293929190614212565b34801561081c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b61021e6108513660046140c8565b6128dc565b600080600054700100000000000000000000000000000000900460ff16600281111561088457610884613f25565b146108bb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff1661091f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008154811061094b5761094b614240565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610986576001610989565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610a3a57610a3a613f25565b021790556002811115610a4f57610a4f613f25565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae057600080fd5b505af1158015610af4573d6000803e3d6000fd5b5050505090565b610b0782826000610cca565b5050565b905090565b6060610b0b60546020612cf8565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610b83576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610c85576040519150601f19603f3d011682016040523d82523d6000602084013e610c8a565b606091505b5050905080610cc5576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610cf657610cf6613f25565b14610d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610d4257610d42614240565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610e079083908690612d4a16565b90506000610ea7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580610ee25750610edf7f0000000000000000000000000000000000000000000000000000000000000000600261429e565b81145b8015610eec575084155b15610f23576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610f7d576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fa87f0000000000000000000000000000000000000000000000000000000000000000600161429e565b8103610fba57610fba86888588612d52565b34610fc483611b6a565b14610ffb576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611006886119ab565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821603611078576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff16156110f6576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b81526020019081526020016000206001808054905061138b91906142b6565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60065460ff16156114b4576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa158015611568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158c91906142cd565b9092509050816115c8576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905580367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161167f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b607a361461169557639824bdab6000526004601cfd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561192f57600080fd5b505af1158015611943573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600080600054700100000000000000000000000000000000900460ff1660028111156119d9576119d9613f25565b14611a10576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611a2557611a25614240565b600091825260208220600590910201805490925063ffffffff90811614611a9457815460018054909163ffffffff16908110611a6357611a63614240565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611acc90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611ae09067ffffffffffffffff16426142b6565b611aff611abf846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611b13919061429e565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff8216811015611b5d57809450611b61565b8194505b50505050919050565b600080611c09836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611c68576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611c838383614320565b9050670de0b6b3a76400006000611cba827f0000000000000000000000000000000000000000000000000000000000000000614334565b90506000611cd8611cd3670de0b6b3a764000086614334565b612f0c565b90506000611ce68484613167565b90506000611cf483836131b6565b90506000611d01826131e4565b90506000611d2082611d1b670de0b6b3a76400008f614334565b6133cc565b90506000611d2e8b836131b6565b9050611d3a818d614334565b9f9e505050505050505050505050505050565b610b0782826001610cca565b60018181548110611d6957600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611e1c57611e1c613f25565b14611e53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611e6857611e68614240565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ec77f0000000000000000000000000000000000000000000000000000000000000000600161429e565b611f63826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614611f9d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561209457611ff07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006142b6565b6001901b61200f846fffffffffffffffffffffffffffffffff16613406565b6fffffffffffffffffffffffffffffffff1661202b9190614371565b156120685761205f61205060016fffffffffffffffffffffffffffffffff8716614385565b865463ffffffff1660006134a5565b6003015461208a565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506120be565b600385015491506120bb6120506fffffffffffffffffffffffffffffffff861660016143b6565b90505b600882901b60088a8a6040516120d59291906143ea565b6040518091039020901b14612116576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121218c613589565b90506000612130836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906121aa908f908f908f908f908a90600401614443565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed919061447d565b600485015491149150600090600290612298906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612334896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61233e9190614496565b61234891906144b9565b60ff161590508115158103612389576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156123e0576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561244b5761244b613f25565b14612482576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080612491866135b8565b935093509350935060006124a7858585856139c1565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253a91906144db565b9050600189036126325773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612596367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c919061447d565b50612871565b6002890361265e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612596565b6003890361268a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612596565b600489036127a65760006126d06fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613a80565b6008546126dd919061429e565b6126e890600161429e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f919061447d565b5050612871565b6005890361283f576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016125e9565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606128d5610b10565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561290857612908613f25565b1461293f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061295457612954614240565b90600052602060002090600502019050600061296f836119ab565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821610156129e2576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612a2b576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612a4857508415155b15612ae2578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612a7b5781612a97565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612aa38187613b2e565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612c2a576000858281548110612b1357612b13614240565b6000918252602080832090910154808352600590915260409091205490915060ff16612b6b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612b8057612b80614240565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612bd9575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612c17576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612c23906144f8565b9050612af7565b50612c7273ffffffffffffffffffffffffffffffffffffffff831615612c505782612c6c565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613b2e565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b6000612d716fffffffffffffffffffffffffffffffff841660016143b6565b90506000612d81828660016134a5565b9050600086901a8380612e6d5750612dba60027f0000000000000000000000000000000000000000000000000000000000000000614371565b6004830154600290612e5e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612e6891906144b9565b60ff16145b15612ec55760ff811660011480612e87575060ff81166002145b612ec0576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611676565b612f03565b60ff811615612f03576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611676565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612f6b57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a7640000021582026131a457637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156131d45763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361321257919050565b680755bf798b4a1bf1e582126132305763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006133fd670de0b6b3a7640000836133e486612f0c565b6133ee9190614530565b6133f891906145ec565b6131e4565b90505b92915050565b600080613493837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826134ee576134e96fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613c27565b613509565b613509856fffffffffffffffffffffffffffffffff16613dd7565b90506001848154811061351e5761351e614240565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461358157815460018054909163ffffffff1690811061356c5761356c614240565b9060005260206000209060050201915061352f565b509392505050565b600080600080600061359a866135b8565b93509350935093506135ae848484846139c1565b9695505050505050565b60008060008060008590506000600182815481106135d8576135d8614240565b600091825260209091206004600590920201908101549091507f0000000000000000000000000000000000000000000000000000000000000000906136af906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116136e9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f0000000000000000000000000000000000000000000000000000000000000000906137b0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16925082111561382557825463ffffffff166137ef7f0000000000000000000000000000000000000000000000000000000000000000600161429e565b83036137f9578391505b6001818154811061380c5761380c614240565b90600052602060002090600502019350809450506136ed565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661388e613879856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561395d5760006138c6836fffffffffffffffffffffffffffffffff16613406565b6fffffffffffffffffffffffffffffffff16111561393157600061390861390060016fffffffffffffffffffffffffffffffff8616614385565b8960016134a5565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506139379050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506139b3565b600061397f6139006fffffffffffffffffffffffffffffffff851660016143b6565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103613a27578282604051602001613a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050613a78565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613b0d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613b7e90849061429e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c1357600080fd5b505af1158015612f03573d6000803e3d6000fd5b600081613cc6846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613d00576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d0983613dd7565b905081613da8826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613400576133fd613dbe83600161429e565b6fffffffffffffffffffffffffffffffff831690613e7c565b60008119600183011681613e6b827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080613f09847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613f8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613fa857600080fd5b50508035926020909101359150565b6000815180845260005b81811015613fdd57602081850181015186830182015201613fc1565b81811115613fef576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006133fd6020830184613fb7565b73ffffffffffffffffffffffffffffffffffffffff8116811461405757600080fd5b50565b60006020828403121561406c57600080fd5b813561407781614035565b9392505050565b8035801515811461408e57600080fd5b919050565b6000806000606084860312156140a857600080fd5b83359250602084013591506140bf6040850161407e565b90509250925092565b6000602082840312156140da57600080fd5b5035919050565b6000602082840312156140f357600080fd5b81356fffffffffffffffffffffffffffffffff8116811461407757600080fd5b60008083601f84011261412557600080fd5b50813567ffffffffffffffff81111561413d57600080fd5b60208301915083602082850101111561415557600080fd5b9250929050565b6000806000806000806080878903121561417557600080fd5b863595506141856020880161407e565b9450604087013567ffffffffffffffff808211156141a257600080fd5b6141ae8a838b01614113565b909650945060608901359150808211156141c757600080fd5b506141d489828a01614113565b979a9699509497509295939492505050565b6000806000606084860312156141fb57600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006142376060830184613fb7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156142b1576142b161426f565b500190565b6000828210156142c8576142c861426f565b500390565b600080604083850312156142e057600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261432f5761432f6142f1565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436c5761436c61426f565b500290565b600082614380576143806142f1565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156143ae576143ae61426f565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156143e1576143e161426f565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006144576060830187896143fa565b828103602084015261446a8186886143fa565b9150508260408301529695505050505050565b60006020828403121561448f57600080fd5b5051919050565b600060ff821660ff8416808210156144b0576144b061426f565b90039392505050565b600060ff8316806144cc576144cc6142f1565b8060ff84160691505092915050565b6000602082840312156144ed57600080fd5b815161407781614035565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145295761452961426f565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156145715761457161426f565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156145ac576145ac61426f565b600087129250878205871284841616156145c8576145c861426f565b878505871281841616156145de576145de61426f565b505050929093029392505050565b6000826145fb576145fb6142f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561464f5761464f61426f565b50059056fea164736f6c634300080f000a",
}
// FaultDisputeGameABI is the input ABI used to generate the binding from.
......
......@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var FaultDisputeGameStorageLayout = new(solc.StorageLayout)
var FaultDisputeGameDeployedBin = "0x6080604052600436106102175760003560e01c80638b85902b11610126578063d5d44d80116100a7578063ec5e630811610079578063fa24f74311610061578063fa24f743146107ec578063fa315aa914610810578063fdffbb281461084357005b8063ec5e630814610799578063f8f43ff6146107cc57005b8063d5d44d80146106e6578063d6ae3cd514610713578063d8cc1a3c14610746578063e1f0c3761461076657005b8063bd8da956116100f8578063c55cd0c7116100e0578063c55cd0c714610628578063c6f0308c1461063b578063cf09e0d0146106c557005b8063bd8da956146105e8578063c395e1ca1461060857005b80638b85902b146104f45780638d450a9514610534578063bbdc02db14610567578063bcef3b55146105a857005b806354fd4d50116101b0578063632247ea1161018257806370872aa51161016a57806370872aa5146104c25780638129fc1c146104d75780638980e0cc146104df57005b8063632247ea1461046f5780636361506d1461048257005b806354fd4d50146103b457806357da950e1461040a578063609d33341461043a57806360e274641461044f57005b806335fef567116101e957806335fef567146102da57806337b1b229146102ed5780633a7684631461034e5780633fc8cef31461038157005b806319effeb414610220578063200d2ed21461026b57806325fc2ace146102a65780632810e1d6146102c557005b3661021e57005b005b34801561022c57600080fd5b5060005461024d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5060005461029990700100000000000000000000000000000000900460ff1681565b6040516102629190613f9f565b3480156102b257600080fd5b506007545b604051908152602001610262565b3480156102d157600080fd5b50610299610856565b61021e6102e8366004613fe0565b610afb565b3480156102f957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610262565b34801561035a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b34801561038d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b3480156103c057600080fd5b506103fd6040518060400160405280600681526020017f302e31322e30000000000000000000000000000000000000000000000000000081525081565b604051610262919061406d565b34801561041657600080fd5b50600754600854610425919082565b60408051928352602083019190915201610262565b34801561044657600080fd5b506103fd610b10565b34801561045b57600080fd5b5061021e61046a3660046140a5565b610b1e565b61021e61047d3660046140de565b610cca565b34801561048e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356102b7565b3480156104ce57600080fd5b506008546102b7565b61021e61147e565b3480156104eb57600080fd5b506001546102b7565b34801561050057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356102b7565b34801561054057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561057357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610262565b3480156105b457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356102b7565b3480156105f457600080fd5b5061024d610603366004614113565b6119b2565b34801561061457600080fd5b506102b761062336600461412c565b611b71565b61021e610636366004613fe0565b611d5b565b34801561064757600080fd5b5061065b610656366004614113565b611d67565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610262565b3480156106d157600080fd5b5060005461024d9067ffffffffffffffff1681565b3480156106f257600080fd5b506102b76107013660046140a5565b60026020526000908152604090205481565b34801561071f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561075257600080fd5b5061021e6107613660046141a7565b611dfe565b34801561077257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024d565b3480156107a557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b3480156107d857600080fd5b5061021e6107e7366004614231565b612433565b3480156107f857600080fd5b50610801612890565b6040516102629392919061425d565b34801561081c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b61021e610851366004614113565b6128f0565b600080600054700100000000000000000000000000000000900460ff16600281111561088457610884613f70565b146108bb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff1661091f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008154811061094b5761094b61428b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610986576001610989565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610a3a57610a3a613f70565b021790556002811115610a4f57610a4f613f70565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae057600080fd5b505af1158015610af4573d6000803e3d6000fd5b5050505090565b610b0782826000610cca565b5050565b905090565b6060610b0b60546020612d0c565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610b83576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610c85576040519150601f19603f3d011682016040523d82523d6000602084013e610c8a565b606091505b5050905080610cc5576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610cf657610cf6613f70565b14610d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610d4257610d4261428b565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610e079083908690612d5e16565b90506000610ea7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610ee95750610ee67f000000000000000000000000000000000000000000000000000000000000000060026142e9565b81145b8015610ef3575084155b15610f2a576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610f84576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610faf7f000000000000000000000000000000000000000000000000000000000000000060016142e9565b8103610fc157610fc186888588612d66565b34610fcb83611b71565b14611002576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061100d886119b2565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82160361107f576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff16156110fd576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b8152602001908152602001600020600180805490506113929190614301565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60065460ff16156114bb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190614318565b9092509050816115cf576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905580367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511611686576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b607a361461169c57639824bdab6000526004601cfd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600080600054700100000000000000000000000000000000900460ff1660028111156119e0576119e0613f70565b14611a17576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611a2c57611a2c61428b565b600091825260208220600590910201805490925063ffffffff90811614611a9b57815460018054909163ffffffff16908110611a6a57611a6a61428b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611ad390700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611ae79067ffffffffffffffff1642614301565b611b06611ac6846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611b1a91906142e9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff8216811015611b6457809450611b68565b8194505b50505050919050565b600080611c10836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611c76576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611c91838361436b565b9050670de0b6b3a76400006000611cc8827f000000000000000000000000000000000000000000000000000000000000000061437f565b90506000611ce6611ce1670de0b6b3a76400008661437f565b612f27565b90506000611cf48484613182565b90506000611d0283836131d1565b90506000611d0f826131ff565b90506000611d2e82611d29670de0b6b3a76400008f61437f565b6133e7565b90506000611d3c8b836131d1565b9050611d48818d61437f565b9f9e505050505050505050505050505050565b610b0782826001610cca565b60018181548110611d7757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611e2a57611e2a613f70565b14611e61576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611e7657611e7661428b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ed57f000000000000000000000000000000000000000000000000000000000000000060016142e9565b611f71826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611fb2576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156120a1576120057f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614301565b6001901b612024846fffffffffffffffffffffffffffffffff16613421565b67ffffffffffffffff1661203891906143bc565b156120755761206c61205d60016fffffffffffffffffffffffffffffffff87166143d0565b865463ffffffff1660006134c7565b60030154612097565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506120cb565b600385015491506120c861205d6fffffffffffffffffffffffffffffffff86166001614401565b90505b600882901b60088a8a6040516120e2929190614435565b6040518091039020901b14612123576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061212e8c6135ab565b9050600061213d836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906121b7908f908f908f908f908a9060040161448e565b6020604051808303816000875af11580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa91906144c8565b6004850154911491506000906002906122a5906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612341896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61234b91906144e1565b6123559190614502565b67ffffffffffffffff16159050811515810361239d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156123f4576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561245f5761245f613f70565b14612496576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806124a5866135da565b935093509350935060006124bb858585856139e9565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190614529565b9050600189036126465773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846125aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561261c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264091906144c8565b50612885565b600289036126725773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84896125aa565b6003890361269e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84876125aa565b600489036127ba5760006126e46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613aa8565b6008546126f191906142e9565b6126fc9060016142e9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561278f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b391906144c8565b5050612885565b60058903612853576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016125fd565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606128e9610b10565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561291c5761291c613f70565b14612953576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106129685761296861428b565b906000526020600020906005020190506000612983836119b2565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821610156129f6576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612a3f576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612a5c57508415155b15612af6578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612a8f5781612aab565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612ab78187613b5d565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612c3e576000858281548110612b2757612b2761428b565b6000918252602080832090910154808352600590915260409091205490915060ff16612b7f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612b9457612b9461428b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612bed575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612c2b576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612c3790614546565b9050612b0b565b50612c8673ffffffffffffffffffffffffffffffffffffffff831615612c645782612c80565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613b5d565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b6000612d856fffffffffffffffffffffffffffffffff84166001614401565b90506000612d95828660016134c7565b9050600086901a8380612e885750612dce60027f00000000000000000000000000000000000000000000000000000000000000006143bc565b6004830154600290612e72906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612e7c9190614502565b67ffffffffffffffff16145b15612ee05760ff811660011480612ea2575060ff81166002145b612edb576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161167d565b612f1e565b60ff811615612f1e576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161167d565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612f8657631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a7640000021582026131bf57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156131ef5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361322d57919050565b680755bf798b4a1bf1e5821261324b5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613418670de0b6b3a7640000836133ff86612f27565b613409919061457e565b613413919061463a565b6131ff565b90505b92915050565b6000806134ae837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080826135105761350b6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613c56565b61352b565b61352b856fffffffffffffffffffffffffffffffff16613e14565b9050600184815481106135405761354061428b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146135a357815460018054909163ffffffff1690811061358e5761358e61428b565b90600052602060002090600502019150613551565b509392505050565b60008060008060006135bc866135da565b93509350935093506135d0848484846139e9565b9695505050505050565b60008060008060008590506000600182815481106135fa576135fa61428b565b600091825260209091206004600590920201908101549091507f0000000000000000000000000000000000000000000000000000000000000000906136d1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613712576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f0000000000000000000000000000000000000000000000000000000000000000906137d9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561385557825463ffffffff1661381f7f000000000000000000000000000000000000000000000000000000000000000060016142e9565b8303613829578391505b6001818154811061383c5761383c61428b565b9060005260206000209060050201935080945050613716565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff166138be6138a9856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156139855760006138f6836fffffffffffffffffffffffffffffffff16613421565b67ffffffffffffffff16111561395957600061393061392860016fffffffffffffffffffffffffffffffff86166143d0565b8960016134c7565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a5061395f9050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506139db565b60006139a76139286fffffffffffffffffffffffffffffffff85166001614401565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103613a4f578282604051602001613a329291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050613aa0565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613b35847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613bad9084906142e9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c4257600080fd5b505af1158015612f1e573d6000803e3d6000fd5b600081613cf5846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613d36576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d3f83613e14565b905081613dde826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161341b57613418613dfb8360016142e9565b6fffffffffffffffffffffffffffffffff831690613ec0565b60008119600183011681613ea8827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613f4d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613fda577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613ff357600080fd5b50508035926020909101359150565b6000815180845260005b818110156140285760208185018101518683018201520161400c565b8181111561403a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006134186020830184614002565b73ffffffffffffffffffffffffffffffffffffffff811681146140a257600080fd5b50565b6000602082840312156140b757600080fd5b81356140c281614080565b9392505050565b803580151581146140d957600080fd5b919050565b6000806000606084860312156140f357600080fd5b833592506020840135915061410a604085016140c9565b90509250925092565b60006020828403121561412557600080fd5b5035919050565b60006020828403121561413e57600080fd5b81356fffffffffffffffffffffffffffffffff811681146140c257600080fd5b60008083601f84011261417057600080fd5b50813567ffffffffffffffff81111561418857600080fd5b6020830191508360208285010111156141a057600080fd5b9250929050565b600080600080600080608087890312156141c057600080fd5b863595506141d0602088016140c9565b9450604087013567ffffffffffffffff808211156141ed57600080fd5b6141f98a838b0161415e565b9096509450606089013591508082111561421257600080fd5b5061421f89828a0161415e565b979a9699509497509295939492505050565b60008060006060848603121561424657600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006142826060830184614002565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156142fc576142fc6142ba565b500190565b600082821015614313576143136142ba565b500390565b6000806040838503121561432b57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261437a5761437a61433c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143b7576143b76142ba565b500290565b6000826143cb576143cb61433c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156143f9576143f96142ba565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561442c5761442c6142ba565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006144a2606083018789614445565b82810360208401526144b5818688614445565b9150508260408301529695505050505050565b6000602082840312156144da57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156143f9576143f96142ba565b600067ffffffffffffffff8084168061451d5761451d61433c565b92169190910692915050565b60006020828403121561453b57600080fd5b81516140c281614080565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614577576145776142ba565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156145bf576145bf6142ba565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156145fa576145fa6142ba565b60008712925087820587128484161615614616576146166142ba565b8785058712818416161561462c5761462c6142ba565b505050929093029392505050565b6000826146495761464961433c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561469d5761469d6142ba565b50059056fea164736f6c634300080f000a"
var FaultDisputeGameDeployedBin = "0x6080604052600436106102175760003560e01c80638b85902b11610126578063d5d44d80116100a7578063ec5e630811610079578063fa24f74311610061578063fa24f743146107ec578063fa315aa914610810578063fdffbb281461084357005b8063ec5e630814610799578063f8f43ff6146107cc57005b8063d5d44d80146106e6578063d6ae3cd514610713578063d8cc1a3c14610746578063e1f0c3761461076657005b8063bd8da956116100f8578063c55cd0c7116100e0578063c55cd0c714610628578063c6f0308c1461063b578063cf09e0d0146106c557005b8063bd8da956146105e8578063c395e1ca1461060857005b80638b85902b146104f45780638d450a9514610534578063bbdc02db14610567578063bcef3b55146105a857005b806354fd4d50116101b0578063632247ea1161018257806370872aa51161016a57806370872aa5146104c25780638129fc1c146104d75780638980e0cc146104df57005b8063632247ea1461046f5780636361506d1461048257005b806354fd4d50146103b457806357da950e1461040a578063609d33341461043a57806360e274641461044f57005b806335fef567116101e957806335fef567146102da57806337b1b229146102ed5780633a7684631461034e5780633fc8cef31461038157005b806319effeb414610220578063200d2ed21461026b57806325fc2ace146102a65780632810e1d6146102c557005b3661021e57005b005b34801561022c57600080fd5b5060005461024d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5060005461029990700100000000000000000000000000000000900460ff1681565b6040516102629190613f54565b3480156102b257600080fd5b506007545b604051908152602001610262565b3480156102d157600080fd5b50610299610856565b61021e6102e8366004613f95565b610afb565b3480156102f957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610262565b34801561035a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b34801561038d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610329565b3480156103c057600080fd5b506103fd6040518060400160405280600681526020017f302e31332e30000000000000000000000000000000000000000000000000000081525081565b6040516102629190614022565b34801561041657600080fd5b50600754600854610425919082565b60408051928352602083019190915201610262565b34801561044657600080fd5b506103fd610b10565b34801561045b57600080fd5b5061021e61046a36600461405a565b610b1e565b61021e61047d366004614093565b610cca565b34801561048e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356102b7565b3480156104ce57600080fd5b506008546102b7565b61021e611477565b3480156104eb57600080fd5b506001546102b7565b34801561050057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356102b7565b34801561054057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561057357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610262565b3480156105b457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356102b7565b3480156105f457600080fd5b5061024d6106033660046140c8565b6119ab565b34801561061457600080fd5b506102b76106233660046140e1565b611b6a565b61021e610636366004613f95565b611d4d565b34801561064757600080fd5b5061065b6106563660046140c8565b611d59565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610262565b3480156106d157600080fd5b5060005461024d9067ffffffffffffffff1681565b3480156106f257600080fd5b506102b761070136600461405a565b60026020526000908152604090205481565b34801561071f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b34801561075257600080fd5b5061021e61076136600461415c565b611df0565b34801561077257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061024d565b3480156107a557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b3480156107d857600080fd5b5061021e6107e73660046141e6565b61241f565b3480156107f857600080fd5b5061080161287c565b60405161026293929190614212565b34801561081c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b7565b61021e6108513660046140c8565b6128dc565b600080600054700100000000000000000000000000000000900460ff16600281111561088457610884613f25565b146108bb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff1661091f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008154811061094b5761094b614240565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610986576001610989565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610a3a57610a3a613f25565b021790556002811115610a4f57610a4f613f25565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae057600080fd5b505af1158015610af4573d6000803e3d6000fd5b5050505090565b610b0782826000610cca565b5050565b905090565b6060610b0b60546020612cf8565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610b83576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610c85576040519150601f19603f3d011682016040523d82523d6000602084013e610c8a565b606091505b5050905080610cc5576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610cf657610cf6613f25565b14610d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610d4257610d42614240565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610e079083908690612d4a16565b90506000610ea7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580610ee25750610edf7f0000000000000000000000000000000000000000000000000000000000000000600261429e565b81145b8015610eec575084155b15610f23576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610f7d576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fa87f0000000000000000000000000000000000000000000000000000000000000000600161429e565b8103610fba57610fba86888588612d52565b34610fc483611b6a565b14610ffb576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611006886119ab565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821603611078576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff16156110f6576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b81526020019081526020016000206001808054905061138b91906142b6565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60065460ff16156114b4576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa158015611568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158c91906142cd565b9092509050816115c8576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905580367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161167f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b607a361461169557639824bdab6000526004601cfd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b15801561192f57600080fd5b505af1158015611943573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600080600054700100000000000000000000000000000000900460ff1660028111156119d9576119d9613f25565b14611a10576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611a2557611a25614240565b600091825260208220600590910201805490925063ffffffff90811614611a9457815460018054909163ffffffff16908110611a6357611a63614240565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611acc90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611ae09067ffffffffffffffff16426142b6565b611aff611abf846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611b13919061429e565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff8216811015611b5d57809450611b61565b8194505b50505050919050565b600080611c09836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611c68576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611c838383614320565b9050670de0b6b3a76400006000611cba827f0000000000000000000000000000000000000000000000000000000000000000614334565b90506000611cd8611cd3670de0b6b3a764000086614334565b612f0c565b90506000611ce68484613167565b90506000611cf483836131b6565b90506000611d01826131e4565b90506000611d2082611d1b670de0b6b3a76400008f614334565b6133cc565b90506000611d2e8b836131b6565b9050611d3a818d614334565b9f9e505050505050505050505050505050565b610b0782826001610cca565b60018181548110611d6957600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611e1c57611e1c613f25565b14611e53576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611e6857611e68614240565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611ec77f0000000000000000000000000000000000000000000000000000000000000000600161429e565b611f63826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614611f9d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561209457611ff07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006142b6565b6001901b61200f846fffffffffffffffffffffffffffffffff16613406565b6fffffffffffffffffffffffffffffffff1661202b9190614371565b156120685761205f61205060016fffffffffffffffffffffffffffffffff8716614385565b865463ffffffff1660006134a5565b6003015461208a565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506120be565b600385015491506120bb6120506fffffffffffffffffffffffffffffffff861660016143b6565b90505b600882901b60088a8a6040516120d59291906143ea565b6040518091039020901b14612116576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121218c613589565b90506000612130836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced32906121aa908f908f908f908f908a90600401614443565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed919061447d565b600485015491149150600090600290612298906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612334896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61233e9190614496565b61234891906144b9565b60ff161590508115158103612389576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156123e0576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561244b5761244b613f25565b14612482576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080612491866135b8565b935093509350935060006124a7858585856139c1565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253a91906144db565b9050600189036126325773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612596367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c919061447d565b50612871565b6002890361265e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612596565b6003890361268a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612596565b600489036127a65760006126d06fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613a80565b6008546126dd919061429e565b6126e890600161429e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f919061447d565b5050612871565b6005890361283f576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016125e9565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606128d5610b10565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561290857612908613f25565b1461293f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061295457612954614240565b90600052602060002090600502019050600061296f836119ab565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff821610156129e2576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612a2b576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612a4857508415155b15612ae2578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612a7b5781612a97565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612aa38187613b2e565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612c2a576000858281548110612b1357612b13614240565b6000918252602080832090910154808352600590915260409091205490915060ff16612b6b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612b8057612b80614240565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612bd9575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612c17576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612c23906144f8565b9050612af7565b50612c7273ffffffffffffffffffffffffffffffffffffffff831615612c505782612c6c565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613b2e565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b6000612d716fffffffffffffffffffffffffffffffff841660016143b6565b90506000612d81828660016134a5565b9050600086901a8380612e6d5750612dba60027f0000000000000000000000000000000000000000000000000000000000000000614371565b6004830154600290612e5e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612e6891906144b9565b60ff16145b15612ec55760ff811660011480612e87575060ff81166002145b612ec0576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611676565b612f03565b60ff811615612f03576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611676565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612f6b57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a7640000021582026131a457637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156131d45763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361321257919050565b680755bf798b4a1bf1e582126132305763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006133fd670de0b6b3a7640000836133e486612f0c565b6133ee9190614530565b6133f891906145ec565b6131e4565b90505b92915050565b600080613493837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826134ee576134e96fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613c27565b613509565b613509856fffffffffffffffffffffffffffffffff16613dd7565b90506001848154811061351e5761351e614240565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461358157815460018054909163ffffffff1690811061356c5761356c614240565b9060005260206000209060050201915061352f565b509392505050565b600080600080600061359a866135b8565b93509350935093506135ae848484846139c1565b9695505050505050565b60008060008060008590506000600182815481106135d8576135d8614240565b600091825260209091206004600590920201908101549091507f0000000000000000000000000000000000000000000000000000000000000000906136af906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116136e9576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f0000000000000000000000000000000000000000000000000000000000000000906137b0906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16925082111561382557825463ffffffff166137ef7f0000000000000000000000000000000000000000000000000000000000000000600161429e565b83036137f9578391505b6001818154811061380c5761380c614240565b90600052602060002090600502019350809450506136ed565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661388e613879856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561395d5760006138c6836fffffffffffffffffffffffffffffffff16613406565b6fffffffffffffffffffffffffffffffff16111561393157600061390861390060016fffffffffffffffffffffffffffffffff8616614385565b8960016134a5565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506139379050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506139b3565b600061397f6139006fffffffffffffffffffffffffffffffff851660016143b6565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff84168103613a27578282604051602001613a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001209050613a78565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613b0d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613b7e90849061429e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613c1357600080fd5b505af1158015612f03573d6000803e3d6000fd5b600081613cc6846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613d00576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d0983613dd7565b905081613da8826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613400576133fd613dbe83600161429e565b6fffffffffffffffffffffffffffffffff831690613e7c565b60008119600183011681613e6b827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080613f09847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613f8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613fa857600080fd5b50508035926020909101359150565b6000815180845260005b81811015613fdd57602081850181015186830182015201613fc1565b81811115613fef576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006133fd6020830184613fb7565b73ffffffffffffffffffffffffffffffffffffffff8116811461405757600080fd5b50565b60006020828403121561406c57600080fd5b813561407781614035565b9392505050565b8035801515811461408e57600080fd5b919050565b6000806000606084860312156140a857600080fd5b83359250602084013591506140bf6040850161407e565b90509250925092565b6000602082840312156140da57600080fd5b5035919050565b6000602082840312156140f357600080fd5b81356fffffffffffffffffffffffffffffffff8116811461407757600080fd5b60008083601f84011261412557600080fd5b50813567ffffffffffffffff81111561413d57600080fd5b60208301915083602082850101111561415557600080fd5b9250929050565b6000806000806000806080878903121561417557600080fd5b863595506141856020880161407e565b9450604087013567ffffffffffffffff808211156141a257600080fd5b6141ae8a838b01614113565b909650945060608901359150808211156141c757600080fd5b506141d489828a01614113565b979a9699509497509295939492505050565b6000806000606084860312156141fb57600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006142376060830184613fb7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156142b1576142b161426f565b500190565b6000828210156142c8576142c861426f565b500390565b600080604083850312156142e057600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261432f5761432f6142f1565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436c5761436c61426f565b500290565b600082614380576143806142f1565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156143ae576143ae61426f565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156143e1576143e161426f565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006144576060830187896143fa565b828103602084015261446a8186886143fa565b9150508260408301529695505050505050565b60006020828403121561448f57600080fd5b5051919050565b600060ff821660ff8416808210156144b0576144b061426f565b90039392505050565b600060ff8316806144cc576144cc6142f1565b8060ff84160691505092915050565b6000602082840312156144ed57600080fd5b815161407781614035565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145295761452961426f565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156145715761457161426f565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156145ac576145ac61426f565b600087129250878205871284841616156145c8576145c861426f565b878505871281841616156145de576145de61426f565b505050929093029392505050565b6000826145fb576145fb6142f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561464f5761464f61426f565b50059056fea164736f6c634300080f000a"
func init() {
......
......@@ -112,8 +112,8 @@
"sourceCodeHash": "0x08f34cec56d58ea6ee7a47b5adcbeca6a68a5dd1daa949330b4bde86c2e605f5"
},
"src/dispute/FaultDisputeGame.sol": {
"initCodeHash": "0x98544bd91d1d777bfcfa0d71b81a9ed75f9feb31536aad934b92dcf16bb21ce7",
"sourceCodeHash": "0x06c7f5206e9c121c5c7fa2e6e114f9a80781025954c830bc7641f3ab0a5b2583"
"initCodeHash": "0xac2ea3948d07f6f441ae3b2cb5f5fc2f0d3f71af97ffc396ffca1ffc1ccd8b21",
"sourceCodeHash": "0xad80ee61719eb611d2f015f71d95e29bea1013a78f1f2861301809ab440bd52b"
},
"src/dispute/weth/DelayedWETH.sol": {
"initCodeHash": "0x7b6ec89eaec09e369426e73161a9c6932223bb1f974377190c3f6f552995da35",
......
......@@ -88,8 +88,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
OutputRoot public startingOutputRoot;
/// @notice Semantic version.
/// @custom:semver 0.12.0
string public constant version = "0.12.0";
/// @custom:semver 0.13.0
string public constant version = "0.13.0";
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
......
......@@ -11,7 +11,7 @@ library LibPosition {
/// @param _depth The depth of the position.
/// @param _indexAtDepth The index at the depth of the position.
/// @return position_ The computed generalized index.
function wrap(uint64 _depth, uint64 _indexAtDepth) internal pure returns (Position position_) {
function wrap(uint8 _depth, uint128 _indexAtDepth) internal pure returns (Position position_) {
assembly {
// gindex = 2^{_depth} + _indexAtDepth
position_ := add(shl(_depth, 1), _indexAtDepth)
......@@ -22,7 +22,7 @@ library LibPosition {
/// @param _position The generalized index to get the `depth` of.
/// @return depth_ The `depth` of the `position` gindex.
/// @custom:attribution Solady <https://github.com/Vectorized/Solady>
function depth(Position _position) internal pure returns (uint64 depth_) {
function depth(Position _position) internal pure returns (uint8 depth_) {
// Return the most significant bit offset, which signifies the depth of the gindex.
assembly {
depth_ := or(depth_, shl(6, lt(0xffffffffffffffff, shr(depth_, _position))))
......@@ -53,7 +53,7 @@ library LibPosition {
/// and the `indexAtDepth` = 0.
/// @param _position The generalized index to get the `indexAtDepth` of.
/// @return indexAtDepth_ The `indexAtDepth` of the `position` gindex.
function indexAtDepth(Position _position) internal pure returns (uint64 indexAtDepth_) {
function indexAtDepth(Position _position) internal pure returns (uint128 indexAtDepth_) {
// Return bits p_{msb-1}...p_{0}. This effectively pulls the 2^{depth} out of the gindex,
// leaving only the `indexAtDepth`.
uint256 msb = depth(_position);
......
......@@ -237,7 +237,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Tests that the bond during the bisection game depths is correct.
function test_getRequiredBond_succeeds() public {
for (uint64 i = 0; i < uint64(gameProxy.splitDepth()); i++) {
for (uint8 i = 0; i < uint8(gameProxy.splitDepth()); i++) {
Position pos = LibPosition.wrap(i, 0);
uint256 bond = gameProxy.getRequiredBond(pos);
......@@ -254,7 +254,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Tests that the bond at a depth greater than the maximum game depth reverts.
function test_getRequiredBond_outOfBounds_reverts() public {
Position pos = LibPosition.wrap(uint64(gameProxy.maxGameDepth() + 1), 0);
Position pos = LibPosition.wrap(uint8(gameProxy.maxGameDepth() + 1), 0);
vm.expectRevert(GameDepthExceeded.selector);
gameProxy.getRequiredBond(pos);
}
......
......@@ -7,24 +7,24 @@ import "src/libraries/DisputeTypes.sol";
/// @notice Tests for `LibPosition`
contract LibPosition_Test is Test {
/// @dev Assumes a MAX depth of 63 for the Position type. Any greater depth can cause overflows.
/// @dev At the lowest level of the tree, this allows for 2 ** 63 leaves. In reality, the max game depth
/// @dev Assumes a MAX depth of 126 for the Position type. Any greater depth can cause overflows.
/// @dev At the lowest level of the tree, this allows for 2 ** 126 leaves. In reality, the max game depth
/// will likely be much lower.
uint8 internal constant MAX_DEPTH = 63;
uint8 internal constant MAX_DEPTH = 126;
/// @dev Arbitrary split depth around half way down the tree.
uint8 internal constant SPLIT_DEPTH = 30;
uint8 internal constant SPLIT_DEPTH = 64;
function boundIndexAtDepth(uint8 _depth, uint64 _indexAtDepth) internal pure returns (uint64) {
function boundIndexAtDepth(uint8 _depth, uint128 _indexAtDepth) internal pure returns (uint128) {
// Index at depth bound: [0, 2 ** _depth-1]
if (_depth > 0) {
return uint64(bound(_indexAtDepth, 0, 2 ** (_depth - 1)));
return uint128(bound(_indexAtDepth, 0, 2 ** (_depth - 1)));
} else {
return 0;
}
}
/// @notice Tests that the `depth` function correctly shifts out the `depth` from a packed `Position` type.
function testFuzz_depth_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_depth_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, 0, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
Position position = LibPosition.wrap(_depth, _indexAtDepth);
......@@ -33,7 +33,7 @@ contract LibPosition_Test is Test {
/// @notice Tests that the `indexAtDepth` function correctly shifts out the `indexAtDepth` from a packed `Position`
/// type.
function testFuzz_indexAtDepth_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_indexAtDepth_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, 0, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
Position position = LibPosition.wrap(_depth, _indexAtDepth);
......@@ -41,19 +41,19 @@ contract LibPosition_Test is Test {
}
/// @notice Tests that the `left` function correctly computes the position of the left child.
function testFuzz_left_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_left_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, 0, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
Position position = LibPosition.wrap(_depth, _indexAtDepth);
Position left = position.left();
assertEq(left.depth(), uint64(_depth) + 1);
assertEq(left.depth(), _depth + 1);
assertEq(left.indexAtDepth(), _indexAtDepth * 2);
}
/// @notice Tests that the `right` function correctly computes the position of the right child.
function testFuzz_right_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_right_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
// Depth bound: [0, 63]
_depth = uint8(bound(_depth, 0, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......@@ -66,7 +66,7 @@ contract LibPosition_Test is Test {
}
/// @notice Tests that the `parent` function correctly computes the position of the parent.
function testFuzz_parent_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_parent_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, 1, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......@@ -79,7 +79,7 @@ contract LibPosition_Test is Test {
/// @notice Tests that the `traceAncestor` function correctly computes the position of the
/// highest ancestor that commits to the same trace index.
function testFuzz_traceAncestor_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_traceAncestor_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, 1, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......@@ -95,7 +95,7 @@ contract LibPosition_Test is Test {
/// @notice Tests that the `traceAncestorBounded` function correctly computes the position of the
/// highest ancestor (below `SPLIT_DEPTH`) that commits to the same trace index.
function testFuzz_traceAncestorBounded_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_traceAncestorBounded_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
_depth = uint8(bound(_depth, SPLIT_DEPTH + 1, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......@@ -116,7 +116,7 @@ contract LibPosition_Test is Test {
/// @notice Tests that the `rightIndex` function correctly computes the deepest, right most index relative
/// to a given position.
function testFuzz_rightIndex_correctness_succeeds(uint64 _maxDepth, uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_rightIndex_correctness_succeeds(uint8 _maxDepth, uint8 _depth, uint128 _indexAtDepth) public {
// Max depth bound: [1, 63]
// The max game depth MUST be at least 1.
_maxDepth = uint8(bound(_maxDepth, 1, MAX_DEPTH));
......@@ -138,7 +138,7 @@ contract LibPosition_Test is Test {
/// @notice Tests that the `attack` function correctly computes the position of the attack relative to
/// a given position.
/// @dev `attack` is an alias for `left`, but we test it separately for completeness.
function testFuzz_attack_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_attack_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
// Depth bound: [0, 63]
_depth = uint8(bound(_depth, 0, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......@@ -154,7 +154,7 @@ contract LibPosition_Test is Test {
/// a given position.
/// @dev A defense can only be given if the position does not belong to the root claim, hence the bound of [1, 127]
/// on the depth.
function testFuzz_defend_correctness_succeeds(uint8 _depth, uint64 _indexAtDepth) public {
function testFuzz_defend_correctness_succeeds(uint8 _depth, uint128 _indexAtDepth) public {
// Depth bound: [1, 63]
_depth = uint8(bound(_depth, 1, MAX_DEPTH));
_indexAtDepth = boundIndexAtDepth(_depth, _indexAtDepth);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment