UNPKG

@uniswap/v4-periphery

Version:

🦄 Peripheral smart contracts for interacting with Uniswap v4

1 lines • 275 kB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_burn_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_clear_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_decreaseLiquidity_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_donate_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_mapRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_increaseLiquidity_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_mint_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_take_suceeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x600c8054600160ff199182168117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e08190526020805465ffffffffffff199081166378ffff8890811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c081905260268054909316909317909155602755602880546001600160a01b0319908116909217905560428054600e90831617905560438054909116614000600160a01b03179055348015610112575f80fd5b5061a01d806101205f395ff3fe6080604052600436106101b2575f3560e01c806385226c81116100e7578063ba414fa611610087578063d56205d711610062578063d56205d7146104d9578063d64c1a9e146104ed578063e20c9f7114610501578063fa7626d414610515575f80fd5b8063ba414fa614610482578063c7b8e15d146104a6578063ca94d41d146104ba575f80fd5b806394f47223116100c257806394f47223146103dc578063b0464fdc146103f0578063b1a73b8a14610404578063b5508aa91461046e575f80fd5b806385226c811461036d578063916a17c61461038e57806393ad73ed146103af575f80fd5b80633e5e3c23116101525780635d685c431161012d5780635d685c43146103105780636335189c1461032457806366d9a9a0146103385780637912538314610359575f80fd5b80633e5e3c23146102af5780633f7286f4146102c3578063542524dd146102d7575f80fd5b80632a74a04a1161018d5780632a74a04a146102115780632ade38801461022557806330e665f01461024657806339cd20131461025a575f80fd5b80630a9254e4146101bd5780631ed7831c146101d357806324ce6292146101fd575f80fd5b366101b957005b5f80fd5b3480156101c8575f80fd5b506101d161052e565b005b3480156101de575f80fd5b506101e76105dc565b6040516101f49190612456565b60405180910390f35b348015610208575f80fd5b506101d1610649565b34801561021c575f80fd5b506101d1610847565b348015610230575f80fd5b506102396109ed565b6040516101f491906124fa565b348015610251575f80fd5b506101d1610b36565b348015610265575f80fd5b5060235460245460255461028792600281810b936301000000909204900b9184565b60408051600295860b81529390940b60208401529282015260608101919091526080016101f4565b3480156102ba575f80fd5b506101e7610cdc565b3480156102ce575f80fd5b506101e7610d47565b3480156102e2575f80fd5b506102eb610db2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b34801561031b575f80fd5b506101d1610dd4565b34801561032f575f80fd5b506101d1610f7a565b348015610343575f80fd5b5061034c6111db565b6040516101f49190612668565b348015610364575f80fd5b506101d1611354565b348015610378575f80fd5b506103816114fa565b6040516101f49190612704565b348015610399575f80fd5b506103a26115c5565b6040516101f49190612779565b3480156103ba575f80fd5b5060205460215460225461028792600281810b936301000000909204900b9184565b3480156103e7575f80fd5b506101d16116c8565b3480156103fb575f80fd5b506103a261186e565b34801561040f575f80fd5b5060265460275460285461043b9260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff16908201526060016101f4565b348015610479575f80fd5b50610381611971565b34801561048d575f80fd5b50610496611a3c565b60405190151581526020016101f4565b3480156104b1575f80fd5b506102eb611b0c565b3480156104c5575f80fd5b506101d16104d436600461283f565b611b1c565b3480156104e4575f80fd5b506101d1611c66565b3480156104f8575f80fd5b506101d1611e0c565b34801561050c575f80fd5b506101e7611fb2565b348015610520575f80fd5b50601f546104969060ff1681565b61053661201d565b602b5460405173ffffffffffffffffffffffffffffffffffffffff9091169061055e9061243c565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610594573d5f803e3d5ffd5b50604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6060601680548060200260200160405190810160405280929190818152602001828054801561063f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610614575b5050505050905090565b5f6106526120a8565b90505f5b600a8110156106835760408051602081019091525f80825261067a91849190612104565b50600101610656565b50604454604080517f38530e94000000000000000000000000000000000000000000000000000000008152905161071d9273ffffffffffffffffffffffffffffffffffffffff16916338530e949160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107179190612861565b5f612318565b5f6107278261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b9061077e908490600401612878565b5f604051808303815f87803b158015610795575f80fd5b505af11580156107a7573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338530e946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083c9190612861565b600a612318565b5050565b5f6108506120a8565b90505f5b600a8110156108825760408051602081019091525f8152610879908390600b90612104565b50600101610854565b50604454604080517fc577eca100000000000000000000000000000000000000000000000000000000815290516108f29273ffffffffffffffffffffffffffffffffffffffff169163c577eca19160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f6108fc8261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90610953908490600401612878565b5f604051808303815f87803b15801561096a575f80fd5b505af115801561097c573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c577eca16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610b2d575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b16578382905f5260205f20018054610a8b9061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab79061288a565b8015610b025780601f10610ad957610100808354040283529160200191610b02565b820191905f5260205f20905b815481529060010190602001808311610ae557829003601f168201915b505050505081526020019060010190610a6e565b505050508152505081526020019060010190610a10565b50505050905090565b5f610b3f6120a8565b90505f5b600a811015610b715760408051602081019091525f8152610b68908390600e90612104565b50600101610b43565b50604454604080517f0ac6d6690000000000000000000000000000000000000000000000000000000081529051610be19273ffffffffffffffffffffffffffffffffffffffff1691630ac6d6699160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f610beb8261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90610c42908490600401612878565b5f604051808303815f87803b158015610c59575f80fd5b505af1158015610c6b573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac6d6696040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b6060601880548060200260200160405190810160405280929190818152602001828054801561063f57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610614575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561063f57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610614575050505050905090565b610dd1600173fffd8963efd1fc6a506488495d951d5263988d26612908565b81565b5f610ddd6120a8565b90505f5b600a811015610e0f5760408051602081019091525f8152610e06908390601790612104565b50600101610de1565b50604454604080517f9659867e0000000000000000000000000000000000000000000000000000000081529051610e7f9273ffffffffffffffffffffffffffffffffffffffff1691639659867e9160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f610e898261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90610ee0908490600401612878565b5f604051808303815f87803b158015610ef7575f80fd5b505af1158015610f09573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639659867e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b5f610f836120a8565b90505f5b600a811015610fb55760408051602081019091525f8152610fac908390600790612104565b50600101610f87565b505f610fc08261239c565b905061102f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eff0d9e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d5f803e3d5ffd5b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634f84885b90611085908490600401612878565b5f604051808303815f87803b15801561109c575f80fd5b505af11580156110ae573d5f803e3d5ffd5b50506040517fdd9fca1200000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f42617365416374696f6e73526f757465725f6d6f636b3130636f6d6d616e64736044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063dd9fca1291506064016020604051808303815f875af1158015611147573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116b9190612861565b50604454604080517f2eff0d9e00000000000000000000000000000000000000000000000000000000815290516108439273ffffffffffffffffffffffffffffffffffffffff1691632eff0d9e9160048083019260209291908290030181865afa158015610818573d5f803e3d5ffd5b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610b2d578382905f5260205f2090600202016040518060400160405290815f8201805461122e9061288a565b80601f016020809104026020016040519081016040528092919081815260200182805461125a9061288a565b80156112a55780601f1061127c576101008083540402835291602001916112a5565b820191905f5260205f20905b81548152906001019060200180831161128857829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561133c57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116112e95790505b505050505081525050815260200190600101906111fe565b5f61135d6120a8565b90505f5b600a81101561138f5760408051602081019091525f8152611386908390601890612104565b50600101611361565b50604454604080517f524773ce00000000000000000000000000000000000000000000000000000000815290516113ff9273ffffffffffffffffffffffffffffffffffffffff169163524773ce9160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f6114098261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90611460908490600401612878565b5f604051808303815f87803b158015611477575f80fd5b505af1158015611489573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663524773ce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610b2d578382905f5260205f2001805461153a9061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546115669061288a565b80156115b15780601f10611588576101008083540402835291602001916115b1565b820191905f5260205f20905b81548152906001019060200180831161159457829003601f168201915b50505050508152602001906001019061151d565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610b2d575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156116b057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161165d5790505b505050505081525050815260200190600101906115e8565b5f6116d16120a8565b90505f5b600a8110156117035760408051602081019091525f81526116fa908390600190612104565b506001016116d5565b50604454604080517ff900bed700000000000000000000000000000000000000000000000000000000815290516117739273ffffffffffffffffffffffffffffffffffffffff169163f900bed79160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f61177d8261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b906117d4908490600401612878565b5f604051808303815f87803b1580156117eb575f80fd5b505af11580156117fd573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f900bed76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610b2d575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561195957602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116119065790505b50505050508152505081526020019060010190611891565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610b2d578382905f5260205f200180546119b19061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd9061288a565b8015611a285780601f106119ff57610100808354040283529160200191611a28565b820191905f5260205f20905b815481529060010190602001808311611a0b57829003601f168201915b505050505081526020019060010190611994565b6008545f9060ff1615611a53575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015611ae1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b059190612861565b1415905090565b610dd16401000276a3600161293a565b6044546040517f8f2336dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301525f921690638f2336dc90602401602060405180830381865afa158015611b8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bae9190612966565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff831601611bfb576108438163deadbeef6123ce565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff831601611c5c5760445461084390829073ffffffffffffffffffffffffffffffffffffffff166123ce565b61084381836123ce565b5f611c6f6120a8565b90505f5b600a811015611ca15760408051602081019091525f8152611c98908390600a90612104565b50600101611c73565b50604454604080517f0854e60d0000000000000000000000000000000000000000000000000000000081529051611d119273ffffffffffffffffffffffffffffffffffffffff1691630854e60d9160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f611d1b8261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90611d72908490600401612878565b5f604051808303815f87803b158015611d89575f80fd5b505af1158015611d9b573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630854e60d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b5f611e156120a8565b90505f5b600a811015611e475760408051602081019091525f8152611e3e908390601390612104565b50600101611e19565b50604454604080517fa7e0231f0000000000000000000000000000000000000000000000000000000081529051611eb79273ffffffffffffffffffffffffffffffffffffffff169163a7e0231f9160048083019260209291908290030181865afa1580156106f3573d5f803e3d5ffd5b5f611ec18261239c565b6044546040517f4f84885b00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690634f84885b90611f18908490600401612878565b5f604051808303815f87803b158015611f2f575f80fd5b505af1158015611f41573d5f803e3d5ffd5b5050505061084360445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7e0231f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d5f803e3d5ffd5b6060601580548060200260200160405190810160405280929190818152602001828054801561063f57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610614575050505050905090565b3060405161202a90612449565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015612060573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051808201825260608082526020808301829052835191820184525f828501818152835284518181528083019095529293919290830191906120fc565b60608152602001906001900390816120e75790505b509052919050565b60408051808201909152606080825260208201525f846020015151600161212b91906129ae565b67ffffffffffffffff81111561214357612143612981565b6040519080825280601f01601f19166020018201604052801561216d576020820181803683370190505b5090505f856020015151600161218391906129ae565b67ffffffffffffffff81111561219b5761219b612981565b6040519080825280602002602001820160405280156121ce57816020015b60608152602001906001900390816121b95790505b5090505f5b600182516121e191906129c1565b81101561228b57866020015181815181106121fe576121fe6129d4565b6020026020010151828281518110612218576122186129d4565b6020026020010181905250865f01518181518110612238576122386129d4565b602001015160f81c60f81b838281518110612255576122556129d4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016121d3565b5083816001835161229c91906129c1565b815181106122ac576122ac6129d4565b60200260200101819052508460f81b82600183516122ca91906129c1565b815181106122da576122da6129d4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053509085526020850152509192915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b5f6040518083038186803b158015612382575f80fd5b505afa158015612394573d5f803e3d5ffd5b505050505050565b6060815f015182602001516040516020016123b8929190612a01565b6040516020818303038152906040529050919050565b6040517f515361f600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440161236c565b610b7780612a9583390190565b616a058061360c83390190565b602080825282518282018190525f918401906040840190835b818110156124a357835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161246f565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612600577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b818110156125e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526125d08486516124ae565b6020958601959094509290920191600101612596565b509197505050602094850194929092019150600101612520565b50929695505050505050565b5f8151808452602084019350602083015f5b8281101561265e5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161261e565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612600577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526126d260408801826124ae565b90506020820151915086810360208801526126ed818361260c565b96505050602093840193919091019060010161268e565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612600577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526127648583516124ae565b9450602093840193919091019060010161272a565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612600577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff81511686526020810151905060406020870152612805604087018261260c565b955050602093840193919091019060010161279f565b73ffffffffffffffffffffffffffffffffffffffff8116811461283c575f80fd5b50565b5f6020828403121561284f575f80fd5b813561285a8161281b565b9392505050565b5f60208284031215612871575f80fd5b5051919050565b602081525f61285a60208301846124ae565b600181811c9082168061289e57607f821691505b6020821081036128d5577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8281168282160390811115612934576129346128db565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115612934576129346128db565b5f60208284031215612976575f80fd5b815161285a8161281b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b80820180821115612934576129346128db565b81810381811115612934576129346128db565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081525f612a1360408301856124ae565b828103602084015280845180835260208301915060208160051b840101602087015f5b83811015612a86577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552612a708383516124ae565b6020958601959093509190910190600101612a36565b50909897505050505050505056fe60a0604052348015600e575f80fd5b50604051610b77380380610b77833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b608051610aeb61008c5f395f81816101bf015281816102a3015261036e0152610aeb5ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806391dd734611610088578063c577eca111610063578063c577eca1146101a7578063d737d0c7146101b0578063dc4c90d3146101ba578063f900bed7146101e1575f80fd5b806391dd7346146101755780639659867e14610195578063a7e0231f1461019e575f80fd5b806338530e94116100c357806338530e94146101165780634f84885b1461011f578063524773ce146101345780638f2336dc1461013d575f80fd5b80630854e60d146100e95780630ac6d669146101055780632eff0d9e1461010e575b5f80fd5b6100f260035481565b6040519081526020015b60405180910390f35b6100f260065481565b6100f25f5481565b6100f260015481565b61013261012d366004610790565b6101ea565b005b6100f260085481565b61015061014b3660046107fe565b610279565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100fc565b610188610183366004610790565b610289565b6040516100fc9190610831565b6100f260075481565b6100f260045481565b6100f260055481565b63deadbeef610150565b6101507f000000000000000000000000000000000000000000000000000000000000000081565b6100f260025481565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c1615610259576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102623361030b565b61026c8282610331565b6102755f61030b565b5050565b5f6102838261040a565b92915050565b60603373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102fa576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610304838361049a565b9392505050565b807f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d50565b6040517f48c8949100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906348c89491906103a59085908590600401610884565b5f604051808303815f875af11580156103c0573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261040591908101906108fd565b505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8316016104525763deadbeef610283565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff831601610496575030919050565b5090565b6060365f365f6104aa87876104d7565b93509350935093506104be8484848461057f565b505060408051602081019091525f815295945050505050565b365f365f604086351860608701945063ffffffff6040880135169350606063ffffffe0601f860116018060208901351882179150808801905063ffffffff8135169250602081019350508160051b805f5b8281101561055757858101358281189490941793860135601f0163ffffffe01690910160209081019101610528565b508085018989011083171561057357633b99b53d5f526004601cfd5b50505092959194509250565b828181146105b9576040517faaad13f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610618575f8686838181106105d6576105d66109ed565b919091013560f81c915061060f9050818686858181106105f8576105f86109ed565b905060200281019061060a9190610a1a565b610620565b506001016105bb565b505050505050565b600b8310156106a7576007830361063b576104058282610701565b8261064a576104058282610718565b6001830361065c576104058282610727565b600a830361066e576104058282610736565b6040517f5cda29d70000000000000000000000000000000000000000000000000000000081526004810184905260240160405180910390fd5b600b83036106b9576104058282610745565b600e83036106cb576104058282610754565b601383036106dd576104058282610763565b601783036106ef576104058282610772565b6018830361066e576104058282610781565b5f8054908061070f83610a82565b91905055505050565b60018054905f61070f83610a82565b60028054905f61070f83610a82565b60038054905f61070f83610a82565b60058054905f61070f83610a82565b60068054905f61070f83610a82565b60048054905f61070f83610a82565b60078054905f61070f83610a82565b60088054905f61070f83610a82565b5f80602083850312156107a1575f80fd5b823567ffffffffffffffff8111156107b7575f80fd5b8301601f810185136107c7575f80fd5b803567ffffffffffffffff8111156107dd575f80fd5b8560208284010111156107ee575f80fd5b6020919091019590945092505050565b5f6020828403121561080e575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610304575f80fd5b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020828403121561090d575f80fd5b815167ffffffffffffffff811115610923575f80fd5b8201601f81018413610933575f80fd5b805167ffffffffffffffff81111561094d5761094d6108d0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156109b9576109b96108d0565b6040528181528282016020018610156109d0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610a4d575f80fd5b83018035915067ffffffffffffffff821115610a67575f80fd5b602001915036819003821315610a7b575f80fd5b9250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ad7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b506001019056fea164736f6c634300081a000a60a0604052348015600e575f80fd5b50604051616a05380380616a05833981016040819052602b91607f565b5f80546001600160a01b0319166001600160a01b038316908117825560405183928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050306080525060aa565b5f60208284031215608e575f80fd5b81516001600160a01b038116811460a3575f80fd5b9392505050565b6080516169436100c25f395f61205f01526169435ff3fe6080604052600436106101f4575f3560e01c80635a6bcfda11610117578063a5841194116100ac578063f135baaa1161007c578063f3cd914c11610062578063f3cd914c14610676578063f5298aca14610695578063fe99049a146106b4575f80fd5b8063f135baaa14610638578063f2fde38b14610657575f80fd5b8063a584119414610595578063b6363cf2146105b4578063dbd035ff146105ed578063f02de3b21461060c575f80fd5b80638161b874116100e75780638161b874146104dc5780638da5cb5b146104fb57806397e8cd4e1461054b5780639bf6645f14610576575f80fd5b80635a6bcfda146104385780636276cbbe1461046c5780637e87ce7d1461049e57806380f0b44c146104bd575f80fd5b80632d7713891161018d57806348c894911161015d57806348c894911461039257806352759651146103be578063558a7297146103dd578063598af9e7146103fc575f80fd5b80632d7713891461031557806335fd631a146103345780633dd45adb14610360578063426a849314610373575f80fd5b806311da60b4116101c857806311da60b4146102b0578063156e29f6146102b85780631e2eaeaf146102d7578063234266d7146102f6575f80fd5b8062fdd58e146101f857806301ffc9a714610241578063095bcdb6146102705780630b0d9c091461028f575b5f80fd5b348015610203575f80fd5b5061022e610212366004615908565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561024c575f80fd5b5061026061025b366004615932565b6106d3565b6040519015158152602001610238565b34801561027b575f80fd5b5061026061028a366004615971565b61076b565b34801561029a575f80fd5b506102ae6102a93660046159a3565b61083f565b005b61022e6108c9565b3480156102c3575f80fd5b506102ae6102d2366004615971565b610927565b3480156102e2575f80fd5b5061022e6102f13660046159e1565b6109ab565b348015610301575f80fd5b5061022e610310366004615b9b565b6109b5565b348015610320575f80fd5b506102ae61032f366004615c00565b610ad9565b34801561033f575f80fd5b5061035361034e366004615c1b565b610bcc565b6040516102389190615c3b565b61022e61036e366004615c00565b610c09565b34801561037e575f80fd5b5061026061038d366004615971565b610c67565b34801561039d575f80fd5b506103b16103ac366004615c7d565b610cd8565b6040516102389190615cbc565b3480156103c9575f80fd5b506102ae6103d8366004615d0f565b610e2a565b3480156103e8575f80fd5b506102606103f7366004615d50565b610ecc565b348015610407575f80fd5b5061022e6104163660046159a3565b600560209081525f938452604080852082529284528284209052825290205481565b348015610443575f80fd5b50610457610452366004615d7a565b610f66565b60408051928352602083019190915201610238565b348015610477575f80fd5b5061048b610486366004615e3b565b611165565b60405160029190910b8152602001610238565b3480156104a9575f80fd5b506102ae6104b8366004615d0f565b6113fc565b3480156104c8575f80fd5b506102ae6104d7366004615908565b6114ed565b3480156104e7575f80fd5b5061022e6104f63660046159a3565b6115ac565b348015610506575f80fd5b505f546105269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610238565b348015610556575f80fd5b5061022e610565366004615c00565b60016020525f908152604090205481565b348015610581575f80fd5b50610353610590366004615e71565b611714565b3480156105a0575f80fd5b506102ae6105af366004615c00565b61174d565b3480156105bf575f80fd5b506102606105ce366004615ee2565b600360209081525f928352604080842090915290825290205460ff1681565b3480156105f8575f80fd5b50610353610607366004615e71565b6117a3565b348015610617575f80fd5b506002546105269073ffffffffffffffffffffffffffffffffffffffff1681565b348015610643575f80fd5b5061022e6106523660046159e1565b6117da565b348015610662575f80fd5b506102ae610671366004615c00565b6117e4565b348015610681575f80fd5b5061022e610690366004615f0e565b6118d3565b3480156106a0575f80fd5b506102ae6106af366004615971565b611a85565b3480156106bf575f80fd5b506102606106ce366004615fcc565b611b09565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061076557507f0f632fb3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061079690849061603c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320868452909152812080548492906107da90849061604f565b9091555050604080513380825260208201859052859273ffffffffffffffffffffffffffffffffffffffff8816927f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991015b60405180910390a45060015b9392505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61088e5761088e7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b6108a38361089b83611cfd565b5f0333611d42565b6108c473ffffffffffffffffffffffffffffffffffffffff84168383611da2565b505050565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610919576109197f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61092233611ebf565b905090565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610976576109767f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b816109848161089b84611cfd565b6109a58473ffffffffffffffffffffffffffffffffffffffff831684611fa8565b50505050565b5f81545f5260205ff35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610a0557610a057f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610a0d612047565b60a086205f818152600660205260409020610a27816120af565b6080880151610a509073ffffffffffffffffffffffffffffffffffffffff1689898989896120f6565b610a5b8188886121d9565b9250610a688884336122d3565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a36080880151610ace9073ffffffffffffffffffffffffffffffffffffffff1689898989896122fb565b505095945050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b85548352602083019250600186019550808310610bec5781810382f35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610c5957610c597f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61076582611ebf565b919050565b335f81815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a79061082c9087815260200190565b60607fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c15610d2a57610d2a7f5090d6c600000000000000000000000000000000000000000000000000000000611cf5565b610d326123d3565b6040517f91dd734600000000000000000000000000000000000000000000000000000000815233906391dd734690610d7090869086906004016160a9565b5f604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610dd091908101906160bc565b90507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c15610e2257610e227f5212cba100000000000000000000000000000000000000000000000000000000611cf5565b6107656123f9565b604082015162ffffff1662800000141580610e755750816080015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610ea357610ea37f30d2164100000000000000000000000000000000000000000000000000000000611cf5565b610eb18162ffffff1661241e565b60a082205f8181526006602052604090206108c4908361245d565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f807fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610fb757610fb77f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610fbf612047565b60a086205f818152600660205260409020610fd9816120af565b60808801516110019073ffffffffffffffffffffffffffffffffffffffff16898989896124b6565b5f6110756040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a5f015160020b81526020018a6020015160020b81526020016110528b60400151612677565b600f0b81526060808d015160020b60208301528b015160409091015283906126ac565b945090506110838185612af1565b945050503373ffffffffffffffffffffffffffffffffffffffff16817ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec885f015189602001518a604001518b606001516040516111019493929190600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f906111359073ffffffffffffffffffffffffffffffffffffffff16898987878b8b612b24565b9094509050801561114f5761114f88828a608001516122d3565b61115a8885336122d3565b505094509492505050565b5f61116e612047565b6060830151617fff60029190910b13156111b25760608301516111b2907fb70024f80000000000000000000000000000000000000000000000000000000090612cfb565b600160020b836060015160020b12156111f55760608301516111f5907fe9e905880000000000000000000000000000000000000000000000000000000090612cfb565b8251602084015173ffffffffffffffffffffffffffffffffffffffff90811691161061124d578251602084015161124d917f6e6c98300000000000000000000000000000000000000000000000000000000091612d0a565b61127e8360400151846080015173ffffffffffffffffffffffffffffffffffffffff16612d4d90919063ffffffff16565b6112b25760808301516112b2907fe65af6a00000000000000000000000000000000000000000000000000000000090612e1b565b5f6112c5846040015162ffffff16612e3d565b60808501519091506112ee9073ffffffffffffffffffffffffffffffffffffffff168585612e62565b60a084205f81815260066020526040902061130a908584612f35565b9250846020015173ffffffffffffffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff16827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a6040516113c595949392919062ffffff959095168552600293840b602086015273ffffffffffffffffffffffffffffffffffffffff928316604086015291166060840152900b608082015260a00190565b60405180910390a460808501516113f49073ffffffffffffffffffffffffffffffffffffffff16868686612fed565b505092915050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611444576114447f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b6103e9610fff821610623e900062fff0008316101661148c5761148c7fa7abe2f70000000000000000000000000000000000000000000000000000000062ffffff8316612e1b565b60a082206114ae826114a8835f90815260066020526040902090565b906130c2565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61153c5761153c7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b335f90815273ffffffffffffffffffffffffffffffffffffffff8316602052604081205c9061156a83611cfd565b90508181600f0b1461159f5761159f7fbda73abf00000000000000000000000000000000000000000000000000000000611cf5565b6109a584825f0333611d42565b6002545f9073ffffffffffffffffffffffffffffffffffffffff1633146115f6576115f67f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b73ffffffffffffffffffffffffffffffffffffffff831615158015611654575073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c8116908416145b15611682576116827fc79e594800000000000000000000000000000000000000000000000000000000611cf5565b811561168e57816116b4565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600160205260409020545b73ffffffffffffffffffffffffffffffffffffffff84165f908152600160205260408120805492935083929091906116ed90849061603c565b90915550610838905073ffffffffffffffffffffffffffffffffffffffff84168583611da2565b606060405180602082528360208301526040820191508360051b8201855b80355c845260209384019301818410611732575b5081810382f35b73ffffffffffffffffffffffffffffffffffffffff811661177357611770613116565b50565b5f6117938273ffffffffffffffffffffffffffffffffffffffff1661313b565b905061179f82826131ea565b5050565b606060405180602082528360208301526040820191508360051b820