diff --git a/v2/package.json b/v2/package.json index 37f123c1..4dd997d6 100644 --- a/v2/package.json +++ b/v2/package.json @@ -13,7 +13,7 @@ "test": "forge clean && forge test -vvv", "coverage": "forge clean && forge coverage --report lcov", "typechain": "npx typechain --target ethers-v6 \"out/**/!(*.t|test).sol/!(*.abi).json\" --out-dir typechain-types", - "generate": "forge clean && forge build && ./scripts/generate_go.sh || true && yarn lint:fix && forge fmt && yarn typechain" + "generate": "forge clean && forge build && forge fmt && ./scripts/generate_go.sh || true && yarn lint:fix && yarn typechain" }, "devDependencies": { "@eslint/js": "^9.7.0", diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 3299c003..16bd9024 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -264,12 +264,12 @@ func (_ERC20Custody *ERC20CustodyCallerSession) PAUSERROLE() ([32]byte, error) { return _ERC20Custody.Contract.PAUSERROLE(&_ERC20Custody.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20Custody *ERC20CustodyCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ERC20Custody.contract.Call(opts, &out, "TSS_ROLE") + err := _ERC20Custody.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -281,18 +281,18 @@ func (_ERC20Custody *ERC20CustodyCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20Custody *ERC20CustodySession) TSSROLE() ([32]byte, error) { - return _ERC20Custody.Contract.TSSROLE(&_ERC20Custody.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodySession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20Custody.Contract.WITHDRAWERROLE(&_ERC20Custody.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20Custody *ERC20CustodyCallerSession) TSSROLE() ([32]byte, error) { - return _ERC20Custody.Contract.TSSROLE(&_ERC20Custody.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20Custody.Contract.WITHDRAWERROLE(&_ERC20Custody.CallOpts) } // Gateway is a free data retrieval call binding the contract method 0x116191b6. diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 991fc4a6..4e6fce27 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a783c78911610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a783c7891461032c578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806391d14854146102de578063a217fddf1461032457600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b6101846102ec3660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b61021c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea264697066735822122057430c05e808c93ad08f23c8558fedb52efa4d67cf0a57b2dd98e821ae51b67a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a217fddf1461034b578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806385f438c1146102de57806391d148541461030557600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b61021c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103133660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea2646970667358221220e3eceeff6045b5584ad5b26814ad7e9728c8428c7219e4a4930ed3899cab596964736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. @@ -264,12 +264,12 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) PAUSERROLE return _ERC20CustodyEchidnaTest.Contract.PAUSERROLE(&_ERC20CustodyEchidnaTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "TSS_ROLE") + err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -281,18 +281,18 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) TSSROLE(opts *bin } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) TSSROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.TSSROLE(&_ERC20CustodyEchidnaTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyEchidnaTest.Contract.WITHDRAWERROLE(&_ERC20CustodyEchidnaTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TSSROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.TSSROLE(&_ERC20CustodyEchidnaTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyEchidnaTest.Contract.WITHDRAWERROLE(&_ERC20CustodyEchidnaTest.CallOpts) } // EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index 6df02c4e..32a32fa6 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -32,7 +32,7 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212209a50a0580be351f844bf8c2e4e16bea016eb437abddf87869636be59b9cefee264736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212201821442f44389baeb888640e13de33662eed4aff4f3c0ea195d55f55d8f2920864736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 4562889f..af1ce1ad 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061b7c8806100436000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063e20c9f7111610066578063e20c9f711461027b578063f96c02df14610283578063fa7626d41461028b57600080fd5b8063ba414fa614610253578063bb93f11e1461026b578063c13d738f1461027357600080fd5b8063aa030c1c116100bd578063aa030c1c1461023b578063b0464fdc14610243578063b5508aa91461024b57600080fd5b8063916a17c61461021e5780639fd1e5971461023357600080fd5b806330f7c04f1161013a5780636459542a116101145780636459542a146101ec57806366d9a9a0146101f457806385226c811461020957600080fd5b806330f7c04f146101d45780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b80630a9254e41161016b5780630a9254e4146101995780631ed7831c146101a15780632ade3880146101bf57600080fd5b806306978ca3146101875780630724d8e314610191575b600080fd5b61018f610298565b005b61018f6103c5565b61018f61057c565b6101a9610cb3565b6040516101b691906168aa565b60405180910390f35b6101c7610d15565b6040516101b69190616946565b61018f610e57565b6101a96112c4565b6101a9611324565b61018f611384565b6101fc611781565b6040516101b69190616aac565b610211611903565b6040516101b69190616b4a565b6102266119d3565b6040516101b69190616bc1565b61018f611ace565b61018f611cea565b610226611ecf565b610211611fca565b61025b61209a565b60405190151581526020016101b6565b61018f61216e565b61018f612308565b6101a96124b7565b61018f612517565b601f5461025b9060ff1681565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561032e57600080fd5b505af1158015610342573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024016000604051808303818588803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050505050565b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561053b57600080fd5b505af115801561054f573d6000803e3d6000fd5b50506027546001600160a01b0316319250610577915061057190508484616c87565b826126b9565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105ce906167ca565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610653573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610698906167ca565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561071c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261080d919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052612738565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610899906167d7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108d5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610930906167e4565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610974573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610d0b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ced575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e37578382906000526020600020018054610daa90616c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690616c9a565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b505050505081526020019060010190610d8b565b505050508152505081526020019060010190610d39565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190616ce7565b9050610ef46000826126b9565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926110f1928992909116908790616d22565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361115293908216928992909116908790600401616d4a565b600060405180830381600087803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190616ce7565b905061121c84826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190616ce7565b90506112bd856028546105719190616d81565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190616ce7565b90506114216000826126b9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190616ce7565b90506116e083826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190616ce7565b9050610cad846028546105719190616d81565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002090600202016040518060400160405290816000820180546117d890616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461180490616c9a565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118985790505b505050505081525050815260200190600101906117a5565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461194690616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461197290616c9a565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081526020019060010190611927565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611ab657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a635790505b505050505081525050815260200190600101906119f7565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490611c419087906000908790616d22565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d928792611c9b92909116908690600401616d94565b6000604051808303818588803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b50506027546001600160a01b0316319250610cad915061057190508585616c87565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde390611e4a908590616db6565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ea1929116908590600401616d94565b600060405180830381600087803b158015611ebb57600080fd5b505af11580156112bd573d6000803e3d6000fd5b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611fb257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f5f5790505b50505050508152505081526020019060010190611ef3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461200d90616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461203990616c9a565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b505050505081526020019060010190611fee565b60085460009060ff16156120b2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190616ce7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906122659060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561227f57600080fd5b505af1158015612293573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506122ee9392831692889216908790600401616d4a565b600060405180830381600087803b1580156103a957600080fd5b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906123ff9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d935086926124819216908690600401616d94565b6000604051808303818588803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561258a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ae9190616d00565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ea1565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561272457600080fd5b505afa1580156103bd573d6000803e3d6000fd5b60006127426167f1565b61274d848483612757565b9150505b92915050565b60008061276485846127d2565b90506127c76040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016127b2929190616d94565b604051602081830303815290604052856127de565b9150505b9392505050565b60006127cb838361280c565b60c08101515160009015612802576127fb84848460c00151612827565b90506127cb565b6127fb84846129cd565b60006128188383612ab8565b6127cb838360200151846127de565b600080612832612ac8565b905060006128408683612b9b565b905060006128578260600151836020015185613041565b9050600061286783838989613253565b90506000612874826140d0565b602081015181519192509060030b156128e75789826040015160405160200161289e929190616dc9565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526128de91600401616db6565b60405180910390fd5b600061292a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161429f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061297d908490600401616db6565b602060405180830381865afa15801561299a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129be9190616e4a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590612a22908790600401616db6565b600060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a679190810190616f5b565b90506000612a958285604051602001612a81929190616f90565b60405160208183030381529060405261449f565b90506001600160a01b03811661274d57848460405160200161289e929190616fbf565b612ac4828260006144b2565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90612b4f90849060040161706a565b600060405180830381865afa158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9491908101906170b1565b9250505090565b612bcd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050612c186040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b612c21856145b5565b60208201526000612c318661499a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c9b91908101906170b1565b86838560200151604051602001612cb594939291906170fa565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190612d0d908590600401616db6565b600060405180830381865afa158015612d2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5291908101906170b1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690612d9a9084906004016171fe565b602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190616d00565b612df0578160405160200161289e9190617250565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612e359084906004016172e2565b600060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e7a91908101906170b1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690612ec1908490600401617334565b602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190616d00565b15612f97576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612f4c908490600401617334565b600060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f9191908101906170b1565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001612fbc9190617386565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612fe89291906173f2565b600060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261302d91908101906170b1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161305d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106130bd576130bd617417565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061311157613111617417565b60200260200101819052508460405160200161312d9190617446565b6040516020818303038152906040528160028151811061314f5761314f617417565b60200260200101819052508260405160200161316b91906174b2565b6040516020818303038152906040528160038151811061318d5761318d617417565b602002602001018190525060006131a3826140d0565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506132349060408051808201825260008082526020918201528151808301909252845182528085019082015290614c1d565b613249578560405160200161289e91906174f3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156132a3565b511590565b6134175782602001511561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016128de565b8260c0015115613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016128de565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161343057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061348b90617584565b935060ff16815181106134a0576134a0617417565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016134f191906175a3565b60405160208183030381529060405282828061350c90617584565b935060ff168151811061352157613521617417565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061356e90617584565b935060ff168151811061358357613583617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806135d090617584565b935060ff16815181106135e5576135e5617417565b6020026020010181905250876020015182828061360190617584565b935060ff168151811061361657613616617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061366390617584565b935060ff168151811061367857613678617417565b60209081029190910101528751828261369081617584565b935060ff16815181106136a5576136a5617417565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806136f290617584565b935060ff168151811061370757613707617417565b602002602001018190525061371b46614c7e565b828261372681617584565b935060ff168151811061373b5761373b617417565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061378890617584565b935060ff168151811061379d5761379d617417565b6020026020010181905250868282806137b590617584565b935060ff16815181106137ca576137ca617417565b60209081029190910101528551156138f15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261381b81617584565b935060ff168151811061383057613830617417565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90613880908990600401616db6565b600060405180830381865afa15801561389d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138c591908101906170b1565b82826138d081617584565b935060ff16815181106138e5576138e5617417565b60200260200101819052505b8460200151156139c15760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261393a81617584565b935060ff168151811061394f5761394f617417565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061399c90617584565b935060ff16815181106139b1576139b1617417565b6020026020010181905250613b88565b6139f961329e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b613a8c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613a3c81617584565b935060ff1681518110613a5157613a51617417565b60200260200101819052508460a00151604051602001613a719190617446565b60405160208183030381529060405282828061399c90617584565b8460c00151158015613acf575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152613acd90511590565b155b15613b885760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613b1381617584565b935060ff1681518110613b2857613b28617417565b6020026020010181905250613b3c88614d1e565b604051602001613b4c9190617446565b604051602081830303815290604052828280613b6790617584565b935060ff1681518110613b7c57613b7c617417565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152613bbc90511590565b613c515760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282613bff81617584565b935060ff1681518110613c1457613c14617417565b60200260200101819052508460400151828280613c3090617584565b935060ff1681518110613c4557613c45617417565b60200260200101819052505b606085015115613d725760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282613c9a81617584565b935060ff1681518110613caf57613caf617417565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613d1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d4691908101906170b1565b8282613d5181617584565b935060ff1681518110613d6657613d66617417565b60200260200101819052505b60e08501515115613e195760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282613dbc81617584565b935060ff1681518110613dd157613dd1617417565b6020026020010181905250613ded8560e0015160000151614c7e565b8282613df881617584565b935060ff1681518110613e0d57613e0d617417565b60200260200101819052505b60e08501516020015115613ec35760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282613e6681617584565b935060ff1681518110613e7b57613e7b617417565b6020026020010181905250613e978560e0015160200151614c7e565b8282613ea281617584565b935060ff1681518110613eb757613eb7617417565b60200260200101819052505b60e08501516040015115613f6d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282613f1081617584565b935060ff1681518110613f2557613f25617417565b6020026020010181905250613f418560e0015160400151614c7e565b8282613f4c81617584565b935060ff1681518110613f6157613f61617417565b60200260200101819052505b60e085015160600151156140175760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282613fba81617584565b935060ff1681518110613fcf57613fcf617417565b6020026020010181905250613feb8560e0015160600151614c7e565b8282613ff681617584565b935060ff168151811061400b5761400b617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561403557614035616e73565b60405190808252806020026020018201604052801561406857816020015b60608152602001906001900390816140535790505b50905060005b8260ff168160ff1610156140c157838160ff168151811061409157614091617417565b6020026020010151828260ff16815181106140ae576140ae617417565b602090810291909101015260010161406e565b5093505050505b949350505050565b6140f76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161417d9186910161760e565b600060405180830381865afa15801561419a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c291908101906170b1565b905060006141d0868361580d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016142009190616b4a565b6000604051808303816000875af115801561421f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142479190810190617655565b805190915060030b158015906142605750602081015151155b801561426f5750604081015151155b15613249578160008151811061428757614287617417565b602002602001015160405160200161289e919061770b565b606060006142d48560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061430b9082905b90615962565b15614468576000614388826143828461437c61434e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90615989565b906159eb565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143ec908290615962565b1561445657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614453905b8290615a70565b90505b61445f81615a96565b925050506127cb565b821561448157848460405160200161289e9291906178f7565b50506040805160208101909152600081526127cb565b509392505050565b6000808251602084016000f09392505050565b8160a00151156144c157505050565b60006144ce848484615aff565b905060006144db826140d0565b602081015181519192509060030b1580156145775750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790604080518082018252600080825260209182015281518083019092528451825280850190820152614305565b1561458457505050505050565b604082015151156145a457816040015160405160200161289e919061799e565b8060405160200161289e91906179fc565b606060006145ea8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061464f905b8290614c1d565b156146be57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b990839061609a565b615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614720905b8290616124565b6001036147ed57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147869061444c565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9905b8390615a70565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261484c90614648565b1561498357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906148b49083906161be565b9050600081600183516148c79190616d81565b815181106148d7576148d7617417565b6020026020010151905061497a6146b961494d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061609a565b95945050505050565b8260405160200161289e9190617a67565b50919050565b606060006149cf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614a3190614648565b15614a3f576127cb81615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a9e90614719565b600103614b0857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9906147e6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614648565b1561498357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614bcf9083906161be565b9050600181511115614c0b578060028251614bea9190616d81565b81518110614bfa57614bfa617417565b602002602001015192505050919050565b508260405160200161289e9190617a67565b805182516000911115614c3257506000612751565b81518351602085015160009291614c4891616c87565b614c529190616d81565b905082602001518103614c69576001915050612751565b82516020840151819020912014905092915050565b60606000614c8b83616263565b600101905060008167ffffffffffffffff811115614cab57614cab616e73565b6040519080825280601f01601f191660200182016040528015614cd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614cdf57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614daa905b8290616345565b15614dea57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4990614da3565b15614e8957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee890614da3565b15614f2857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8790614da3565b80614fec5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614fec90614da3565b1561502c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508b90614da3565b806150f05750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526150f090614da3565b1561513057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261518f90614da3565b806151f45750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f490614da3565b1561523457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261529390614da3565b806152f85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152f890614da3565b1561533857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539790614da3565b156153d757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261543690614da3565b1561547657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d590614da3565b1561551557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261557490614da3565b156155b457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261561390614da3565b1561565357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156b290614da3565b806157175750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261571790614da3565b1561575757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157b690614da3565b156157f657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161289e9290602001617b45565b60608060005b8451811015615898578185828151811061582f5761582f617417565b6020026020010151604051602001615848929190616f90565b6040516020818303038152906040529150600185516158679190616d81565b8114615890578160405160200161587e9190617cae565b60405160208183030381529060405291505b600101615813565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816158b157905050905083816000815181106158dc576158dc617417565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061593057615930617417565b6020026020010181905250818160028151811061594f5761594f617417565b6020908102919091010152949350505050565b60208083015183518351928401516000936159809291849190616359565b14159392505050565b604080518082019091526000808252602082015260006159bb846000015185602001518560000151866020015161646a565b90508360200151816159cd9190616d81565b845185906159dc908390616d81565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615a10575081612751565b6020808301519084015160019114615a375750815160208481015190840151829020919020145b8015615a6857825184518590615a4e908390616d81565b9052508251602085018051615a64908390616c87565b9052505b509192915050565b6040805180820190915260008082526020820152615a8f83838361658a565b5092915050565b60606000826000015167ffffffffffffffff811115615ab757615ab7616e73565b6040519080825280601f01601f191660200182016040528015615ae1576020820181803683370190505b5090506000602082019050615a8f8185602001518660000151616635565b60606000615b0b612ac8565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081615b2857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b8390617584565b935060ff1681518110615b9857615b98617417565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615be99190617cef565b604051602081830303815290604052828280615c0490617584565b935060ff1681518110615c1957615c19617417565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280615c6690617584565b935060ff1681518110615c7b57615c7b617417565b602002602001018190525082604051602001615c9791906174b2565b604051602081830303815290604052828280615cb290617584565b935060ff1681518110615cc757615cc7617417565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280615d1490617584565b935060ff1681518110615d2957615d29617417565b6020026020010181905250615d3e87846166af565b8282615d4981617584565b935060ff1681518110615d5e57615d5e617417565b602090810291909101015285515115615e0a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282615db081617584565b935060ff1681518110615dc557615dc5617417565b6020026020010181905250615dde8660000151846166af565b8282615de981617584565b935060ff1681518110615dfe57615dfe617417565b60200260200101819052505b856080015115615e785760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282615e5381617584565b935060ff1681518110615e6857615e68617417565b6020026020010181905250615ede565b8415615ede5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282615ebd81617584565b935060ff1681518110615ed257615ed2617417565b60200260200101819052505b60408601515115615f7a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282615f2881617584565b935060ff1681518110615f3d57615f3d617417565b60200260200101819052508560400151828280615f5990617584565b935060ff1681518110615f6e57615f6e617417565b60200260200101819052505b856060015115615fe45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615fc381617584565b935060ff1681518110615fd857615fd8617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561600257616002616e73565b60405190808252806020026020018201604052801561603557816020015b60608152602001906001900390816160205790505b50905060005b8260ff168160ff16101561608e57838160ff168151811061605e5761605e617417565b6020026020010151828260ff168151811061607b5761607b617417565b602090810291909101015260010161603b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156160bf575081612751565b815183516020850151600092916160d591616c87565b6160df9190616d81565b60208401519091506001908214616100575082516020840151819020908220145b801561611b57835185518690616117908390616d81565b9052505b50929392505050565b6000808260000151616148856000015186602001518660000151876020015161646a565b6161529190616c87565b90505b835160208501516161669190616c87565b8111615a8f578161617681617d34565b92505082600001516161ad8560200151836161919190616d81565b865161619d9190616d81565b838660000151876020015161646a565b6161b79190616c87565b9050616155565b606060006161cc8484616124565b6161d7906001616c87565b67ffffffffffffffff8111156161ef576161ef616e73565b60405190808252806020026020018201604052801561622257816020015b606081526020019060019003908161620d5790505b50905060005b81518110156144975761623e6146b98686615a70565b82828151811061625057616250617417565b6020908102919091010152600101616228565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106162ac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106162d8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106162f657662386f26fc10000830492506010015b6305f5e100831061630e576305f5e100830492506008015b612710831061632257612710830492506004015b60648310616334576064830492506002015b600a83106127515760010192915050565b600061635183836166ef565b159392505050565b600080858411616460576020841161640c57600084156163a4576001616380866020616d81565b61638b906008617d4e565b616396906002617e4c565b6163a09190616d81565b1990505b83518116856163b38989616c87565b6163bd9190616d81565b805190935082165b8181146163f7578784116163df57879450505050506140c8565b836163e981617e58565b9450508284511690506163c5565b6164018785616c87565b9450505050506140c8565b8383206164198588616d81565b6164239087616c87565b91505b85821061645e5784822080820361644b576164418684616c87565b93505050506140c8565b616456600184616d81565b925050616426565b505b5092949350505050565b60008381868511616575576020851161652457600085156164b6576001616492876020616d81565b61649d906008617d4e565b6164a8906002617e4c565b6164b29190616d81565b1990505b845181166000876164c78b8b616c87565b6164d19190616d81565b855190915083165b828114616516578186106164fe576164f18b8b616c87565b96505050505050506140c8565b8561650881617d34565b9650508386511690506164d9565b8596505050505050506140c8565b508383206000905b6165368689616d81565b82116165735785832080820361655257839450505050506140c8565b61655d600185616c87565b935050818061656b90617d34565b92505061652c565b505b61657f8787616c87565b979650505050505050565b604080518082019091526000808252602082015260006165bc856000015186602001518660000151876020015161646a565b6020808701805191860191909152519091506165d89082616d81565b8352845160208601516165eb9190616c87565b81036165fa576000855261662c565b835183516166089190616c87565b85518690616617908390616d81565b90525083516166269082616c87565b60208601525b50909392505050565b6020811061666d578151835261664c602084616c87565b9250616659602083616c87565b9150616666602082616d81565b9050616635565b600019811561669c576001616683836020616d81565b61668f90610100617e4c565b6166999190616d81565b90505b9151835183169219169190911790915250565b606060006166bd8484612b9b565b80516020808301516040519394506166d793909101617e6f565b60405160208183030381529060405291505092915050565b8151815160009190811115616702575081515b6020808501519084015160005b838110156167bb578251825180821461678b57600019602087101561676a5760018461673c896020616d81565b6167469190616c87565b616751906008617d4e565b61675c906002617e4c565b6167669190616d81565b1990505b81811683821681810391146167885797506127519650505050505050565b50505b616796602086616c87565b94506167a3602085616c87565b935050506020816167b49190616c87565b905061670f565b50845186516132499190617ec7565b610c9f80617ee883390190565b6113e280618b8783390190565b61182a80619f6983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001616834616839565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016168346040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156168eb5783516001600160a01b03168352602093840193909201916001016168c4565b509095945050505050565b60005b838110156169115781810151838201526020016168f9565b50506000910152565b600081518084526169328160208601602086016168f6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616a28577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352616a1284865161691a565b60209586019590945092909201916001016169d8565b50919750505060209485019492909201915060010161696e565b50929695505050505050565b600081518084526020840193506020830160005b82811015616aa25781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101616a62565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616b18604088018261691a565b9050602082015191508681036020880152616b338183616a4e565b965050506020938401939190910190600101616ad4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616bac85835161691a565b94506020938401939190910190600101616b72565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152616c426040870182616a4e565b9550506020938401939190910190600101616be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561275157612751616c58565b600181811c90821680616cae57607f821691505b602082108103614994577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215616cf957600080fd5b5051919050565b600060208284031215616d1257600080fd5b815180151581146127cb57600080fd5b8381526001600160a01b038316602082015260606040820152600061497a606083018461691a565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613249608083018461691a565b8181038181111561275157612751616c58565b6001600160a01b03831681526040602082015260006140c8604083018461691a565b6020815260006127cb602083018461691a565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616e0181601a8501602088016168f6565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351616e3e81601c8401602088016168f6565b01601c01949350505050565b600060208284031215616e5c57600080fd5b81516001600160a01b03811681146127cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715616ec557616ec5616e73565b60405290565b60008067ffffffffffffffff841115616ee657616ee6616e73565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715616f1557616f15616e73565b604052838152905080828401851015616f2d57600080fd5b6144978460208301856168f6565b600082601f830112616f4c57600080fd5b6127cb83835160208501616ecb565b600060208284031215616f6d57600080fd5b815167ffffffffffffffff811115616f8457600080fd5b61274d84828501616f3b565b60008351616fa28184602088016168f6565b835190830190616fb68183602088016168f6565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616ff781601a8501602088016168f6565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516170348160338401602088016168f6565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006127cb608083018461691a565b6000602082840312156170c357600080fd5b815167ffffffffffffffff8111156170da57600080fd5b8201601f810184136170eb57600080fd5b61274d84825160208401616ecb565b6000855161710c818460208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617146816001840160208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516171848160028401602089016168f6565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516171c68160028401602088016168f6565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617211604083018461691a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161728881601f8501602087016168f6565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006172f5604083018461691a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617347604083018461691a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516173be8160148501602087016168f6565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617405604083018561691a565b82810360208401526127c7818561691a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161747e8160018501602087016168f6565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516174c48184602087016168f6565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161757781604b8501602087016168f6565b91909101604b0192915050565b600060ff821660ff810361759a5761759a616c58565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006127cb608083018461691a565b60006020828403121561766757600080fd5b815167ffffffffffffffff81111561767e57600080fd5b82016060818503121561769057600080fd5b617698616ea2565b81518060030b81146176a957600080fd5b8152602082015167ffffffffffffffff8111156176c557600080fd5b6176d186828501616f3b565b602083015250604082015167ffffffffffffffff8111156176f157600080fd5b6176fd86828501616f3b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516177698160218501602087016168f6565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516179558160218501602088016168f6565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161799281602e8401602088016168f6565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251617a5a8160228501602087016168f6565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251617a9f81600e8501602087016168f6565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617b7d8160188501602088016168f6565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351617bba81601c8401602088016168f6565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251617cc08184602087016168f6565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251617d2781601c8501602087016168f6565b91909101601c0192915050565b60006000198203617d4757617d47616c58565b5060010190565b808202811582820484141761275157612751616c58565b6001815b6001841115617da057808504811115617d8457617d84616c58565b6001841615617d9257908102905b60019390931c928002617d69565b935093915050565b600082617db757506001612751565b81617dc457506000612751565b8160018114617dda5760028114617de457617e00565b6001915050612751565b60ff841115617df557617df5616c58565b50506001821b612751565b5060208310610133831016604e8410600b8410161715617e23575081810a612751565b617e306000198484617d65565b8060001904821115617e4457617e44616c58565b029392505050565b60006127cb8383617da8565b600081617e6757617e67616c58565b506000190190565b60008351617e818184602088016168f6565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351617ebb8160018401602088016168f6565b01600101949350505050565b8181036000831280158383131683831282161715615a8f57615a8f616c5856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a0033a26469706673582212203b88a608f9590090edd029fa3dcf1053c0efb8c633761769366b6a9ebf1da63464736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061b7c8806100436000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063e20c9f7111610066578063e20c9f711461027b578063f96c02df14610283578063fa7626d41461028b57600080fd5b8063ba414fa614610253578063bb93f11e1461026b578063c13d738f1461027357600080fd5b8063aa030c1c116100bd578063aa030c1c1461023b578063b0464fdc14610243578063b5508aa91461024b57600080fd5b8063916a17c61461021e5780639fd1e5971461023357600080fd5b806330f7c04f1161013a5780636459542a116101145780636459542a146101ec57806366d9a9a0146101f457806385226c811461020957600080fd5b806330f7c04f146101d45780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b80630a9254e41161016b5780630a9254e4146101995780631ed7831c146101a15780632ade3880146101bf57600080fd5b806306978ca3146101875780630724d8e314610191575b600080fd5b61018f610298565b005b61018f6103c5565b61018f61057c565b6101a9610cb3565b6040516101b691906168aa565b60405180910390f35b6101c7610d15565b6040516101b69190616946565b61018f610e57565b6101a96112c4565b6101a9611324565b61018f611384565b6101fc611781565b6040516101b69190616aac565b610211611903565b6040516101b69190616b4a565b6102266119d3565b6040516101b69190616bc1565b61018f611ace565b61018f611cea565b610226611ecf565b610211611fca565b61025b61209a565b60405190151581526020016101b6565b61018f61216e565b61018f612308565b6101a96124b7565b61018f612517565b601f5461025b9060ff1681565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561032e57600080fd5b505af1158015610342573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024016000604051808303818588803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050505050565b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561053b57600080fd5b505af115801561054f573d6000803e3d6000fd5b50506027546001600160a01b0316319250610577915061057190508484616c87565b826126b9565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105ce906167ca565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610653573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610698906167ca565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561071c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261080d919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052612738565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610899906167d7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108d5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610930906167e4565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610974573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610d0b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ced575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e37578382906000526020600020018054610daa90616c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690616c9a565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b505050505081526020019060010190610d8b565b505050508152505081526020019060010190610d39565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190616ce7565b9050610ef46000826126b9565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926110f1928992909116908790616d22565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361115293908216928992909116908790600401616d4a565b600060405180830381600087803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190616ce7565b905061121c84826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190616ce7565b90506112bd856028546105719190616d81565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190616ce7565b90506114216000826126b9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190616ce7565b90506116e083826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190616ce7565b9050610cad846028546105719190616d81565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002090600202016040518060400160405290816000820180546117d890616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461180490616c9a565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118985790505b505050505081525050815260200190600101906117a5565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461194690616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461197290616c9a565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081526020019060010190611927565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611ab657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a635790505b505050505081525050815260200190600101906119f7565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490611c419087906000908790616d22565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d928792611c9b92909116908690600401616d94565b6000604051808303818588803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b50506027546001600160a01b0316319250610cad915061057190508585616c87565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde390611e4a908590616db6565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ea1929116908590600401616d94565b600060405180830381600087803b158015611ebb57600080fd5b505af11580156112bd573d6000803e3d6000fd5b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611fb257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f5f5790505b50505050508152505081526020019060010190611ef3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461200d90616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461203990616c9a565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b505050505081526020019060010190611fee565b60085460009060ff16156120b2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190616ce7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906122659060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561227f57600080fd5b505af1158015612293573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506122ee9392831692889216908790600401616d4a565b600060405180830381600087803b1580156103a957600080fd5b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906123ff9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d935086926124819216908690600401616d94565b6000604051808303818588803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561258a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ae9190616d00565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ea1565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561272457600080fd5b505afa1580156103bd573d6000803e3d6000fd5b60006127426167f1565b61274d848483612757565b9150505b92915050565b60008061276485846127d2565b90506127c76040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016127b2929190616d94565b604051602081830303815290604052856127de565b9150505b9392505050565b60006127cb838361280c565b60c08101515160009015612802576127fb84848460c00151612827565b90506127cb565b6127fb84846129cd565b60006128188383612ab8565b6127cb838360200151846127de565b600080612832612ac8565b905060006128408683612b9b565b905060006128578260600151836020015185613041565b9050600061286783838989613253565b90506000612874826140d0565b602081015181519192509060030b156128e75789826040015160405160200161289e929190616dc9565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526128de91600401616db6565b60405180910390fd5b600061292a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161429f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061297d908490600401616db6565b602060405180830381865afa15801561299a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129be9190616e4a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590612a22908790600401616db6565b600060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a679190810190616f5b565b90506000612a958285604051602001612a81929190616f90565b60405160208183030381529060405261449f565b90506001600160a01b03811661274d57848460405160200161289e929190616fbf565b612ac4828260006144b2565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90612b4f90849060040161706a565b600060405180830381865afa158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9491908101906170b1565b9250505090565b612bcd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050612c186040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b612c21856145b5565b60208201526000612c318661499a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c9b91908101906170b1565b86838560200151604051602001612cb594939291906170fa565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190612d0d908590600401616db6565b600060405180830381865afa158015612d2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5291908101906170b1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690612d9a9084906004016171fe565b602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190616d00565b612df0578160405160200161289e9190617250565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612e359084906004016172e2565b600060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e7a91908101906170b1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690612ec1908490600401617334565b602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190616d00565b15612f97576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612f4c908490600401617334565b600060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f9191908101906170b1565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001612fbc9190617386565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612fe89291906173f2565b600060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261302d91908101906170b1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161305d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106130bd576130bd617417565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061311157613111617417565b60200260200101819052508460405160200161312d9190617446565b6040516020818303038152906040528160028151811061314f5761314f617417565b60200260200101819052508260405160200161316b91906174b2565b6040516020818303038152906040528160038151811061318d5761318d617417565b602002602001018190525060006131a3826140d0565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506132349060408051808201825260008082526020918201528151808301909252845182528085019082015290614c1d565b613249578560405160200161289e91906174f3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156132a3565b511590565b6134175782602001511561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016128de565b8260c0015115613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016128de565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161343057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061348b90617584565b935060ff16815181106134a0576134a0617417565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016134f191906175a3565b60405160208183030381529060405282828061350c90617584565b935060ff168151811061352157613521617417565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061356e90617584565b935060ff168151811061358357613583617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806135d090617584565b935060ff16815181106135e5576135e5617417565b6020026020010181905250876020015182828061360190617584565b935060ff168151811061361657613616617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061366390617584565b935060ff168151811061367857613678617417565b60209081029190910101528751828261369081617584565b935060ff16815181106136a5576136a5617417565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806136f290617584565b935060ff168151811061370757613707617417565b602002602001018190525061371b46614c7e565b828261372681617584565b935060ff168151811061373b5761373b617417565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061378890617584565b935060ff168151811061379d5761379d617417565b6020026020010181905250868282806137b590617584565b935060ff16815181106137ca576137ca617417565b60209081029190910101528551156138f15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261381b81617584565b935060ff168151811061383057613830617417565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90613880908990600401616db6565b600060405180830381865afa15801561389d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138c591908101906170b1565b82826138d081617584565b935060ff16815181106138e5576138e5617417565b60200260200101819052505b8460200151156139c15760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261393a81617584565b935060ff168151811061394f5761394f617417565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061399c90617584565b935060ff16815181106139b1576139b1617417565b6020026020010181905250613b88565b6139f961329e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b613a8c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613a3c81617584565b935060ff1681518110613a5157613a51617417565b60200260200101819052508460a00151604051602001613a719190617446565b60405160208183030381529060405282828061399c90617584565b8460c00151158015613acf575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152613acd90511590565b155b15613b885760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613b1381617584565b935060ff1681518110613b2857613b28617417565b6020026020010181905250613b3c88614d1e565b604051602001613b4c9190617446565b604051602081830303815290604052828280613b6790617584565b935060ff1681518110613b7c57613b7c617417565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152613bbc90511590565b613c515760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282613bff81617584565b935060ff1681518110613c1457613c14617417565b60200260200101819052508460400151828280613c3090617584565b935060ff1681518110613c4557613c45617417565b60200260200101819052505b606085015115613d725760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282613c9a81617584565b935060ff1681518110613caf57613caf617417565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613d1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d4691908101906170b1565b8282613d5181617584565b935060ff1681518110613d6657613d66617417565b60200260200101819052505b60e08501515115613e195760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282613dbc81617584565b935060ff1681518110613dd157613dd1617417565b6020026020010181905250613ded8560e0015160000151614c7e565b8282613df881617584565b935060ff1681518110613e0d57613e0d617417565b60200260200101819052505b60e08501516020015115613ec35760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282613e6681617584565b935060ff1681518110613e7b57613e7b617417565b6020026020010181905250613e978560e0015160200151614c7e565b8282613ea281617584565b935060ff1681518110613eb757613eb7617417565b60200260200101819052505b60e08501516040015115613f6d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282613f1081617584565b935060ff1681518110613f2557613f25617417565b6020026020010181905250613f418560e0015160400151614c7e565b8282613f4c81617584565b935060ff1681518110613f6157613f61617417565b60200260200101819052505b60e085015160600151156140175760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282613fba81617584565b935060ff1681518110613fcf57613fcf617417565b6020026020010181905250613feb8560e0015160600151614c7e565b8282613ff681617584565b935060ff168151811061400b5761400b617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561403557614035616e73565b60405190808252806020026020018201604052801561406857816020015b60608152602001906001900390816140535790505b50905060005b8260ff168160ff1610156140c157838160ff168151811061409157614091617417565b6020026020010151828260ff16815181106140ae576140ae617417565b602090810291909101015260010161406e565b5093505050505b949350505050565b6140f76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161417d9186910161760e565b600060405180830381865afa15801561419a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c291908101906170b1565b905060006141d0868361580d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016142009190616b4a565b6000604051808303816000875af115801561421f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142479190810190617655565b805190915060030b158015906142605750602081015151155b801561426f5750604081015151155b15613249578160008151811061428757614287617417565b602002602001015160405160200161289e919061770b565b606060006142d48560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061430b9082905b90615962565b15614468576000614388826143828461437c61434e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90615989565b906159eb565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143ec908290615962565b1561445657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614453905b8290615a70565b90505b61445f81615a96565b925050506127cb565b821561448157848460405160200161289e9291906178f7565b50506040805160208101909152600081526127cb565b509392505050565b6000808251602084016000f09392505050565b8160a00151156144c157505050565b60006144ce848484615aff565b905060006144db826140d0565b602081015181519192509060030b1580156145775750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790604080518082018252600080825260209182015281518083019092528451825280850190820152614305565b1561458457505050505050565b604082015151156145a457816040015160405160200161289e919061799e565b8060405160200161289e91906179fc565b606060006145ea8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061464f905b8290614c1d565b156146be57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b990839061609a565b615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614720905b8290616124565b6001036147ed57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147869061444c565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9905b8390615a70565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261484c90614648565b1561498357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906148b49083906161be565b9050600081600183516148c79190616d81565b815181106148d7576148d7617417565b6020026020010151905061497a6146b961494d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061609a565b95945050505050565b8260405160200161289e9190617a67565b50919050565b606060006149cf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614a3190614648565b15614a3f576127cb81615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a9e90614719565b600103614b0857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9906147e6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614648565b1561498357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614bcf9083906161be565b9050600181511115614c0b578060028251614bea9190616d81565b81518110614bfa57614bfa617417565b602002602001015192505050919050565b508260405160200161289e9190617a67565b805182516000911115614c3257506000612751565b81518351602085015160009291614c4891616c87565b614c529190616d81565b905082602001518103614c69576001915050612751565b82516020840151819020912014905092915050565b60606000614c8b83616263565b600101905060008167ffffffffffffffff811115614cab57614cab616e73565b6040519080825280601f01601f191660200182016040528015614cd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614cdf57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614daa905b8290616345565b15614dea57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4990614da3565b15614e8957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee890614da3565b15614f2857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8790614da3565b80614fec5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614fec90614da3565b1561502c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508b90614da3565b806150f05750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526150f090614da3565b1561513057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261518f90614da3565b806151f45750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f490614da3565b1561523457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261529390614da3565b806152f85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152f890614da3565b1561533857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539790614da3565b156153d757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261543690614da3565b1561547657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d590614da3565b1561551557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261557490614da3565b156155b457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261561390614da3565b1561565357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156b290614da3565b806157175750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261571790614da3565b1561575757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157b690614da3565b156157f657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161289e9290602001617b45565b60608060005b8451811015615898578185828151811061582f5761582f617417565b6020026020010151604051602001615848929190616f90565b6040516020818303038152906040529150600185516158679190616d81565b8114615890578160405160200161587e9190617cae565b60405160208183030381529060405291505b600101615813565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816158b157905050905083816000815181106158dc576158dc617417565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061593057615930617417565b6020026020010181905250818160028151811061594f5761594f617417565b6020908102919091010152949350505050565b60208083015183518351928401516000936159809291849190616359565b14159392505050565b604080518082019091526000808252602082015260006159bb846000015185602001518560000151866020015161646a565b90508360200151816159cd9190616d81565b845185906159dc908390616d81565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615a10575081612751565b6020808301519084015160019114615a375750815160208481015190840151829020919020145b8015615a6857825184518590615a4e908390616d81565b9052508251602085018051615a64908390616c87565b9052505b509192915050565b6040805180820190915260008082526020820152615a8f83838361658a565b5092915050565b60606000826000015167ffffffffffffffff811115615ab757615ab7616e73565b6040519080825280601f01601f191660200182016040528015615ae1576020820181803683370190505b5090506000602082019050615a8f8185602001518660000151616635565b60606000615b0b612ac8565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081615b2857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b8390617584565b935060ff1681518110615b9857615b98617417565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615be99190617cef565b604051602081830303815290604052828280615c0490617584565b935060ff1681518110615c1957615c19617417565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280615c6690617584565b935060ff1681518110615c7b57615c7b617417565b602002602001018190525082604051602001615c9791906174b2565b604051602081830303815290604052828280615cb290617584565b935060ff1681518110615cc757615cc7617417565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280615d1490617584565b935060ff1681518110615d2957615d29617417565b6020026020010181905250615d3e87846166af565b8282615d4981617584565b935060ff1681518110615d5e57615d5e617417565b602090810291909101015285515115615e0a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282615db081617584565b935060ff1681518110615dc557615dc5617417565b6020026020010181905250615dde8660000151846166af565b8282615de981617584565b935060ff1681518110615dfe57615dfe617417565b60200260200101819052505b856080015115615e785760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282615e5381617584565b935060ff1681518110615e6857615e68617417565b6020026020010181905250615ede565b8415615ede5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282615ebd81617584565b935060ff1681518110615ed257615ed2617417565b60200260200101819052505b60408601515115615f7a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282615f2881617584565b935060ff1681518110615f3d57615f3d617417565b60200260200101819052508560400151828280615f5990617584565b935060ff1681518110615f6e57615f6e617417565b60200260200101819052505b856060015115615fe45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615fc381617584565b935060ff1681518110615fd857615fd8617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561600257616002616e73565b60405190808252806020026020018201604052801561603557816020015b60608152602001906001900390816160205790505b50905060005b8260ff168160ff16101561608e57838160ff168151811061605e5761605e617417565b6020026020010151828260ff168151811061607b5761607b617417565b602090810291909101015260010161603b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156160bf575081612751565b815183516020850151600092916160d591616c87565b6160df9190616d81565b60208401519091506001908214616100575082516020840151819020908220145b801561611b57835185518690616117908390616d81565b9052505b50929392505050565b6000808260000151616148856000015186602001518660000151876020015161646a565b6161529190616c87565b90505b835160208501516161669190616c87565b8111615a8f578161617681617d34565b92505082600001516161ad8560200151836161919190616d81565b865161619d9190616d81565b838660000151876020015161646a565b6161b79190616c87565b9050616155565b606060006161cc8484616124565b6161d7906001616c87565b67ffffffffffffffff8111156161ef576161ef616e73565b60405190808252806020026020018201604052801561622257816020015b606081526020019060019003908161620d5790505b50905060005b81518110156144975761623e6146b98686615a70565b82828151811061625057616250617417565b6020908102919091010152600101616228565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106162ac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106162d8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106162f657662386f26fc10000830492506010015b6305f5e100831061630e576305f5e100830492506008015b612710831061632257612710830492506004015b60648310616334576064830492506002015b600a83106127515760010192915050565b600061635183836166ef565b159392505050565b600080858411616460576020841161640c57600084156163a4576001616380866020616d81565b61638b906008617d4e565b616396906002617e4c565b6163a09190616d81565b1990505b83518116856163b38989616c87565b6163bd9190616d81565b805190935082165b8181146163f7578784116163df57879450505050506140c8565b836163e981617e58565b9450508284511690506163c5565b6164018785616c87565b9450505050506140c8565b8383206164198588616d81565b6164239087616c87565b91505b85821061645e5784822080820361644b576164418684616c87565b93505050506140c8565b616456600184616d81565b925050616426565b505b5092949350505050565b60008381868511616575576020851161652457600085156164b6576001616492876020616d81565b61649d906008617d4e565b6164a8906002617e4c565b6164b29190616d81565b1990505b845181166000876164c78b8b616c87565b6164d19190616d81565b855190915083165b828114616516578186106164fe576164f18b8b616c87565b96505050505050506140c8565b8561650881617d34565b9650508386511690506164d9565b8596505050505050506140c8565b508383206000905b6165368689616d81565b82116165735785832080820361655257839450505050506140c8565b61655d600185616c87565b935050818061656b90617d34565b92505061652c565b505b61657f8787616c87565b979650505050505050565b604080518082019091526000808252602082015260006165bc856000015186602001518660000151876020015161646a565b6020808701805191860191909152519091506165d89082616d81565b8352845160208601516165eb9190616c87565b81036165fa576000855261662c565b835183516166089190616c87565b85518690616617908390616d81565b90525083516166269082616c87565b60208601525b50909392505050565b6020811061666d578151835261664c602084616c87565b9250616659602083616c87565b9150616666602082616d81565b9050616635565b600019811561669c576001616683836020616d81565b61668f90610100617e4c565b6166999190616d81565b90505b9151835183169219169190911790915250565b606060006166bd8484612b9b565b80516020808301516040519394506166d793909101617e6f565b60405160208183030381529060405291505092915050565b8151815160009190811115616702575081515b6020808501519084015160005b838110156167bb578251825180821461678b57600019602087101561676a5760018461673c896020616d81565b6167469190616c87565b616751906008617d4e565b61675c906002617e4c565b6167669190616d81565b1990505b81811683821681810391146167885797506127519650505050505050565b50505b616796602086616c87565b94506167a3602085616c87565b935050506020816167b49190616c87565b905061670f565b50845186516132499190617ec7565b610c9f80617ee883390190565b6113e280618b8783390190565b61182a80619f6983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001616834616839565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016168346040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156168eb5783516001600160a01b03168352602093840193909201916001016168c4565b509095945050505050565b60005b838110156169115781810151838201526020016168f9565b50506000910152565b600081518084526169328160208601602086016168f6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616a28577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352616a1284865161691a565b60209586019590945092909201916001016169d8565b50919750505060209485019492909201915060010161696e565b50929695505050505050565b600081518084526020840193506020830160005b82811015616aa25781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101616a62565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616b18604088018261691a565b9050602082015191508681036020880152616b338183616a4e565b965050506020938401939190910190600101616ad4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616bac85835161691a565b94506020938401939190910190600101616b72565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152616c426040870182616a4e565b9550506020938401939190910190600101616be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561275157612751616c58565b600181811c90821680616cae57607f821691505b602082108103614994577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215616cf957600080fd5b5051919050565b600060208284031215616d1257600080fd5b815180151581146127cb57600080fd5b8381526001600160a01b038316602082015260606040820152600061497a606083018461691a565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613249608083018461691a565b8181038181111561275157612751616c58565b6001600160a01b03831681526040602082015260006140c8604083018461691a565b6020815260006127cb602083018461691a565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616e0181601a8501602088016168f6565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351616e3e81601c8401602088016168f6565b01601c01949350505050565b600060208284031215616e5c57600080fd5b81516001600160a01b03811681146127cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715616ec557616ec5616e73565b60405290565b60008067ffffffffffffffff841115616ee657616ee6616e73565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715616f1557616f15616e73565b604052838152905080828401851015616f2d57600080fd5b6144978460208301856168f6565b600082601f830112616f4c57600080fd5b6127cb83835160208501616ecb565b600060208284031215616f6d57600080fd5b815167ffffffffffffffff811115616f8457600080fd5b61274d84828501616f3b565b60008351616fa28184602088016168f6565b835190830190616fb68183602088016168f6565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616ff781601a8501602088016168f6565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516170348160338401602088016168f6565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006127cb608083018461691a565b6000602082840312156170c357600080fd5b815167ffffffffffffffff8111156170da57600080fd5b8201601f810184136170eb57600080fd5b61274d84825160208401616ecb565b6000855161710c818460208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617146816001840160208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516171848160028401602089016168f6565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516171c68160028401602088016168f6565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617211604083018461691a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161728881601f8501602087016168f6565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006172f5604083018461691a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617347604083018461691a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516173be8160148501602087016168f6565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617405604083018561691a565b82810360208401526127c7818561691a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161747e8160018501602087016168f6565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516174c48184602087016168f6565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161757781604b8501602087016168f6565b91909101604b0192915050565b600060ff821660ff810361759a5761759a616c58565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006127cb608083018461691a565b60006020828403121561766757600080fd5b815167ffffffffffffffff81111561767e57600080fd5b82016060818503121561769057600080fd5b617698616ea2565b81518060030b81146176a957600080fd5b8152602082015167ffffffffffffffff8111156176c557600080fd5b6176d186828501616f3b565b602083015250604082015167ffffffffffffffff8111156176f157600080fd5b6176fd86828501616f3b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516177698160218501602087016168f6565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516179558160218501602088016168f6565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161799281602e8401602088016168f6565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251617a5a8160228501602087016168f6565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251617a9f81600e8501602087016168f6565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617b7d8160188501602088016168f6565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351617bba81601c8401602088016168f6565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251617cc08184602087016168f6565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251617d2781601c8501602087016168f6565b91909101601c0192915050565b60006000198203617d4757617d47616c58565b5060010190565b808202811582820484141761275157612751616c58565b6001815b6001841115617da057808504811115617d8457617d84616c58565b6001841615617d9257908102905b60019390931c928002617d69565b935093915050565b600082617db757506001612751565b81617dc457506000612751565b8160018114617dda5760028114617de457617e00565b6001915050612751565b60ff841115617df557617df5616c58565b50506001821b612751565b5060208310610133831016604e8410600b8410161715617e23575081810a612751565b617e306000198484617d65565b8060001904821115617e4457617e44616c58565b029392505050565b60006127cb8383617da8565b600081617e6757617e67616c58565b506000190190565b60008351617e818184602088016168f6565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351617ebb8160018401602088016168f6565b01600101949350505050565b8181036000831280158383131683831282161715615a8f57615a8f616c5856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033a2646970667358221220b68ef6a2e59ebd6ec07004817f94d2e8ad26c5b98e5fa2bbd022b8eb674f554764736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 4e3c2fef..0fb8f15e 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff078061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063a3f9d0e011610160578063d46e9b57116100d8578063f68bd1c01161008c578063fa7626d411610071578063fa7626d414610453578063fb176c1214610460578063fe7bdbb21461046857600080fd5b8063f68bd1c014610443578063fa18c09b1461044b57600080fd5b8063e20c9f71116100bd578063e20c9f711461040c578063e63ab1e914610414578063eb1ce7f91461043b57600080fd5b8063d46e9b57146103fc578063dd51e82f1461040457600080fd5b8063ba414fa61161012f578063c9350b7f11610114578063c9350b7f146103e4578063cbd57e2f146103ec578063cebad2a6146103f457600080fd5b8063ba414fa6146103c4578063bcd9925e146103dc57600080fd5b8063a3f9d0e014610385578063a783c7891461038d578063b0464fdc146103b4578063b5508aa9146103bc57600080fd5b80635d62c860116101f3578063766d0ded116101c257806385226c81116101a757806385226c8114610353578063916a17c6146103685780639620d7ed1461037d57600080fd5b8063766d0ded146103435780637d7f772a1461034b57600080fd5b80635d62c860146102e957806366d9a9a01461031e5780636a6218541461033357806371149c941461033b57600080fd5b80632ade38801161024a5780633e73ecb41161022f5780633e73ecb4146102d15780633f7286f4146102d957806344671b94146102e157600080fd5b80632ade3880146102b45780633e5e3c23146102c957600080fd5b80630a9254e41461027c5780631779672f146102865780631ed7831c1461028e5780632206eb65146102ac575b600080fd5b610284610470565b005b610284610d20565b610296610f32565b6040516102a3919061a122565b60405180910390f35b610284610f94565b6102bc6111d8565b6040516102a3919061a1be565b61029661131a565b61028461137a565b6102966118db565b61028461193b565b6103107f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102a3565b610326611cbe565b6040516102a3919061a324565b610284611e2b565b610284611ee2565b6102846126d8565b6102846128e5565b61035b612c17565b6040516102a3919061a41e565b610370612ce7565b6040516102a3919061a431565b610284612dcd565b610284612f87565b6103107f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610370613565565b61035b61364b565b6103cc61371b565b60405190151581526020016102a3565b6102846137ef565b6102846139ff565b610284613c43565b6102846141a4565b6102846143dd565b610284614497565b610296614c4d565b6103107f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610284614cad565b610284614dd2565b610284615180565b601f546103cc9060ff1681565b6102846154a6565b610284615afa565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516104c29061a035565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610547573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161058c9061a035565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610610573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526106ea919060840160408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615f28565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906107769061a042565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107b2573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061080d9061a04f565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610851573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108969061a05c565b604051809103906000f0801580156108b2573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561095e57600080fd5b505af1158015610972573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610a6257600080fd5b505af1158015610a76573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c85919061a4c8565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d0657600080fd5b505af1158015610d1a573d6000803e3d6000fd5b50505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610ded57600080fd5b505af1158015610e01573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610efc9392831692909116908790879060040161a4ea565b600060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b505050505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f6c575b5050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061114d919060040161a521565b600060405180830381600087803b15801561116757600080fd5b505af115801561117b573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd49450610efc9392831692909116908790879060040161a4ea565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112fa57838290600052602060002001805461126d9061a534565b80601f01602080910402602001604051908101604052809291908181526020018280546112999061a534565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050508152602001906001019061124e565b5050505081525050815260200190600101906111fc565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f6c575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f3919061a581565b9050611400816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611474919061a581565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611542916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156115e957600080fd5b505af11580156115fd573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061a581565b90506117c88186615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c919061a581565b90506118518161184c888761a5f1565b615f47565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c5919061a581565b90506118d2816000615f47565b50505050505050565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f6c575050505050905090565b6040805160048082526024820183526020820180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926119dc926001600160a01b03169160009187910161a59a565b600060405180830381600087803b1580156119f657600080fd5b505af1158015611a0a573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a8357600080fd5b505af1158015611a97573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b5057600080fd5b505af1158015611b64573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611baa90600090859061a604565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611c739290911690859060040161a61d565b6000604051808303816000875af1158015611c92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cba919081019061a727565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113115783829060005260206000209060020201604051806040016040529081600082018054611d159061a534565b80601f0160208091040260200160405190810160405280929190818152602001828054611d419061a534565b8015611d8e5780601f10611d6357610100808354040283529160200191611d8e565b820191906000526020600020905b815481529060010190602001808311611d7157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e1357602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611dd55790505b50505050508152505081526020019060010190611ce2565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610dd3565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f99919061a581565b9050611fa6816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a919061a581565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916120e8916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b15801561210257600080fd5b505af1158015612116573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561218f57600080fd5b505af11580156121a3573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506121e692506001600160a01b0390911690879061a61d565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561226357600080fd5b505af1158015612277573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906122c2908990899061a604565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561233f57600080fd5b505af1158015612353573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c89061239e908990899061a604565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506124709392831692909116908a908a9060040161a4ea565b600060405180830381600087803b15801561248a57600080fd5b505af115801561249e573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156124f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612515919061a581565b90506125218187615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612571573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612595919061a581565b90506125a58161184c898761a5f1565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa15801561261b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263f919061a581565b905061264c816000615f47565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061a581565b90506126cd816000615f47565b505050505050505050565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612820919060040161a521565b600060405180830381600087803b15801561283a57600080fd5b505af115801561284e573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b1580156128ca57600080fd5b505af11580156128de573d6000803e3d6000fd5b5050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816128fc5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061295c5761295c61a75c565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106129a0576129a061a75c565b60209081029190910101526040516001906000906129c69085908590859060240161a7bd565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a6457600080fd5b505af1158015612a78573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612b4e919060040161a521565b600060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612bd09290911690859060040161a61d565b6000604051808303816000875af1158015612bef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128de919081019061a727565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611311578382906000526020600020018054612c5a9061a534565b80601f0160208091040260200160405190810160405280929190818152602001828054612c869061a534565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113115760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612db557602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612d775790505b50505050508152505081526020019060010190612d0b565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015612e9d57600080fd5b505af1158015612eb1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610e71919060040161a521565b604080516004808252602480830184526020830180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa15801561301c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613040919061a581565b905061304d816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c1919061a581565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161318f916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b1580156131a957600080fd5b505af11580156131bd573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561323657600080fd5b505af115801561324a573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330357600080fd5b505af1158015613317573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613362908990899061a604565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133c357600080fd5b505af11580156133d7573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506134349392831692909116908a908a9060040161a4ea565b600060405180830381600087803b15801561344e57600080fd5b505af1158015613462573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156134b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d8919061a581565b90506134e5816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613559919061a581565b90506125a58185615f47565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113115760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561363357602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116135f55790505b50505050508152505081526020019060010190613589565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131157838290600052602060002001805461368e9061a534565b80601f01602080910402602001604051908101604052809291908181526020018280546136ba9061a534565b80156137075780601f106136dc57610100808354040283529160200191613707565b820191906000526020600020905b8154815290600101906020018083116136ea57829003601f168201915b50505050508152602001906001019061366f565b60085460009060ff1615613733575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156137c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e8919061a581565b1415905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613974919060040161a521565b600060405180830381600087803b15801561398e57600080fd5b505af11580156139a2573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610efc9392831692909116908790879060040161a4ea565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613bb8919060040161a521565b600060405180830381600087803b158015613bd257600080fd5b505af1158015613be6573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab599450610efc9392831692909116908790879060040161a4ea565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d2b919061a581565b9050613d38816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dac919061a581565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613e7a916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b158015613e9457600080fd5b505af1158015613ea8573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613f2157600080fd5b505af1158015613f35573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561400b57600080fd5b505af115801561401f573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061406a908990899061a604565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156140cb57600080fd5b505af11580156140df573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061413c9392831692909116908a908a9060040161a4ea565b600060405180830381600087803b15801561415657600080fd5b505af115801561416a573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016124d4565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561424457600080fd5b505af1158015614258573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061432e919060040161a521565b600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db935086926143b0921690869060040161a61d565b6000604051808303818588803b1580156143c957600080fd5b505af11580156118d2573d6000803e3d6000fd5b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612e83565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156144f057600080fd5b505af1158015614504573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506145da919060040161a521565b600060405180830381600087803b1580156145f457600080fd5b505af1158015614608573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561465c57600080fd5b505af1158015614670573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156146cd57600080fd5b505af11580156146e1573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506147b7919060040161a521565b600060405180830381600087803b1580156147d157600080fd5b505af11580156147e5573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561483957600080fd5b505af115801561484d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156148aa57600080fd5b505af11580156148be573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561491257600080fd5b505af1158015614926573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b1580156149f357600080fd5b505af1158015614a07573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a6457600080fd5b505af1158015614a78573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350614acc9290911690859060040161a61d565b6000604051808303816000875af1158015614aeb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b13919081019061a727565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b6d57600080fd5b505af1158015614b81573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bd557600080fd5b505af1158015614be9573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506119dc916001600160a01b031690600090869060040161a59a565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f6c575050505050905090565b600080604051602001614ce3907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614d4a57600080fd5b505af1158015614d5e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401613974565b604080516001808252818301909252600091816020015b6060815260200190600190039081614de95790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614e4957614e4961a75c565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614e8d57614e8d61a75c565b6020908102919091010152604051600190600090614eb39085908590859060240161a7bd565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614f5b916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b158015614f7557600080fd5b505af1158015614f89573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561500257600080fd5b505af1158015615016573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146935061505d92506001600160a01b039091169087908790879061a7f5565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156150da57600080fd5b505af11580156150ee573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061513490600090859061a604565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612b4e565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b0316316151df816000615f47565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561525457600080fd5b505af1158015615268573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506152ab92506001600160a01b0390911690859061a61d565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561532857600080fd5b505af115801561533c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c915061538990670de0b6b3a764000090869061a604565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153ea57600080fd5b505af11580156153fe573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792615452921690879060040161a61d565b6000604051808303818588803b15801561546b57600080fd5b505af115801561547f573d6000803e3d6000fd5b50506021546001600160a01b0316319250610d1a9150829050670de0b6b3a7640000615f47565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa15801561556a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061558e919061a581565b905061559b816000615f47565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156155eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061560f919061a581565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916156dd916001600160a01b039190911690600090869060040161a59a565b600060405180830381600087803b1580156156f757600080fd5b505af115801561570b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561578457600080fd5b505af1158015615798573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b031690506157d660028861a83d565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561588557600080fd5b505af1158015615899573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e906158e4908990899061a604565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561594557600080fd5b505af1158015615959573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506159b69392831692909116908a908a9060040161a4ea565b600060405180830381600087803b1580156159d057600080fd5b505af11580156159e4573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015615a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a5a919061a581565b9050615a6b8161184c60028961a83d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615adf919061a581565b90506125a581615af060028a61a83d565b61184c908761a5f1565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090615b57906000906001600160a01b031631615f47565b6000848484604051602401615b6e9392919061a878565b60408051601f198184030181529181526020820180516001600160e01b03167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615c1d916001600160a01b039190911690670de0b6b3a764000090869060040161a59a565b600060405180830381600087803b158015615c3757600080fd5b505af1158015615c4b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615cc457600080fd5b505af1158015615cd8573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350615d2192506001600160a01b0390911690859089908990899061a8a2565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615d9e57600080fd5b505af1158015615db2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615dff90670de0b6b3a764000090859061a604565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615e6057600080fd5b505af1158015615e74573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692615ec8921690869060040161a61d565b60006040518083038185885af1158015615ee6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615f0f919081019061a727565b506021546128de9083906001600160a01b031631615f47565b6000615f3261a069565b615f3d848483615fc6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615fb257600080fd5b505afa158015610f2a573d6000803e3d6000fd5b600080615fd38584616041565b90506160366040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161602192919061a61d565b6040516020818303038152906040528561604d565b9150505b9392505050565b600061603a838361607b565b60c081015151600090156160715761606a84848460c00151616096565b905061603a565b61606a848461623c565b60006160878383616327565b61603a8383602001518461604d565b6000806160a1616333565b905060006160af8683616406565b905060006160c682606001518360200151856168ac565b905060006160d683838989616abe565b905060006160e38261793b565b602081015181519192509060030b156161565789826040015160405160200161610d92919061a8e3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261614d9160040161a521565b60405180910390fd5b60006161996040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617b0a565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906161ec90849060040161a521565b602060405180830381865afa158015616209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061622d919061a964565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061629190879060040161a521565b600060405180830381865afa1580156162ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162d6919081019061a727565b9050600061630482856040516020016162f092919061a98d565b604051602081830303815290604052617d0a565b90506001600160a01b038116615f3d57848460405160200161610d92919061a9bc565b611cba82826000617d1d565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906163ba90849060040161aa67565b600060405180830381865afa1580156163d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163ff919081019061aaae565b9250505090565b6164386040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164836040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61648c85617e20565b6020820152600061649c86618205565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156164de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616506919081019061aaae565b86838560200151604051602001616520949392919061aaf7565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061657890859060040161a521565b600060405180830381865afa158015616595573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165bd919081019061aaae565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061660590849060040161abfb565b602060405180830381865afa158015616622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616646919061a4c8565b61665b578160405160200161610d919061ac4d565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166a090849060040161acdf565b600060405180830381865afa1580156166bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166e5919081019061aaae565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061672c90849060040161ad31565b602060405180830381865afa158015616749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061676d919061a4c8565b15616802576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167b790849060040161ad31565b600060405180830381865afa1580156167d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167fc919081019061aaae565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616827919061ad83565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161685392919061adef565b600060405180830381865afa158015616870573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616898919081019061aaae565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816168c85790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169285761692861a75c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061697c5761697c61a75c565b602002602001018190525084604051602001616998919061ae14565b604051602081830303815290604052816002815181106169ba576169ba61a75c565b6020026020010181905250826040516020016169d6919061ae80565b604051602081830303815290604052816003815181106169f8576169f861a75c565b60200260200101819052506000616a0e8261793b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616a9f9060408051808201825260008082526020918201528151808301909252845182528085019082015290618488565b616ab4578560405160200161610d919061aec1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616b0e565b511590565b616c8257826020015115616bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161614d565b8260c0015115616c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161614d565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616c9b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616cf69061af52565b935060ff1681518110616d0b57616d0b61a75c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616d5c919061af71565b604051602081830303815290604052828280616d779061af52565b935060ff1681518110616d8c57616d8c61a75c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616dd99061af52565b935060ff1681518110616dee57616dee61a75c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e3b9061af52565b935060ff1681518110616e5057616e5061a75c565b60200260200101819052508760200151828280616e6c9061af52565b935060ff1681518110616e8157616e8161a75c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616ece9061af52565b935060ff1681518110616ee357616ee361a75c565b602090810291909101015287518282616efb8161af52565b935060ff1681518110616f1057616f1061a75c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616f5d9061af52565b935060ff1681518110616f7257616f7261a75c565b6020026020010181905250616f86466184e9565b8282616f918161af52565b935060ff1681518110616fa657616fa661a75c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616ff39061af52565b935060ff16815181106170085761700861a75c565b6020026020010181905250868282806170209061af52565b935060ff16815181106170355761703561a75c565b602090810291909101015285511561715c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170868161af52565b935060ff168151811061709b5761709b61a75c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906170eb90899060040161a521565b600060405180830381865afa158015617108573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617130919081019061aaae565b828261713b8161af52565b935060ff16815181106171505761715061a75c565b60200260200101819052505b84602001511561722c5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171a58161af52565b935060ff16815181106171ba576171ba61a75c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172079061af52565b935060ff168151811061721c5761721c61a75c565b60200260200101819052506173f3565b617264616b098660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6172f75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172a78161af52565b935060ff16815181106172bc576172bc61a75c565b60200260200101819052508460a001516040516020016172dc919061ae14565b6040516020818303038152906040528282806172079061af52565b8460c0015115801561733a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261733890511590565b155b156173f35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737e8161af52565b935060ff16815181106173935761739361a75c565b60200260200101819052506173a788618589565b6040516020016173b7919061ae14565b6040516020818303038152906040528282806173d29061af52565b935060ff16815181106173e7576173e761a75c565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261742790511590565b6174bc5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261746a8161af52565b935060ff168151811061747f5761747f61a75c565b6020026020010181905250846040015182828061749b9061af52565b935060ff16815181106174b0576174b061a75c565b60200260200101819052505b6060850151156175dd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175058161af52565b935060ff168151811061751a5761751a61a75c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617589573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175b1919081019061aaae565b82826175bc8161af52565b935060ff16815181106175d1576175d161a75c565b60200260200101819052505b60e085015151156176845760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176278161af52565b935060ff168151811061763c5761763c61a75c565b60200260200101819052506176588560e00151600001516184e9565b82826176638161af52565b935060ff16815181106176785761767861a75c565b60200260200101819052505b60e0850151602001511561772e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826176d18161af52565b935060ff16815181106176e6576176e661a75c565b60200260200101819052506177028560e00151602001516184e9565b828261770d8161af52565b935060ff16815181106177225761772261a75c565b60200260200101819052505b60e085015160400151156177d85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261777b8161af52565b935060ff16815181106177905761779061a75c565b60200260200101819052506177ac8560e00151604001516184e9565b82826177b78161af52565b935060ff16815181106177cc576177cc61a75c565b60200260200101819052505b60e085015160600151156178825760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178258161af52565b935060ff168151811061783a5761783a61a75c565b60200260200101819052506178568560e00151606001516184e9565b82826178618161af52565b935060ff16815181106178765761787661a75c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156178a0576178a061a63f565b6040519080825280602002602001820160405280156178d357816020015b60608152602001906001900390816178be5790505b50905060005b8260ff168160ff16101561792c57838160ff16815181106178fc576178fc61a75c565b6020026020010151828260ff16815181106179195761791961a75c565b60209081029190910101526001016178d9565b5093505050505b949350505050565b6179626040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916179e89186910161afdc565b600060405180830381865afa158015617a05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a2d919081019061aaae565b90506000617a3b8683619078565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617a6b919061a41e565b6000604051808303816000875af1158015617a8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617ab2919081019061b023565b805190915060030b15801590617acb5750602081015151155b8015617ada5750604081015151155b15616ab45781600081518110617af257617af261a75c565b602002602001015160405160200161610d919061b0d9565b60606000617b3f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617b769082905b906191cd565b15617cd3576000617bf382617bed84617be7617bb98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906191f4565b90619256565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c579082906191cd565b15617cc157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbe905b82906192db565b90505b617cca81619301565b9250505061603a565b8215617cec57848460405160200161610d92919061b2c5565b505060408051602081019091526000815261603a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d2c57505050565b6000617d3984848461936a565b90506000617d468261793b565b602081015181519192509060030b158015617de25750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617de290604080518082018252600080825260209182015281518083019092528451825280850190820152617b70565b15617def57505050505050565b60408201515115617e0f57816040015160405160200161610d919061b36c565b8060405160200161610d919061b3ca565b60606000617e558360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617eba905b8290618488565b15617f2957604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261603a90617f24908390619905565b619301565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f8b905b829061998f565b60010361805857604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ff190617cb7565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261603a90617f24905b83906192db565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180b790617eb3565b156181ee57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061811f908390619a29565b905060008160018351618132919061a5f1565b815181106181425761814261a75c565b602002602001015190506181e5617f246181b86040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619905565b95945050505050565b8260405160200161610d919061b435565b50919050565b6060600061823a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061829c90617eb3565b156182aa5761603a81619301565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261830990617f84565b60010361837357604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261603a90617f2490618051565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183d290617eb3565b156181ee57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061843a908390619a29565b9050600181511115618476578060028251618455919061a5f1565b815181106184655761846561a75c565b602002602001015192505050919050565b508260405160200161610d919061b435565b80518251600091111561849d57506000615f41565b815183516020850151600092916184b39161b513565b6184bd919061a5f1565b9050826020015181036184d4576001915050615f41565b82516020840151819020912014905092915050565b606060006184f683619ace565b600101905060008167ffffffffffffffff8111156185165761851661a63f565b6040519080825280601f01601f191660200182016040528015618540576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461854a57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618615905b8290619bb0565b1561865557505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186b49061860e565b156186f457505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187539061860e565b1561879357505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187f29061860e565b806188575750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188579061860e565b1561889757505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188f69061860e565b8061895b5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261895b9061860e565b1561899b57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189fa9061860e565b80618a5f5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a5f9061860e565b15618a9f57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618afe9061860e565b80618b635750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b639061860e565b15618ba357505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c029061860e565b15618c4257505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ca19061860e565b15618ce157505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d409061860e565b15618d8057505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ddf9061860e565b15618e1f57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e7e9061860e565b15618ebe57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f1d9061860e565b80618f825750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f829061860e565b15618fc257505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190219061860e565b1561906157505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161610d929060200161b526565b60608060005b8451811015619103578185828151811061909a5761909a61a75c565b60200260200101516040516020016190b392919061a98d565b6040516020818303038152906040529150600185516190d2919061a5f1565b81146190fb57816040516020016190e9919061b68f565b60405160208183030381529060405291505b60010161907e565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161911c57905050905083816000815181106191475761914761a75c565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061919b5761919b61a75c565b602002602001018190525081816002815181106191ba576191ba61a75c565b6020908102919091010152949350505050565b60208083015183518351928401516000936191eb9291849190619bc4565b14159392505050565b604080518082019091526000808252602082015260006192268460000151856020015185600001518660200151619cd5565b9050836020015181619238919061a5f1565b8451859061924790839061a5f1565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561927b575081615f41565b60208083015190840151600191146192a25750815160208481015190840151829020919020145b80156192d3578251845185906192b990839061a5f1565b90525082516020850180516192cf90839061b513565b9052505b509192915050565b60408051808201909152600080825260208201526192fa838383619df5565b5092915050565b60606000826000015167ffffffffffffffff8111156193225761932261a63f565b6040519080825280601f01601f19166020018201604052801561934c576020820181803683370190505b50905060006020820190506192fa8185602001518660000151619ea0565b60606000619376616333565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161939357905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806193ee9061af52565b935060ff16815181106194035761940361a75c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619454919061b6d0565b60405160208183030381529060405282828061946f9061af52565b935060ff16815181106194845761948461a75c565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806194d19061af52565b935060ff16815181106194e6576194e661a75c565b602002602001018190525082604051602001619502919061ae80565b60405160208183030381529060405282828061951d9061af52565b935060ff16815181106195325761953261a75c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061957f9061af52565b935060ff16815181106195945761959461a75c565b60200260200101819052506195a98784619f1a565b82826195b48161af52565b935060ff16815181106195c9576195c961a75c565b6020908102919091010152855151156196755760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261961b8161af52565b935060ff16815181106196305761963061a75c565b6020026020010181905250619649866000015184619f1a565b82826196548161af52565b935060ff16815181106196695761966961a75c565b60200260200101819052505b8560800151156196e35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826196be8161af52565b935060ff16815181106196d3576196d361a75c565b6020026020010181905250619749565b84156197495760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197288161af52565b935060ff168151811061973d5761973d61a75c565b60200260200101819052505b604086015151156197e55760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197938161af52565b935060ff16815181106197a8576197a861a75c565b602002602001018190525085604001518282806197c49061af52565b935060ff16815181106197d9576197d961a75c565b60200260200101819052505b85606001511561984f5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261982e8161af52565b935060ff16815181106198435761984361a75c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561986d5761986d61a63f565b6040519080825280602002602001820160405280156198a057816020015b606081526020019060019003908161988b5790505b50905060005b8260ff168160ff1610156198f957838160ff16815181106198c9576198c961a75c565b6020026020010151828260ff16815181106198e6576198e661a75c565b60209081029190910101526001016198a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561992a575081615f41565b815183516020850151600092916199409161b513565b61994a919061a5f1565b6020840151909150600190821461996b575082516020840151819020908220145b80156199865783518551869061998290839061a5f1565b9052505b50929392505050565b60008082600001516199b38560000151866020015186600001518760200151619cd5565b6199bd919061b513565b90505b835160208501516199d1919061b513565b81116192fa57816199e18161b715565b9250508260000151619a188560200151836199fc919061a5f1565b8651619a08919061a5f1565b8386600001518760200151619cd5565b619a22919061b513565b90506199c0565b60606000619a37848461998f565b619a4290600161b513565b67ffffffffffffffff811115619a5a57619a5a61a63f565b604051908082528060200260200182016040528015619a8d57816020015b6060815260200190600190039081619a785790505b50905060005b8151811015617d0257619aa9617f2486866192db565b828281518110619abb57619abb61a75c565b6020908102919091010152600101619a93565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b17577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b43576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619b6157662386f26fc10000830492506010015b6305f5e1008310619b79576305f5e100830492506008015b6127108310619b8d57612710830492506004015b60648310619b9f576064830492506002015b600a8310615f415760010192915050565b6000619bbc8383619f5a565b159392505050565b600080858411619ccb5760208411619c775760008415619c0f576001619beb86602061a5f1565b619bf690600861b72f565b619c0190600261b82d565b619c0b919061a5f1565b1990505b8351811685619c1e898961b513565b619c28919061a5f1565b805190935082165b818114619c6257878411619c4a5787945050505050617933565b83619c548161b839565b945050828451169050619c30565b619c6c878561b513565b945050505050617933565b838320619c84858861a5f1565b619c8e908761b513565b91505b858210619cc957848220808203619cb657619cac868461b513565b9350505050617933565b619cc160018461a5f1565b925050619c91565b505b5092949350505050565b60008381868511619de05760208511619d8f5760008515619d21576001619cfd87602061a5f1565b619d0890600861b72f565b619d1390600261b82d565b619d1d919061a5f1565b1990505b84518116600087619d328b8b61b513565b619d3c919061a5f1565b855190915083165b828114619d8157818610619d6957619d5c8b8b61b513565b9650505050505050617933565b85619d738161b715565b965050838651169050619d44565b859650505050505050617933565b508383206000905b619da1868961a5f1565b8211619dde57858320808203619dbd5783945050505050617933565b619dc860018561b513565b9350508180619dd69061b715565b925050619d97565b505b619dea878761b513565b979650505050505050565b60408051808201909152600080825260208201526000619e278560000151866020015186600001518760200151619cd5565b602080870180519186019190915251909150619e43908261a5f1565b835284516020860151619e56919061b513565b8103619e655760008552619e97565b83518351619e73919061b513565b85518690619e8290839061a5f1565b9052508351619e91908261b513565b60208601525b50909392505050565b60208110619ed85781518352619eb760208461b513565b9250619ec460208361b513565b9150619ed160208261a5f1565b9050619ea0565b6000198115619f07576001619eee83602061a5f1565b619efa9061010061b82d565b619f04919061a5f1565b90505b9151835183169219169190911790915250565b60606000619f288484616406565b8051602080830151604051939450619f429390910161b850565b60405160208183030381529060405291505092915050565b8151815160009190811115619f6d575081515b6020808501519084015160005b8381101561a0265782518251808214619ff6576000196020871015619fd557600184619fa789602061a5f1565b619fb1919061b513565b619fbc90600861b72f565b619fc790600261b82d565b619fd1919061a5f1565b1990505b8181168382168181039114619ff3579750615f419650505050505050565b50505b61a00160208661b513565b945061a00e60208561b513565b9350505060208161a01f919061b513565b9050619f7a565b5084518651616ab4919061b8a8565b610c9f8061b8c983390190565b6113e28061c56883390190565b61182a8061d94a83390190565b610d5e8061f17483390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0ac61a0b1565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0ac6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1635783516001600160a01b031683526020938401939092019160010161a13c565b509095945050505050565b60005b8381101561a18957818101518382015260200161a171565b50506000910152565b6000815180845261a1aa81602086016020860161a16e565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2ba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a28a84865161a192565b602095860195909450929092019160010161a250565b50919750505060209485019492909201915060010161a1e6565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a31a5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a2da565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2ba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a390604088018261a192565b905060208201519150868103602088015261a3ab818361a2c6565b96505050602093840193919091019060010161a34c565b600082825180855260208501945060208160051b8301016020850160005b8381101561a41257601f1985840301885261a3fc83835161a192565b602098890198909350919091019060010161a3e0565b50909695505050505050565b60208152600061603a602083018461a3c2565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2ba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4b2604087018261a2c6565b955050602093840193919091019060010161a459565b60006020828403121561a4da57600080fd5b8151801515811461603a57600080fd5b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616ab4608083018461a192565b60208152600061603a602083018461a192565b600181811c9082168061a54857607f821691505b6020821081036181ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561a59357600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006181e5606083018461a192565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f4157615f4161a5c2565b828152604060208201526000617933604083018461a192565b6001600160a01b0383168152604060208201526000617933604083018461a192565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a6915761a69161a63f565b60405290565b60008067ffffffffffffffff84111561a6b25761a6b261a63f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a6e15761a6e161a63f565b60405283815290508082840185101561a6f957600080fd5b617d0284602083018561a16e565b600082601f83011261a71857600080fd5b61603a8383516020850161a697565b60006020828403121561a73957600080fd5b815167ffffffffffffffff81111561a75057600080fd5b615f3d8482850161a707565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a31a57815186526020958601959091019060010161a79f565b60608152600061a7d0606083018661a3c2565b828103602084015261a7e2818661a78b565b9150508215156040830152949350505050565b6001600160a01b038516815260806020820152600061a817608083018661a3c2565b828103604084015261a829818661a78b565b915050821515606083015295945050505050565b60008261a873577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608152600061a88b606083018661a192565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a8ca60a083018661a192565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a91b81601a85016020880161a16e565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a95881601c84016020880161a16e565b01601c01949350505050565b60006020828403121561a97657600080fd5b81516001600160a01b038116811461603a57600080fd5b6000835161a99f81846020880161a16e565b83519083019061a9b381836020880161a16e565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a9f481601a85016020880161a16e565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161aa3181603384016020880161a16e565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061603a608083018461a192565b60006020828403121561aac057600080fd5b815167ffffffffffffffff81111561aad757600080fd5b8201601f8101841361aae857600080fd5b615f3d8482516020840161a697565b6000855161ab09818460208a0161a16e565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ab43816001840160208a0161a16e565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ab8181600284016020890161a16e565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161abc381600284016020880161a16e565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ac0e604083018461a192565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161ac8581601f85016020870161a16e565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061acf2604083018461a192565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061ad44604083018461a192565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161adbb81601485016020870161a16e565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061ae02604083018561a192565b8281036020840152616036818561a192565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161ae4c81600185016020870161a16e565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161ae9281846020870161a16e565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161af4581604b85016020870161a16e565b91909101604b0192915050565b600060ff821660ff810361af685761af6861a5c2565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161afcf81602985016020870161a16e565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061603a608083018461a192565b60006020828403121561b03557600080fd5b815167ffffffffffffffff81111561b04c57600080fd5b82016060818503121561b05e57600080fd5b61b06661a66e565b81518060030b811461b07757600080fd5b8152602082015167ffffffffffffffff81111561b09357600080fd5b61b09f8682850161a707565b602083015250604082015167ffffffffffffffff81111561b0bf57600080fd5b61b0cb8682850161a707565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b13781602185016020870161a16e565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b32381602185016020880161a16e565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b36081602e84016020880161a16e565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161afcf81602985016020870161a16e565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b42881602285016020870161a16e565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b46d81600e85016020870161a16e565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615f4157615f4161a5c2565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b55e81601885016020880161a16e565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b59b81601c84016020880161a16e565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b6a181846020870161a16e565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b70881601c85016020870161a16e565b91909101601c0192915050565b6000600019820361b7285761b72861a5c2565b5060010190565b8082028115828204841417615f4157615f4161a5c2565b6001815b600184111561b7815780850481111561b7655761b76561a5c2565b600184161561b77357908102905b60019390931c92800261b74a565b935093915050565b60008261b79857506001615f41565b8161b7a557506000615f41565b816001811461b7bb576002811461b7c55761b7e1565b6001915050615f41565b60ff84111561b7d65761b7d661a5c2565b50506001821b615f41565b5060208310610133831016604e8410600b841016171561b804575081810a615f41565b61b811600019848461b746565b806000190482111561b8255761b82561a5c2565b029392505050565b600061603a838361b789565b60008161b8485761b84861a5c2565b506000190190565b6000835161b86281846020880161a16e565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b89c81600184016020880161a16e565b01600101949350505050565b81810360008312801583831316838312821617156192fa576192fa61a5c256fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122023a6fcecf900bc11c87ed85e27f0884fae342c16771a39a7bff991e00061812764736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff4d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a3f9d0e011610160578063dd51e82f116100d8578063fa18c09b1161008c578063fb176c1211610071578063fb176c121461049a578063fe7bdbb2146104a2578063fe8e5f1b146104aa57600080fd5b8063fa18c09b14610485578063fa7626d41461048d57600080fd5b8063e63ab1e9116100bd578063e63ab1e91461044e578063eb1ce7f914610475578063f68bd1c01461047d57600080fd5b8063dd51e82f1461043e578063e20c9f711461044657600080fd5b8063b5508aa91161012f578063c9350b7f11610114578063c9350b7f14610426578063cbd57e2f1461042e578063cebad2a61461043657600080fd5b8063b5508aa914610406578063ba414fa61461040e57600080fd5b8063a3f9d0e0146103c7578063a4943deb146103cf578063a783c789146103d7578063b0464fdc146103fe57600080fd5b80633f7286f41161020e57806371149c94116101c257806385226c81116101a757806385226c811461037657806385f438c11461038b578063916a17c6146103b257600080fd5b806371149c94146103665780637d7f772a1461036e57600080fd5b80635d62c860116101f35780635d62c8601461031457806366d9a9a0146103495780636a6218541461035e57600080fd5b80633f7286f41461030457806344671b941461030c57600080fd5b80632206eb65116102655780633e5e3c231161024a5780633e5e3c23146102ec5780633e73ecb4146102f45780633ee92923146102fc57600080fd5b80632206eb65146102cf5780632ade3880146102d757600080fd5b80630a9254e4146102975780630eee72a9146102a15780631779672f146102a95780631ed7831c146102b1575b600080fd5b61029f6104b2565b005b61029f610d62565b61029f610fdd565b6102b9611132565b6040516102c6919061a168565b60405180910390f35b61029f611194565b6102df6113d8565b6040516102c6919061a204565b6102b961151a565b61029f61157a565b61029f611adb565b6102b9611b95565b61029f611bf5565b61033b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102c6565b610351611f78565b6040516102c6919061a36a565b61029f6120e5565b61029f61219c565b61029f612992565b61037e612ccb565b6040516102c6919061a464565b61033b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103ba612d9b565b6040516102c6919061a477565b61029f612e81565b61029f61345f565b61033b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103ba61366f565b61037e613755565b610416613825565b60405190151581526020016102c6565b61029f6138f9565b61029f613b3d565b61029f61409e565b61029f6142d7565b6102b9614a8d565b61033b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61029f614aed565b61029f614c12565b61029f614fc0565b601f546104169060ff1681565b61029f6152e6565b61029f61593a565b61029f615d68565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105049061a07b565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610589573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105ce9061a07b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610652573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261072c919060840160408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615f6e565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906107b89061a088565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107f4573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061084f9061a095565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610893573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108d89061a0a2565b604051809103906000f0801580156108f4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061a50e565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610e3257600080fd5b505af1158015610e46573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610f1c919060040161a530565b600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610fa79392831692909116908790879060040161a543565b600060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610f1c565b6060601680548060200260200160405190810160405280929190818152602001828054801561118a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161116c575b5050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561126357600080fd5b505af1158015611277573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061134d919060040161a530565b600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd49450610fa79392831692909116908790879060040161a543565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561151157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114fa57838290600052602060002001805461146d9061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546114999061a57a565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b50505050508152602001906001019061144e565b5050505081525050815260200190600101906113fc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f3919061a5c7565b9050611600816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611674919061a5c7565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611742916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156117e957600080fd5b505af11580156117fd573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc919061a5c7565b90506119c88186615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c919061a5c7565b9050611a5181611a4c888761a637565b615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac5919061a5c7565b9050611ad2816000615f8d565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610e18565b6060601780548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b6040805160048082526024820183526020820180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611c96926001600160a01b03169160009187910161a5e0565b600060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611e6490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ec557600080fd5b505af1158015611ed9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611f2d9290911690859060040161a663565b6000604051808303816000875af1158015611f4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f74919081019061a76d565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000209060020201604051806040016040529081600082018054611fcf9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffb9061a57a565b80156120485780601f1061201d57610100808354040283529160200191612048565b820191906000526020600020905b81548152906001019060200180831161202b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161208f5790505b50505050508152505081526020019060010190611f9c565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612253919061a5c7565b9050612260816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916123a2916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156123bc57600080fd5b505af11580156123d0573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506124a092506001600160a01b0390911690879061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561251d57600080fd5b505af1158015612531573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061257c908990899061a64a565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612658908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272a9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf919061a5c7565b90506127db8187615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061a5c7565b905061285f81611a4c898761a637565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f9919061a5c7565b9050612906816000615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061a5c7565b9050612987816000615f8d565b505050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816129a95790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110612a0957612a0961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612a4d57612a4d61a7a2565b6020908102919091010152604051600190600090612a739085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b1157600080fd5b505af1158015612b25573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612bfb919060040161a530565b600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612c7d9290911690859060040161a663565b6000604051808303816000875af1158015612c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cc4919081019061a76d565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611511578382906000526020600020018054612d0e9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3a9061a57a565b8015612d875780601f10612d5c57610100808354040283529160200191612d87565b820191906000526020600020905b815481529060010190602001808311612d6a57829003601f168201915b505050505081526020019060010190612cef565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e6957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612e2b5790505b50505050508152505081526020019060010190612dbf565b604080516004808252602480830184526020830180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061a5c7565b9050612f47816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbb919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613089916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061325c908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061332e9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561334857600080fd5b505af115801561335c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156133ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d2919061a5c7565b90506133df816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613453919061a5c7565b905061285f8185615f8d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134fa57600080fd5b505af115801561350e573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135e4919060040161a530565b600060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610fa79392831692909116908790879060040161a543565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116136ff5790505b50505050508152505081526020019060010190613693565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000200180546137989061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546137c49061a57a565b80156138115780601f106137e657610100808354040283529160200191613811565b820191906000526020600020905b8154815290600101906020018083116137f457829003601f168201915b505050505081526020019060010190613779565b60085460009060ff161561383d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061a5c7565b1415905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139c857600080fd5b505af11580156139dc573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613ab2919060040161a530565b600060405180830381600087803b158015613acc57600080fd5b505af1158015613ae0573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab599450610fa79392831692909116908790879060040161a543565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c25919061a5c7565b9050613c32816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613d74916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015613d8e57600080fd5b505af1158015613da2573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f0557600080fd5b505af1158015613f19573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613f64908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506140369392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a08231910161278e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614228919060040161a530565b600060405180830381600087803b15801561424257600080fd5b505af1158015614256573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db935086926142aa921690869060040161a663565b6000604051808303818588803b1580156142c357600080fd5b505af1158015611ad2573d6000803e3d6000fd5b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561433057600080fd5b505af1158015614344573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061441a919060040161a530565b600060405180830381600087803b15801561443457600080fd5b505af1158015614448573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561449c57600080fd5b505af11580156144b0573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561450d57600080fd5b505af1158015614521573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506145f7919060040161a530565b600060405180830381600087803b15801561461157600080fd5b505af1158015614625573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561467957600080fd5b505af115801561468d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156146ea57600080fd5b505af11580156146fe573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561475257600080fd5b505af1158015614766573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561483357600080fd5b505af1158015614847573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156148a457600080fd5b505af11580156148b8573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061490c9290911690859060040161a663565b6000604051808303816000875af115801561492b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614953919081019061a76d565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149ad57600080fd5b505af11580156149c1573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a1557600080fd5b505af1158015614a29573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611c96916001600160a01b031690600090869060040161a5e0565b6060601580548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b600080604051602001614b23907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b8a57600080fd5b505af1158015614b9e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016135e4565b604080516001808252818301909252600091816020015b6060815260200190600190039081614c295790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614c8957614c8961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614ccd57614ccd61a7a2565b6020908102919091010152604051600190600090614cf39085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614d9b916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015614db557600080fd5b505af1158015614dc9573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e4257600080fd5b505af1158015614e56573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350614e9d92506001600160a01b039091169087908790879061a83b565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f1a57600080fd5b505af1158015614f2e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614f7490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612bfb565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b03163161501f816000615f8d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561509457600080fd5b505af11580156150a8573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506150eb92506001600160a01b0390911690859061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561516857600080fd5b505af115801561517c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c91506151c990670de0b6b3a764000090869061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561522a57600080fd5b505af115801561523e573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792615292921690879060040161a663565b6000604051808303818588803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506021546001600160a01b0316319250610d5c9150829050670de0b6b3a7640000615f8d565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156153aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153ce919061a5c7565b90506153db816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561542b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061544f919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161551d916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561553757600080fd5b505af115801561554b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156155c457600080fd5b505af11580156155d8573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061561660028861a883565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156156c557600080fd5b505af11580156156d9573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615724908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561578557600080fd5b505af1158015615799573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157f69392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561581057600080fd5b505af1158015615824573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015615876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061589a919061a5c7565b90506158ab81611a4c60028961a883565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156158fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061591f919061a5c7565b905061285f8161593060028a61a883565b611a4c908761a637565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090615997906000906001600160a01b031631615f8d565b60008484846040516024016159ae9392919061a8be565b60408051601f198184030181529181526020820180516001600160e01b03167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a5d916001600160a01b039190911690670de0b6b3a764000090869060040161a5e0565b600060405180830381600087803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b0457600080fd5b505af1158015615b18573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350615b6192506001600160a01b0390911690859089908990899061a8e8565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615bde57600080fd5b505af1158015615bf2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c3f90670de0b6b3a764000090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ca057600080fd5b505af1158015615cb4573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692615d08921690869060040161a663565b60006040518083038185885af1158015615d26573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d4f919081019061a76d565b50602154612cc49083906001600160a01b031631615f8d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615dc657600080fd5b505af1158015615dda573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615eb0919060040161a530565b600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015615f5a57600080fd5b505af1158015612cc4573d6000803e3d6000fd5b6000615f7861a0af565b615f8384848361600c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615ff857600080fd5b505afa158015610fd5573d6000803e3d6000fd5b6000806160198584616087565b905061607c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161606792919061a663565b60405160208183030381529060405285616093565b9150505b9392505050565b600061608083836160c1565b60c081015151600090156160b7576160b084848460c001516160dc565b9050616080565b6160b08484616282565b60006160cd838361636d565b61608083836020015184616093565b6000806160e7616379565b905060006160f5868361644c565b9050600061610c82606001518360200151856168f2565b9050600061611c83838989616b04565b9050600061612982617981565b602081015181519192509060030b1561619c5789826040015160405160200161615392919061a929565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161939160040161a530565b60405180910390fd5b60006161df6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617b50565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061623290849060040161a530565b602060405180830381865afa15801561624f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616273919061a9aa565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906162d790879060040161a530565b600060405180830381865afa1580156162f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261631c919081019061a76d565b9050600061634a828560405160200161633692919061a9d3565b604051602081830303815290604052617d50565b90506001600160a01b038116615f8357848460405160200161615392919061aa02565b611f7482826000617d63565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061640090849060040161aaad565b600060405180830381865afa15801561641d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616445919081019061aaf4565b9250505090565b61647e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164c96040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6164d285617e66565b602082015260006164e28661824b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616524573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261654c919081019061aaf4565b86838560200151604051602001616566949392919061ab3d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906165be90859060040161a530565b600060405180830381865afa1580156165db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616603919081019061aaf4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061664b90849060040161ac41565b602060405180830381865afa158015616668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061668c919061a50e565b6166a15781604051602001616153919061ac93565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166e690849060040161ad25565b600060405180830381865afa158015616703573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261672b919081019061aaf4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061677290849060040161ad77565b602060405180830381865afa15801561678f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906167b3919061a50e565b15616848576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167fd90849060040161ad77565b600060405180830381865afa15801561681a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616842919081019061aaf4565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161686d919061adc9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161689992919061ae35565b600060405180830381865afa1580156168b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168de919081019061aaf4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161690e5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061696e5761696e61a7a2565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106169c2576169c261a7a2565b6020026020010181905250846040516020016169de919061ae5a565b60405160208183030381529060405281600281518110616a0057616a0061a7a2565b602002602001018190525082604051602001616a1c919061aec6565b60405160208183030381529060405281600381518110616a3e57616a3e61a7a2565b60200260200101819052506000616a5482617981565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616ae590604080518082018252600080825260209182015281518083019092528451825280850190820152906184ce565b616afa5785604051602001616153919061af07565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616b54565b511590565b616cc857826020015115616c10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616193565b8260c0015115616cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616193565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616ce157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d3c9061af98565b935060ff1681518110616d5157616d5161a7a2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616da2919061afb7565b604051602081830303815290604052828280616dbd9061af98565b935060ff1681518110616dd257616dd261a7a2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616e1f9061af98565b935060ff1681518110616e3457616e3461a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e819061af98565b935060ff1681518110616e9657616e9661a7a2565b60200260200101819052508760200151828280616eb29061af98565b935060ff1681518110616ec757616ec761a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616f149061af98565b935060ff1681518110616f2957616f2961a7a2565b602090810291909101015287518282616f418161af98565b935060ff1681518110616f5657616f5661a7a2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616fa39061af98565b935060ff1681518110616fb857616fb861a7a2565b6020026020010181905250616fcc4661852f565b8282616fd78161af98565b935060ff1681518110616fec57616fec61a7a2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170399061af98565b935060ff168151811061704e5761704e61a7a2565b6020026020010181905250868282806170669061af98565b935060ff168151811061707b5761707b61a7a2565b60209081029190910101528551156171a25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170cc8161af98565b935060ff16815181106170e1576170e161a7a2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061713190899060040161a530565b600060405180830381865afa15801561714e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617176919081019061aaf4565b82826171818161af98565b935060ff16815181106171965761719661a7a2565b60200260200101819052505b8460200151156172725760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171eb8161af98565b935060ff16815181106172005761720061a7a2565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061724d9061af98565b935060ff16815181106172625761726261a7a2565b6020026020010181905250617439565b6172aa616b4f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61733d5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172ed8161af98565b935060ff16815181106173025761730261a7a2565b60200260200101819052508460a00151604051602001617322919061ae5a565b60405160208183030381529060405282828061724d9061af98565b8460c0015115801561738057506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261737e90511590565b155b156174395760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173c48161af98565b935060ff16815181106173d9576173d961a7a2565b60200260200101819052506173ed886185cf565b6040516020016173fd919061ae5a565b6040516020818303038152906040528282806174189061af98565b935060ff168151811061742d5761742d61a7a2565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261746d90511590565b6175025760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174b08161af98565b935060ff16815181106174c5576174c561a7a2565b602002602001018190525084604001518282806174e19061af98565b935060ff16815181106174f6576174f661a7a2565b60200260200101819052505b6060850151156176235760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261754b8161af98565b935060ff16815181106175605761756061a7a2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156175cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175f7919081019061aaf4565b82826176028161af98565b935060ff16815181106176175761761761a7a2565b60200260200101819052505b60e085015151156176ca5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261766d8161af98565b935060ff16815181106176825761768261a7a2565b602002602001018190525061769e8560e001516000015161852f565b82826176a98161af98565b935060ff16815181106176be576176be61a7a2565b60200260200101819052505b60e085015160200151156177745760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177178161af98565b935060ff168151811061772c5761772c61a7a2565b60200260200101819052506177488560e001516020015161852f565b82826177538161af98565b935060ff16815181106177685761776861a7a2565b60200260200101819052505b60e0850151604001511561781e5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177c18161af98565b935060ff16815181106177d6576177d661a7a2565b60200260200101819052506177f28560e001516040015161852f565b82826177fd8161af98565b935060ff16815181106178125761781261a7a2565b60200260200101819052505b60e085015160600151156178c85760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261786b8161af98565b935060ff16815181106178805761788061a7a2565b602002602001018190525061789c8560e001516060015161852f565b82826178a78161af98565b935060ff16815181106178bc576178bc61a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156178e6576178e661a685565b60405190808252806020026020018201604052801561791957816020015b60608152602001906001900390816179045790505b50905060005b8260ff168160ff16101561797257838160ff16815181106179425761794261a7a2565b6020026020010151828260ff168151811061795f5761795f61a7a2565b602090810291909101015260010161791f565b5093505050505b949350505050565b6179a86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617a2e9186910161b022565b600060405180830381865afa158015617a4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a73919081019061aaf4565b90506000617a8186836190be565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ab1919061a464565b6000604051808303816000875af1158015617ad0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617af8919081019061b069565b805190915060030b15801590617b115750602081015151155b8015617b205750604081015151155b15616afa5781600081518110617b3857617b3861a7a2565b6020026020010151604051602001616153919061b11f565b60606000617b858560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617bbc9082905b90619213565b15617d19576000617c3982617c3384617c2d617bff8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061923a565b9061929c565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c9d908290619213565b15617d0757604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d04905b8290619321565b90505b617d1081619347565b92505050616080565b8215617d3257848460405160200161615392919061b30b565b5050604080516020810190915260008152616080565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d7257505050565b6000617d7f8484846193b0565b90506000617d8c82617981565b602081015181519192509060030b158015617e285750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2890604080518082018252600080825260209182015281518083019092528451825280850190820152617bb6565b15617e3557505050505050565b60408201515115617e55578160400151604051602001616153919061b3b2565b80604051602001616153919061b410565b60606000617e9b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f00905b82906184ce565b15617f6f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90839061994b565b619347565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fd1905b82906199d5565b60010361809e57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803790617cfd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a905b8390619321565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180fd90617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618165908390619a6f565b905060008160018351618178919061a637565b815181106181885761818861a7a2565b6020026020010151905061822b617f6a6181fe6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061994b565b95945050505050565b82604051602001616153919061b47b565b50919050565b606060006182808360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506182e290617ef9565b156182f05761608081619347565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261834f90617fca565b6001036183b957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90618097565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261841890617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618480908390619a6f565b90506001815111156184bc57806002825161849b919061a637565b815181106184ab576184ab61a7a2565b602002602001015192505050919050565b5082604051602001616153919061b47b565b8051825160009111156184e357506000615f87565b815183516020850151600092916184f99161b559565b618503919061a637565b90508260200151810361851a576001915050615f87565b82516020840151819020912014905092915050565b6060600061853c83619b14565b600101905060008167ffffffffffffffff81111561855c5761855c61a685565b6040519080825280601f01601f191660200182016040528015618586576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461859057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161865b905b8290619bf6565b1561869b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186fa90618654565b1561873a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879990618654565b156187d957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261883890618654565b8061889d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261889d90618654565b156188dd57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261893c90618654565b806189a15750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a190618654565b156189e157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4090618654565b80618aa55750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa590618654565b15618ae557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4490618654565b80618ba95750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ba990618654565b15618be957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4890618654565b15618c8857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ce790618654565b15618d2757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8690618654565b15618dc657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2590618654565b15618e6557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ec490618654565b15618f0457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6390618654565b80618fc85750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fc890618654565b1561900857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906790618654565b156190a757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616153929060200161b56c565b60608060005b845181101561914957818582815181106190e0576190e061a7a2565b60200260200101516040516020016190f992919061a9d3565b604051602081830303815290604052915060018551619118919061a637565b8114619141578160405160200161912f919061b6d5565b60405160208183030381529060405291505b6001016190c4565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619162579050509050838160008151811061918d5761918d61a7a2565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191e1576191e161a7a2565b602002602001018190525081816002815181106192005761920061a7a2565b6020908102919091010152949350505050565b60208083015183518351928401516000936192319291849190619c0a565b14159392505050565b6040805180820190915260008082526020820152600061926c8460000151856020015185600001518660200151619d1b565b905083602001518161927e919061a637565b8451859061928d90839061a637565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156192c1575081615f87565b60208083015190840151600191146192e85750815160208481015190840151829020919020145b8015619319578251845185906192ff90839061a637565b905250825160208501805161931590839061b559565b9052505b509192915050565b6040805180820190915260008082526020820152619340838383619e3b565b5092915050565b60606000826000015167ffffffffffffffff8111156193685761936861a685565b6040519080825280601f01601f191660200182016040528015619392576020820181803683370190505b50905060006020820190506193408185602001518660000151619ee6565b606060006193bc616379565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816193d957905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194349061af98565b935060ff16815181106194495761944961a7a2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161949a919061b716565b6040516020818303038152906040528282806194b59061af98565b935060ff16815181106194ca576194ca61a7a2565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195179061af98565b935060ff168151811061952c5761952c61a7a2565b602002602001018190525082604051602001619548919061aec6565b6040516020818303038152906040528282806195639061af98565b935060ff16815181106195785761957861a7a2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806195c59061af98565b935060ff16815181106195da576195da61a7a2565b60200260200101819052506195ef8784619f60565b82826195fa8161af98565b935060ff168151811061960f5761960f61a7a2565b6020908102919091010152855151156196bb5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196618161af98565b935060ff16815181106196765761967661a7a2565b602002602001018190525061968f866000015184619f60565b828261969a8161af98565b935060ff16815181106196af576196af61a7a2565b60200260200101819052505b8560800151156197295760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197048161af98565b935060ff16815181106197195761971961a7a2565b602002602001018190525061978f565b841561978f5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261976e8161af98565b935060ff16815181106197835761978361a7a2565b60200260200101819052505b6040860151511561982b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197d98161af98565b935060ff16815181106197ee576197ee61a7a2565b6020026020010181905250856040015182828061980a9061af98565b935060ff168151811061981f5761981f61a7a2565b60200260200101819052505b8560600151156198955760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198748161af98565b935060ff16815181106198895761988961a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198b3576198b361a685565b6040519080825280602002602001820160405280156198e657816020015b60608152602001906001900390816198d15790505b50905060005b8260ff168160ff16101561993f57838160ff168151811061990f5761990f61a7a2565b6020026020010151828260ff168151811061992c5761992c61a7a2565b60209081029190910101526001016198ec565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619970575081615f87565b815183516020850151600092916199869161b559565b619990919061a637565b602084015190915060019082146199b1575082516020840151819020908220145b80156199cc578351855186906199c890839061a637565b9052505b50929392505050565b60008082600001516199f98560000151866020015186600001518760200151619d1b565b619a03919061b559565b90505b83516020850151619a17919061b559565b81116193405781619a278161b75b565b9250508260000151619a5e856020015183619a42919061a637565b8651619a4e919061a637565b8386600001518760200151619d1b565b619a68919061b559565b9050619a06565b60606000619a7d84846199d5565b619a8890600161b559565b67ffffffffffffffff811115619aa057619aa061a685565b604051908082528060200260200182016040528015619ad357816020015b6060815260200190600190039081619abe5790505b50905060005b8151811015617d4857619aef617f6a8686619321565b828281518110619b0157619b0161a7a2565b6020908102919091010152600101619ad9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b5d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619ba757662386f26fc10000830492506010015b6305f5e1008310619bbf576305f5e100830492506008015b6127108310619bd357612710830492506004015b60648310619be5576064830492506002015b600a8310615f875760010192915050565b6000619c028383619fa0565b159392505050565b600080858411619d115760208411619cbd5760008415619c55576001619c3186602061a637565b619c3c90600861b775565b619c4790600261b873565b619c51919061a637565b1990505b8351811685619c64898961b559565b619c6e919061a637565b805190935082165b818114619ca857878411619c905787945050505050617979565b83619c9a8161b87f565b945050828451169050619c76565b619cb2878561b559565b945050505050617979565b838320619cca858861a637565b619cd4908761b559565b91505b858210619d0f57848220808203619cfc57619cf2868461b559565b9350505050617979565b619d0760018461a637565b925050619cd7565b505b5092949350505050565b60008381868511619e265760208511619dd55760008515619d67576001619d4387602061a637565b619d4e90600861b775565b619d5990600261b873565b619d63919061a637565b1990505b84518116600087619d788b8b61b559565b619d82919061a637565b855190915083165b828114619dc757818610619daf57619da28b8b61b559565b9650505050505050617979565b85619db98161b75b565b965050838651169050619d8a565b859650505050505050617979565b508383206000905b619de7868961a637565b8211619e2457858320808203619e035783945050505050617979565b619e0e60018561b559565b9350508180619e1c9061b75b565b925050619ddd565b505b619e30878761b559565b979650505050505050565b60408051808201909152600080825260208201526000619e6d8560000151866020015186600001518760200151619d1b565b602080870180519186019190915251909150619e89908261a637565b835284516020860151619e9c919061b559565b8103619eab5760008552619edd565b83518351619eb9919061b559565b85518690619ec890839061a637565b9052508351619ed7908261b559565b60208601525b50909392505050565b60208110619f1e5781518352619efd60208461b559565b9250619f0a60208361b559565b9150619f1760208261a637565b9050619ee6565b6000198115619f4d576001619f3483602061a637565b619f409061010061b873565b619f4a919061a637565b90505b9151835183169219169190911790915250565b60606000619f6e848461644c565b8051602080830151604051939450619f889390910161b896565b60405160208183030381529060405291505092915050565b8151815160009190811115619fb3575081515b6020808501519084015160005b8381101561a06c578251825180821461a03c57600019602087101561a01b57600184619fed89602061a637565b619ff7919061b559565b61a00290600861b775565b61a00d90600261b873565b61a017919061a637565b1990505b818116838216818103911461a039579750615f879650505050505050565b50505b61a04760208661b559565b945061a05460208561b559565b9350505060208161a065919061b559565b9050619fc0565b5084518651616afa919061b8ee565b610c9f8061b90f83390190565b6113e28061c5ae83390190565b61182a8061d99083390190565b610d5e8061f1ba83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0f261a0f7565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0f26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1a95783516001600160a01b031683526020938401939092019160010161a182565b509095945050505050565b60005b8381101561a1cf57818101518382015260200161a1b7565b50506000910152565b6000815180845261a1f081602086016020860161a1b4565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a2d084865161a1d8565b602095860195909450929092019160010161a296565b50919750505060209485019492909201915060010161a22c565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3605781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a320565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a3d6604088018261a1d8565b905060208201519150868103602088015261a3f1818361a30c565b96505050602093840193919091019060010161a392565b600082825180855260208501945060208160051b8301016020850160005b8381101561a45857601f1985840301885261a44283835161a1d8565b602098890198909350919091019060010161a426565b50909695505050505050565b602081526000616080602083018461a408565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4f8604087018261a30c565b955050602093840193919091019060010161a49f565b60006020828403121561a52057600080fd5b8151801515811461608057600080fd5b602081526000616080602083018461a1d8565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616afa608083018461a1d8565b600181811c9082168061a58e57607f821691505b602082108103618245577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561a5d957600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061822b606083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f8757615f8761a608565b828152604060208201526000617979604083018461a1d8565b6001600160a01b0383168152604060208201526000617979604083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a6d75761a6d761a685565b60405290565b60008067ffffffffffffffff84111561a6f85761a6f861a685565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a7275761a72761a685565b60405283815290508082840185101561a73f57600080fd5b617d4884602083018561a1b4565b600082601f83011261a75e57600080fd5b6160808383516020850161a6dd565b60006020828403121561a77f57600080fd5b815167ffffffffffffffff81111561a79657600080fd5b615f838482850161a74d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a36057815186526020958601959091019060010161a7e5565b60608152600061a816606083018661a408565b828103602084015261a828818661a7d1565b9150508215156040830152949350505050565b6001600160a01b038516815260806020820152600061a85d608083018661a408565b828103604084015261a86f818661a7d1565b915050821515606083015295945050505050565b60008261a8b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608152600061a8d1606083018661a1d8565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a91060a083018661a1d8565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a96181601a85016020880161a1b4565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a99e81601c84016020880161a1b4565b01601c01949350505050565b60006020828403121561a9bc57600080fd5b81516001600160a01b038116811461608057600080fd5b6000835161a9e581846020880161a1b4565b83519083019061a9f981836020880161a1b4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aa3a81601a85016020880161a1b4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161aa7781603384016020880161a1b4565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561ab0657600080fd5b815167ffffffffffffffff81111561ab1d57600080fd5b8201601f8101841361ab2e57600080fd5b615f838482516020840161a6dd565b6000855161ab4f818460208a0161a1b4565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ab89816001840160208a0161a1b4565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161abc781600284016020890161a1b4565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ac0981600284016020880161a1b4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ac54604083018461a1d8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161accb81601f85016020870161a1b4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061ad38604083018461a1d8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061ad8a604083018461a1d8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161ae0181601485016020870161a1b4565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061ae48604083018561a1d8565b828103602084015261607c818561a1d8565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161ae9281600185016020870161a1b4565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aed881846020870161a1b4565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161af8b81604b85016020870161a1b4565b91909101604b0192915050565b600060ff821660ff810361afae5761afae61a608565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561b07b57600080fd5b815167ffffffffffffffff81111561b09257600080fd5b82016060818503121561b0a457600080fd5b61b0ac61a6b4565b81518060030b811461b0bd57600080fd5b8152602082015167ffffffffffffffff81111561b0d957600080fd5b61b0e58682850161a74d565b602083015250604082015167ffffffffffffffff81111561b10557600080fd5b61b1118682850161a74d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b17d81602185016020870161a1b4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b36981602185016020880161a1b4565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b3a681602e84016020880161a1b4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b46e81602285016020870161a1b4565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b4b381600e85016020870161a1b4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615f8757615f8761a608565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b5a481601885016020880161a1b4565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b5e181601c84016020880161a1b4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b6e781846020870161a1b4565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b74e81601c85016020870161a1b4565b91909101601c0192915050565b6000600019820361b76e5761b76e61a608565b5060010190565b8082028115828204841417615f8757615f8761a608565b6001815b600184111561b7c75780850481111561b7ab5761b7ab61a608565b600184161561b7b957908102905b60019390931c92800261b790565b935093915050565b60008261b7de57506001615f87565b8161b7eb57506000615f87565b816001811461b801576002811461b80b5761b827565b6001915050615f87565b60ff84111561b81c5761b81c61a608565b50506001821b615f87565b5060208310610133831016604e8410600b841016171561b84a575081810a615f87565b61b857600019848461b78c565b806000190482111561b86b5761b86b61a608565b029392505050565b6000616080838361b7cf565b60008161b88e5761b88e61a608565b506000190190565b6000835161b8a881846020880161a1b4565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b8e281600184016020880161a1b4565b01600101949350505050565b81810360008312801583831316838312821617156193405761934061a60856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212203c84eed415f53c6b73679bdd3c1ebe23a4c98cf0abb3f4090db80e6ae1ff633164736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -344,6 +344,37 @@ func (_GatewayEVMTest *GatewayEVMTestCallerSession) TSSROLE() ([32]byte, error) return _GatewayEVMTest.Contract.TSSROLE(&_GatewayEVMTest.CallOpts) } +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GatewayEVMTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _GatewayEVMTest.Contract.WITHDRAWERROLE(&_GatewayEVMTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _GatewayEVMTest.Contract.WITHDRAWERROLE(&_GatewayEVMTest.CallOpts) +} + // ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. // // Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) @@ -811,25 +842,25 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceive return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x9620d7ed. +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS") +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer") } -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x9620d7ed. +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x9620d7ed. +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } // TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. @@ -874,25 +905,25 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceive return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xd46e9b57. +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. // -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS") +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer") } -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xd46e9b57. +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. // -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xd46e9b57. +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. // -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } // TestForwardCallToReceiveNoParams is a paid mutator transaction binding the contract method 0x44671b94. @@ -1084,25 +1115,25 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThr return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xbcd9925e. +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer") } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xbcd9925e. +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xbcd9925e. +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } // TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. @@ -1126,25 +1157,25 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawThroughCusto return _GatewayEVMTest.Contract.TestWithdrawThroughCustody(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x766d0ded. +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawThroughCustodyFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawThroughCustodyFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer") } -// TestWithdrawThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x766d0ded. +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustodyFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x766d0ded. +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotTSS() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawThroughCustodyFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) } // GatewayEVMTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the GatewayEVMTest contract. diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index 7545dc7a..13ef7da5 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220af2aee4bb8619080193c563076055a5fe28cf059e1b2e4432ec1ac64d5deb0a264736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a0033", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220e575ea5a18b9462f7a8e597ab970f6a09ecc09fd51c56fa3c6c1397f89f20af164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 1a4d6d48..94f0e9a1 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf218061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6113e28061858283390190565b61182a8061996483390190565b610d5e8061b18e83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220c454dfc8a8ab02623c04baa9729e7e28deb52a3e88ef6413ce2b7304927bb5ac64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf218061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6113e28061858283390190565b61182a8061996483390190565b610d5e8061b18e83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220ab47a8df273b8e4c91a38c4269035bd99a4d4c25cf8bd7f63c607b59dcb202b964736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index ed33cb75..cf426760 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220975ffeceb66195fca55e75e929fa8630b2095b6d3ae11711ecb5d1374d5f145464736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e0d221e2700a741409740f6a05e6ac8e799e50b3e2a6e75b5173b33a31fa502464736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 1c8a8599..7281d65a 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620105c6806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6113e28062009ef483390190565b61182a806200b2d683390190565b610d5e806200cb0083390190565b61080c806200d85e83390190565b610b3f806200e06a83390190565b6119e8806200eba983390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220ddb6d6c4d104fc6d2f5c6ce9a1d66252fca95b7b25d839de654d81d453d176e464736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220fbd69f8a6a30bdc247946500ad2bb4f7e9f585a260ef649595b89d427fb12f2064736f6c634300081a003360c060405234801561001057600080fd5b506040516119e83803806119e883398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a0516115b461043460003960006102f30152600081816102c4015281816109430152610a4901526115b46000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806385e1f4d0116100e3578063d9eeebed1161008c578063eddeb12311610066578063eddeb123146103f7578063f2441b321461040a578063f687d12a1461042a57600080fd5b8063d9eeebed1461035d578063dd62ed3e14610391578063e2f535b8146103d757600080fd5b8063a9059cbb116100bd578063a9059cbb14610322578063c701262614610335578063c835d7cc1461034857600080fd5b806385e1f4d0146102bf57806395d89b41146102e6578063a3413d03146102ee57600080fd5b8063313ce5671161014557806347e7ef241161011f57806347e7ef241461026d5780634d8943bb1461028057806370a082311461028957600080fd5b8063313ce567146102055780633ce4a5bc1461021a57806342966c681461025a57600080fd5b8063095ea7b311610176578063095ea7b3146101c757806318160ddd146101ea57806323b872dd146101f257600080fd5b806306fdde0314610192578063091d2788146101b0575b600080fd5b61019a61043d565b6040516101a79190611193565b60405180910390f35b6101b960025481565b6040519081526020016101a7565b6101da6101d53660046111d2565b6104cf565b60405190151581526020016101a7565b6006546101b9565b6101da6102003660046111fe565b6104e6565b60095460405160ff90911681526020016101a7565b61023573735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6101da61026836600461123f565b61057d565b6101da61027b3660046111d2565b610591565b6101b960035481565b6101b9610297366004611258565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b61019a6106e5565b6103157f000000000000000000000000000000000000000000000000000000000000000081565b6040516101a79190611275565b6101da6103303660046111d2565b6106f4565b6101da6103433660046112e5565b610701565b61035b610356366004611258565b610850565b005b610365610917565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101a7565b6101b961039f3660046113dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b61035b61040536600461123f565b610b35565b6000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b61035b61043836600461123f565b610bb7565b60606007805461044c90611416565b80601f016020809104026020016040519081016040528092919081815260200182805461047890611416565b80156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b5050505050905090565b60006104dc338484610c39565b5060015b92915050565b60006104f3848484610d42565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020548281101561055e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610572853361056d8685611498565b610c39565b506001949350505050565b60006105893383610efd565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105cf575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156105f3575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561062a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610634838361103f565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106d49186906114ab565b60405180910390a250600192915050565b60606008805461044c90611416565b60006104dc338484610d42565b600080600061070e610917565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c491906114cd565b6107fa576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108043385610efd565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161083d918991899187916114ef565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461089d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa1580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ce919061151e565b905073ffffffffffffffffffffffffffffffffffffffff8116610a1d576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad0919061153b565b905080600003610b0c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610b1f9190611554565b610b29919061156b565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b82576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161090c565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c04576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161090c565b73ffffffffffffffffffffffffffffffffffffffff8316610c86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610cd3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d8f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610ddc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610e3c576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e468282611498565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610e8990849061156b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eef91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610f4a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015610faa576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb48282611498565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081209190915560068054849290610fef908490611498565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610d35565b73ffffffffffffffffffffffffffffffffffffffff821661108c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461109e919061156b565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906110d890849061156b565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561115557602081850181015186830182015201611139565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006111a6602083018461112f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146111cf57600080fd5b50565b600080604083850312156111e557600080fd5b82356111f0816111ad565b946020939093013593505050565b60008060006060848603121561121357600080fd5b833561121e816111ad565b9250602084013561122e816111ad565b929592945050506040919091013590565b60006020828403121561125157600080fd5b5035919050565b60006020828403121561126a57600080fd5b81356111a6816111ad565b60208101600383106112b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156112f857600080fd5b823567ffffffffffffffff81111561130f57600080fd5b8301601f8101851361132057600080fd5b803567ffffffffffffffff81111561133a5761133a6112b6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156113a6576113a66112b6565b6040528181528282016020018710156113be57600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156113f057600080fd5b82356113fb816111ad565b9150602083013561140b816111ad565b809150509250929050565b600181811c9082168061142a57607f821691505b602082108103611463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104e0576104e0611469565b6040815260006114be604083018561112f565b90508260208301529392505050565b6000602082840312156114df57600080fd5b815180151581146111a657600080fd5b608081526000611502608083018761112f565b6020830195909552506040810192909252606090910152919050565b60006020828403121561153057600080fd5b81516111a6816111ad565b60006020828403121561154d57600080fd5b5051919050565b80820281158282048414176104e0576104e0611469565b808201808211156104e0576104e061146956fea264697066735822122062e8c81bc642fb8e9a1eaabde5abdece7e58510051b4aa2bee706dc57435041764736f6c634300081a0033a2646970667358221220164b83473b869428823f670619e911b8be4a66adf260592edd8a4561b56826a764736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201027a806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617640565b60405180910390f35b6101506111ef565b60405161013f91906176dc565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617842565b610128611dd0565b61019a6125d9565b60405161013f91906178e0565b6101af6126a9565b60405161013f9190617957565b6101286127a4565b6101af612d69565b61019a612e64565b6101dc612f34565b604051901515815260200161013f565b610128613008565b6101326133b4565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617525565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617525565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613414565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617533565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617541565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906179ee565b506040516109e99061754f565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613414565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f9061755d565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061756b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb90617579565b610cea96959493929190617a10565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec791906179ee565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c91906179ee565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f191906179ee565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617b05565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617b05565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617b52565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617b6b565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617b95565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617bd4565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617bfc565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617c51565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617c92565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617cab565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d9190810190617db5565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617b52565b9050611c4481611c3f620f424087617e19565b613433565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617b05565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617b05565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617b6b565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e54602d5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0392831694507f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc577169350911690603401604051602081830303815290604052620f42406000602d60009054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120399190617b52565b8760405161204c96959493929190617e2c565b60405180910390a2602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120c657600080fd5b505af11580156120da573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261217092620f4240916001600160a01b0316908790600401617e7f565b600060405180830381600087803b15801561218a57600080fd5b505af115801561219e573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222e9190617b52565b905061223b816000613433565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b1580156122b557600080fd5b505af11580156122c9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561235b57600080fd5b505af115801561236f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123b892506001600160a01b039091169086908a908a908a90617c51565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561244e57600080fd5b505af1158015612462573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124a79086908690617c92565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125899216908790600401617cab565b60006040518083038185885af11580156125a7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125d09190810190617db5565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461261c90617b05565b80601f016020809104026020016040519081016040528092919081815260200182805461264890617b05565b80156126955780601f1061266a57610100808354040283529160200191612695565b820191906000526020600020905b81548152906001019060200180831161267857829003601f168201915b5050505050815260200190600101906125fd565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127395790505b505050505081525050815260200190600101906126cd565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061282090879087908790602401617b6b565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156128f357600080fd5b505af1158015612907573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561299957600080fd5b505af11580156129ad573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911692507f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f915060340160408051601f1981840301815290829052612a21918590617eb9565b60405180910390a2602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690630ac7c44c90603401604051602081830303815290604052836040518363ffffffff1660e01b8152600401612a8e929190617eb9565b600060405180830381600087803b158015612aa857600080fd5b505af1158015612abc573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b3957600080fd5b505af1158015612b4d573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bdf57600080fd5b505af1158015612bf3573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c389085908590617c92565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cb257600080fd5b505af1158015612cc6573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692612d1a9216908690600401617cab565b60006040518083038185885af1158015612d38573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612d619190810190617db5565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e4c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612df95790505b50505050508152505081526020019060010190612d8d565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612ea790617b05565b80601f0160208091040260200160405190810160405280929190818152602001828054612ed390617b05565b8015612f205780601f10612ef557610100808354040283529160200191612f20565b820191906000526020600020905b815481529060010190602001808311612f0357829003601f168201915b505050505081526020019060010190612e88565b60085460009060ff1615612f4c575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130019190617b52565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061308490879087908790602401617b6b565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090951694909417909352602554905191935060009261311d926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261313c918490602401617eb9565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0ac7c44c00000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131f9916001600160a01b0391909116906000908690600401617bd4565b600060405180830381600087803b15801561321357600080fd5b505af1158015613227573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063a0a1730b91506034016040516020818303038152906040528888886040518563ffffffff1660e01b815260040161331e9493929190617ede565b600060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d915060440161229b565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061341e617587565b6134298484836134b2565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561349e57600080fd5b505afa158015612d61573d6000803e3d6000fd5b6000806134bf858461352d565b90506135226040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161350d929190617cab565b60405160208183030381529060405285613539565b9150505b9392505050565b60006135268383613567565b60c0810151516000901561355d5761355684848460c00151613582565b9050613526565b6135568484613728565b60006135738383613813565b61352683836020015184613539565b60008061358d613823565b9050600061359b86836138f6565b905060006135b28260600151836020015185613d9c565b905060006135c283838989613fae565b905060006135cf82614e2b565b602081015181519192509060030b15613642578982604001516040516020016135f9929190617f1c565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261363991600401617f9d565b60405180910390fd5b60006136856040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001614ffa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906136d8908490600401617f9d565b602060405180830381865afa1580156136f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137199190617fb0565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061377d908790600401617f9d565b600060405180830381865afa15801561379a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137c29190810190617db5565b905060006137f082856040516020016137dc929190617fd9565b6040516020818303038152906040526151fa565b90506001600160a01b0381166134295784846040516020016135f9929190618008565b61381f8282600061520d565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906138aa9084906004016180b3565b600060405180830381865afa1580156138c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138ef91908101906180fa565b9250505090565b6139286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506139736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61397c85615310565b6020820152600061398c866156f5565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156139ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139f691908101906180fa565b86838560200151604051602001613a109493929190618143565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613a68908590600401617f9d565b600060405180830381865afa158015613a85573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aad91908101906180fa565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613af5908490600401618247565b602060405180830381865afa158015613b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3691906179ee565b613b4b57816040516020016135f99190618299565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613b9090849060040161832b565b600060405180830381865afa158015613bad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bd591908101906180fa565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613c1c90849060040161837d565b602060405180830381865afa158015613c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5d91906179ee565b15613cf2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613ca790849060040161837d565b600060405180830381865afa158015613cc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cec91908101906180fa565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001613d1791906183cf565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613d43929190617eb9565b600060405180830381865afa158015613d60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d8891908101906180fa565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613db85790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613e1857613e1861843b565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110613e6c57613e6c61843b565b602002602001018190525084604051602001613e88919061846a565b60405160208183030381529060405281600281518110613eaa57613eaa61843b565b602002602001018190525082604051602001613ec691906184d6565b60405160208183030381529060405281600381518110613ee857613ee861843b565b60200260200101819052506000613efe82614e2b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250613f8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290615978565b613fa457856040516020016135f99190618517565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015613ffe565b511590565b614172578260200151156140ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613639565b8260c0015115614172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613639565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161418b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806141e6906185a8565b935060ff16815181106141fb576141fb61843b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161424c91906185c7565b604051602081830303815290604052828280614267906185a8565b935060ff168151811061427c5761427c61843b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806142c9906185a8565b935060ff16815181106142de576142de61843b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061432b906185a8565b935060ff16815181106143405761434061843b565b6020026020010181905250876020015182828061435c906185a8565b935060ff16815181106143715761437161843b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806143be906185a8565b935060ff16815181106143d3576143d361843b565b6020908102919091010152875182826143eb816185a8565b935060ff16815181106144005761440061843b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061444d906185a8565b935060ff16815181106144625761446261843b565b6020026020010181905250614476466159d9565b8282614481816185a8565b935060ff16815181106144965761449661843b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806144e3906185a8565b935060ff16815181106144f8576144f861843b565b602002602001018190525086828280614510906185a8565b935060ff16815181106145255761452561843b565b602090810291909101015285511561464c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614576816185a8565b935060ff168151811061458b5761458b61843b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906145db908990600401617f9d565b600060405180830381865afa1580156145f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261462091908101906180fa565b828261462b816185a8565b935060ff16815181106146405761464061843b565b60200260200101819052505b84602001511561471c5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614695816185a8565b935060ff16815181106146aa576146aa61843b565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806146f7906185a8565b935060ff168151811061470c5761470c61843b565b60200260200101819052506148e3565b614754613ff98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6147e75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614797816185a8565b935060ff16815181106147ac576147ac61843b565b60200260200101819052508460a001516040516020016147cc919061846a565b6040516020818303038152906040528282806146f7906185a8565b8460c0015115801561482a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261482890511590565b155b156148e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261486e816185a8565b935060ff16815181106148835761488361843b565b602002602001018190525061489788615a79565b6040516020016148a7919061846a565b6040516020818303038152906040528282806148c2906185a8565b935060ff16815181106148d7576148d761843b565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261491790511590565b6149ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261495a816185a8565b935060ff168151811061496f5761496f61843b565b6020026020010181905250846040015182828061498b906185a8565b935060ff16815181106149a0576149a061843b565b60200260200101819052505b606085015115614acd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826149f5816185a8565b935060ff1681518110614a0a57614a0a61843b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614a79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614aa191908101906180fa565b8282614aac816185a8565b935060ff1681518110614ac157614ac161843b565b60200260200101819052505b60e08501515115614b745760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614b17816185a8565b935060ff1681518110614b2c57614b2c61843b565b6020026020010181905250614b488560e00151600001516159d9565b8282614b53816185a8565b935060ff1681518110614b6857614b6861843b565b60200260200101819052505b60e08501516020015115614c1e5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614bc1816185a8565b935060ff1681518110614bd657614bd661843b565b6020026020010181905250614bf28560e00151602001516159d9565b8282614bfd816185a8565b935060ff1681518110614c1257614c1261843b565b60200260200101819052505b60e08501516040015115614cc85760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614c6b816185a8565b935060ff1681518110614c8057614c8061843b565b6020026020010181905250614c9c8560e00151604001516159d9565b8282614ca7816185a8565b935060ff1681518110614cbc57614cbc61843b565b60200260200101819052505b60e08501516060015115614d725760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282614d15816185a8565b935060ff1681518110614d2a57614d2a61843b565b6020026020010181905250614d468560e00151606001516159d9565b8282614d51816185a8565b935060ff1681518110614d6657614d6661843b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614d9057614d90617ccd565b604051908082528060200260200182016040528015614dc357816020015b6060815260200190600190039081614dae5790505b50905060005b8260ff168160ff161015614e1c57838160ff1681518110614dec57614dec61843b565b6020026020010151828260ff1681518110614e0957614e0961843b565b6020908102919091010152600101614dc9565b5093505050505b949350505050565b614e526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91614ed891869101618632565b600060405180830381865afa158015614ef5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f1d91908101906180fa565b90506000614f2b8683616568565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401614f5b91906178e0565b6000604051808303816000875af1158015614f7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fa29190810190618679565b805190915060030b15801590614fbb5750602081015151155b8015614fca5750604081015151155b15613fa45781600081518110614fe257614fe261843b565b60200260200101516040516020016135f9919061872f565b6060600061502f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506150669082905b906166bd565b156151c35760006150e3826150dd846150d76150a98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906166e4565b90616746565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506151479082906166bd565b156151b157604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151ae905b82906167cb565b90505b6151ba816167f1565b92505050613526565b82156151dc5784846040516020016135f992919061891b565b5050604080516020810190915260008152613526565b509392505050565b6000808251602084016000f09392505050565b8160a001511561521c57505050565b600061522984848461685a565b9050600061523682614e2b565b602081015181519192509060030b1580156152d25750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152d290604080518082018252600080825260209182015281518083019092528451825280850190820152615060565b156152df57505050505050565b604082015151156152ff5781604001516040516020016135f991906189c2565b806040516020016135f99190618a20565b606060006153458360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506153aa905b8290615978565b1561541957604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261352690615414908390616df5565b6167f1565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261547b905b8290616e7f565b60010361554857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154e1906151a7565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261352690615414905b83906167cb565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155a7906153a3565b156156de57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061560f908390616f19565b9050600081600183516156229190617e19565b815181106156325761563261843b565b602002602001015190506156d56154146156a86040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616df5565b95945050505050565b826040516020016135f99190618a8b565b50919050565b6060600061572a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061578c906153a3565b1561579a57613526816167f1565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157f990615474565b60010361586357604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526135269061541490615541565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158c2906153a3565b156156de57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061592a908390616f19565b90506001815111156159665780600282516159459190617e19565b815181106159555761595561843b565b602002602001015192505050919050565b50826040516020016135f99190618a8b565b80518251600091111561598d5750600061342d565b815183516020850151600092916159a391618b69565b6159ad9190617e19565b9050826020015181036159c457600191505061342d565b82516020840151819020912014905092915050565b606060006159e683616fbe565b600101905060008167ffffffffffffffff811115615a0657615a06617ccd565b6040519080825280601f01601f191660200182016040528015615a30576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615a3a57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615b05905b82906170a0565b15615b4557505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ba490615afe565b15615be457505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c4390615afe565b15615c8357505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ce290615afe565b80615d475750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4790615afe565b15615d8757505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615de690615afe565b80615e4b5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e4b90615afe565b15615e8b57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eea90615afe565b80615f4f5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4f90615afe565b15615f8f57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fee90615afe565b806160535750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261605390615afe565b1561609357505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f290615afe565b1561613257505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261619190615afe565b156161d157505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623090615afe565b1561627057505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162cf90615afe565b1561630f57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261636e90615afe565b156163ae57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261640d90615afe565b806164725750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261647290615afe565b156164b257505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261651190615afe565b1561655157505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516135f99290602001618b7c565b60608060005b84518110156165f3578185828151811061658a5761658a61843b565b60200260200101516040516020016165a3929190617fd9565b6040516020818303038152906040529150600185516165c29190617e19565b81146165eb57816040516020016165d99190618ce5565b60405160208183030381529060405291505b60010161656e565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161660c57905050905083816000815181106166375761663761843b565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061668b5761668b61843b565b602002602001018190525081816002815181106166aa576166aa61843b565b6020908102919091010152949350505050565b60208083015183518351928401516000936166db92918491906170b4565b14159392505050565b6040805180820190915260008082526020820152600061671684600001518560200151856000015186602001516171c5565b90508360200151816167289190617e19565b84518590616737908390617e19565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561676b57508161342d565b60208083015190840151600191146167925750815160208481015190840151829020919020145b80156167c3578251845185906167a9908390617e19565b90525082516020850180516167bf908390618b69565b9052505b509192915050565b60408051808201909152600080825260208201526167ea8383836172e5565b5092915050565b60606000826000015167ffffffffffffffff81111561681257616812617ccd565b6040519080825280601f01601f19166020018201604052801561683c576020820181803683370190505b50905060006020820190506167ea8185602001518660000151617390565b60606000616866613823565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161688357905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806168de906185a8565b935060ff16815181106168f3576168f361843b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016169449190618d26565b60405160208183030381529060405282828061695f906185a8565b935060ff16815181106169745761697461843b565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806169c1906185a8565b935060ff16815181106169d6576169d661843b565b6020026020010181905250826040516020016169f291906184d6565b604051602081830303815290604052828280616a0d906185a8565b935060ff1681518110616a2257616a2261843b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616a6f906185a8565b935060ff1681518110616a8457616a8461843b565b6020026020010181905250616a99878461740a565b8282616aa4816185a8565b935060ff1681518110616ab957616ab961843b565b602090810291909101015285515115616b655760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616b0b816185a8565b935060ff1681518110616b2057616b2061843b565b6020026020010181905250616b3986600001518461740a565b8282616b44816185a8565b935060ff1681518110616b5957616b5961843b565b60200260200101819052505b856080015115616bd35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616bae816185a8565b935060ff1681518110616bc357616bc361843b565b6020026020010181905250616c39565b8415616c395760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616c18816185a8565b935060ff1681518110616c2d57616c2d61843b565b60200260200101819052505b60408601515115616cd55760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616c83816185a8565b935060ff1681518110616c9857616c9861843b565b60200260200101819052508560400151828280616cb4906185a8565b935060ff1681518110616cc957616cc961843b565b60200260200101819052505b856060015115616d3f5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282616d1e816185a8565b935060ff1681518110616d3357616d3361843b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616d5d57616d5d617ccd565b604051908082528060200260200182016040528015616d9057816020015b6060815260200190600190039081616d7b5790505b50905060005b8260ff168160ff161015616de957838160ff1681518110616db957616db961843b565b6020026020010151828260ff1681518110616dd657616dd661843b565b6020908102919091010152600101616d96565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616e1a57508161342d565b81518351602085015160009291616e3091618b69565b616e3a9190617e19565b60208401519091506001908214616e5b575082516020840151819020908220145b8015616e7657835185518690616e72908390617e19565b9052505b50929392505050565b6000808260000151616ea385600001518660200151866000015187602001516171c5565b616ead9190618b69565b90505b83516020850151616ec19190618b69565b81116167ea5781616ed181618d6b565b9250508260000151616f08856020015183616eec9190617e19565b8651616ef89190617e19565b83866000015187602001516171c5565b616f129190618b69565b9050616eb0565b60606000616f278484616e7f565b616f32906001618b69565b67ffffffffffffffff811115616f4a57616f4a617ccd565b604051908082528060200260200182016040528015616f7d57816020015b6060815260200190600190039081616f685790505b50905060005b81518110156151f257616f9961541486866167cb565b828281518110616fab57616fab61843b565b6020908102919091010152600101616f83565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617007577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617033576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061705157662386f26fc10000830492506010015b6305f5e1008310617069576305f5e100830492506008015b612710831061707d57612710830492506004015b6064831061708f576064830492506002015b600a831061342d5760010192915050565b60006170ac838361744a565b159392505050565b6000808584116171bb576020841161716757600084156170ff5760016170db866020617e19565b6170e6906008618d85565b6170f1906002618e83565b6170fb9190617e19565b1990505b835181168561710e8989618b69565b6171189190617e19565b805190935082165b8181146171525787841161713a5787945050505050614e23565b8361714481618e8f565b945050828451169050617120565b61715c8785618b69565b945050505050614e23565b8383206171748588617e19565b61717e9087618b69565b91505b8582106171b9578482208082036171a65761719c8684618b69565b9350505050614e23565b6171b1600184617e19565b925050617181565b505b5092949350505050565b600083818685116172d0576020851161727f57600085156172115760016171ed876020617e19565b6171f8906008618d85565b617203906002618e83565b61720d9190617e19565b1990505b845181166000876172228b8b618b69565b61722c9190617e19565b855190915083165b828114617271578186106172595761724c8b8b618b69565b9650505050505050614e23565b8561726381618d6b565b965050838651169050617234565b859650505050505050614e23565b508383206000905b6172918689617e19565b82116172ce578583208082036172ad5783945050505050614e23565b6172b8600185618b69565b93505081806172c690618d6b565b925050617287565b505b6172da8787618b69565b979650505050505050565b6040805180820190915260008082526020820152600061731785600001518660200151866000015187602001516171c5565b6020808701805191860191909152519091506173339082617e19565b8352845160208601516173469190618b69565b81036173555760008552617387565b835183516173639190618b69565b85518690617372908390617e19565b90525083516173819082618b69565b60208601525b50909392505050565b602081106173c857815183526173a7602084618b69565b92506173b4602083618b69565b91506173c1602082617e19565b9050617390565b60001981156173f75760016173de836020617e19565b6173ea90610100618e83565b6173f49190617e19565b90505b9151835183169219169190911790915250565b6060600061741884846138f6565b805160208083015160405193945061743293909101618ea6565b60405160208183030381529060405291505092915050565b815181516000919081111561745d575081515b6020808501519084015160005b8381101561751657825182518082146174e65760001960208710156174c557600184617497896020617e19565b6174a19190618b69565b6174ac906008618d85565b6174b7906002618e83565b6174c19190617e19565b1990505b81811683821681810391146174e357975061342d9650505050505050565b50505b6174f1602086618b69565b94506174fe602085618b69565b9350505060208161750f9190618b69565b905061746a565b5084518651613fa49190618efe565b610c9f8062008f1f83390190565b6113e28062009bbe83390190565b61182a806200afa083390190565b610d5e806200c7ca83390190565b6107f6806200d52883390190565b610b3f806200dd1e83390190565b6119e8806200e85d83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016175ca6175cf565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016175ca6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156176815783516001600160a01b031683526020938401939092019160010161765a565b509095945050505050565b60005b838110156176a757818101518382015260200161768f565b50506000910152565b600081518084526176c881602086016020860161768c565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156177d8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156177be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526177a88486516176b0565b602095860195909450929092019160010161776e565b509197505050602094850194929092019150600101617704565b50929695505050505050565b600081518084526020840193506020830160005b828110156178385781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016177f8565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156177d8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526178ae60408801826176b0565b90506020820151915086810360208801526178c981836177e4565b96505050602093840193919091019060010161786a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156177d8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526179428583516176b0565b94506020938401939190910190600101617908565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156177d8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526179d860408701826177e4565b955050602093840193919091019060010161797f565b600060208284031215617a0057600080fd5b8151801515811461352657600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617aca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617aeb60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617b1957607f821691505b6020821081036156ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617b6457600080fd5b5051919050565b606081526000617b7e60608301866176b0565b602083019490945250901515604090910152919050565b608081526000617ba860808301876176b0565b62ffffff861660208401526001600160a01b038516604084015282810360608401526172da81856176b0565b6001600160a01b03841681528260208201526060604082015260006156d560608301846176b0565b60c081526000617c0f60c08301896176b0565b8760208401526001600160a01b03871660408401528281036060840152617c3681876176b0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617c7960a08301866176b0565b6060830194909452509015156080909101529392505050565b828152604060208201526000614e2360408301846176b0565b6001600160a01b0383168152604060208201526000614e2360408301846176b0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617d1f57617d1f617ccd565b60405290565b60008067ffffffffffffffff841115617d4057617d40617ccd565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617d6f57617d6f617ccd565b604052838152905080828401851015617d8757600080fd5b6151f284602083018561768c565b600082601f830112617da657600080fd5b61352683835160208501617d25565b600060208284031215617dc757600080fd5b815167ffffffffffffffff811115617dde57600080fd5b61342984828501617d95565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561342d5761342d617dea565b6001600160a01b038716815260c060208201526000617e4e60c08301886176b0565b86604084015285606084015284608084015282810360a0840152617e7281856176b0565b9998505050505050505050565b608081526000617e9260808301876176b0565b8560208401526001600160a01b038516604084015282810360608401526172da81856176b0565b604081526000617ecc60408301856176b0565b828103602084015261352281856176b0565b608081526000617ef160808301876176b0565b8281036020840152617f0381876176b0565b6040840195909552505090151560609091015292915050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617f5481601a85016020880161768c565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617f9181601c84016020880161768c565b01601c01949350505050565b60208152600061352660208301846176b0565b600060208284031215617fc257600080fd5b81516001600160a01b038116811461352657600080fd5b60008351617feb81846020880161768c565b835190830190617fff81836020880161768c565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161804081601a85016020880161768c565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161807d81603384016020880161768c565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061352660808301846176b0565b60006020828403121561810c57600080fd5b815167ffffffffffffffff81111561812357600080fd5b8201601f8101841361813457600080fd5b61342984825160208401617d25565b60008551618155818460208a0161768c565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161818f816001840160208a0161768c565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516181cd81600284016020890161768c565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161820f81600284016020880161768c565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061825a60408301846176b0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516182d181601f85016020870161768c565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061833e60408301846176b0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061839060408301846176b0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161840781601485016020870161768c565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516184a281600185016020870161768c565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516184e881846020870161768c565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161859b81604b85016020870161768c565b91909101604b0192915050565b600060ff821660ff81036185be576185be617dea565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161862581602985016020870161768c565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061352660808301846176b0565b60006020828403121561868b57600080fd5b815167ffffffffffffffff8111156186a257600080fd5b8201606081850312156186b457600080fd5b6186bc617cfc565b81518060030b81146186cd57600080fd5b8152602082015167ffffffffffffffff8111156186e957600080fd5b6186f586828501617d95565b602083015250604082015167ffffffffffffffff81111561871557600080fd5b61872186828501617d95565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161878d81602185016020870161768c565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161897981602185016020880161768c565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516189b681602e84016020880161768c565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161862581602985016020870161768c565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618a7e81602285016020870161768c565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618ac381600e85016020870161768c565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561342d5761342d617dea565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618bb481601885016020880161768c565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618bf181601c84016020880161768c565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618cf781846020870161768c565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618d5e81601c85016020870161768c565b91909101601c0192915050565b60006000198203618d7e57618d7e617dea565b5060010190565b808202811582820484141761342d5761342d617dea565b6001815b6001841115618dd757808504811115618dbb57618dbb617dea565b6001841615618dc957908102905b60019390931c928002618da0565b935093915050565b600082618dee5750600161342d565b81618dfb5750600061342d565b8160018114618e115760028114618e1b57618e37565b600191505061342d565b60ff841115618e2c57618e2c617dea565b50506001821b61342d565b5060208310610133831016604e8410600b8410161715618e5a575081810a61342d565b618e676000198484618d9c565b8060001904821115618e7b57618e7b617dea565b029392505050565b60006135268383618ddf565b600081618e9e57618e9e617dea565b506000190190565b60008351618eb881846020880161768c565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618ef281600184016020880161768c565b01600101949350505050565b81810360008312801583831316838312821617156167ea576167ea617dea56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b506040516107f63803806107f6833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b6107698061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063a0a1730b146100a4575b600080fd5b6100596100543660046104c1565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057c565b6102af565b60008383836040516024016100ce93929190610665565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061068f565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106b3565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610665565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f0ac7c44c00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690630ac7c44c906103949088908590600401610705565b600060405180830381600087803b1580156103ae57600080fd5b505af11580156103c2573d6000803e3d6000fd5b505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261040d57600080fd5b81356020830160008067ffffffffffffffff84111561042e5761042e6103cd565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047b5761047b6103cd565b60405283815290508082840187101561049357600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104be57600080fd5b50565b60008060008060008060c087890312156104da57600080fd5b863567ffffffffffffffff8111156104f157600080fd5b6104fd89828a016103fc565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461052e57600080fd5b9350606087013567ffffffffffffffff81111561054a57600080fd5b61055689828a016103fc565b9350506080870135915060a087013561056e816104b0565b809150509295509295509295565b6000806000806080858703121561059257600080fd5b843567ffffffffffffffff8111156105a957600080fd5b6105b5878288016103fc565b945050602085013567ffffffffffffffff8111156105d257600080fd5b6105de878288016103fc565b9350506040850135915060608501356105f6816104b0565b939692955090935050565b6000815180845260005b818110156106275760208185018101518683018201520161060b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106786060830186610601565b602083019490945250901515604090910152919050565b6000602082840312156106a157600080fd5b81516106ac816104b0565b9392505050565b6080815260006106c66080830187610601565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526106fa8185610601565b979650505050505050565b6040815260006107186040830185610601565b828103602084015261072a8185610601565b9594505050505056fea26469706673582212204babda0c6b9bc7b1d80b616dce92ddfbe79ae0bb96aad4f2c77ffb6a8c63da7f64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220fbd69f8a6a30bdc247946500ad2bb4f7e9f585a260ef649595b89d427fb12f2064736f6c634300081a003360c060405234801561001057600080fd5b506040516119e83803806119e883398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a0516115b461043460003960006102f30152600081816102c4015281816109430152610a4901526115b46000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806385e1f4d0116100e3578063d9eeebed1161008c578063eddeb12311610066578063eddeb123146103f7578063f2441b321461040a578063f687d12a1461042a57600080fd5b8063d9eeebed1461035d578063dd62ed3e14610391578063e2f535b8146103d757600080fd5b8063a9059cbb116100bd578063a9059cbb14610322578063c701262614610335578063c835d7cc1461034857600080fd5b806385e1f4d0146102bf57806395d89b41146102e6578063a3413d03146102ee57600080fd5b8063313ce5671161014557806347e7ef241161011f57806347e7ef241461026d5780634d8943bb1461028057806370a082311461028957600080fd5b8063313ce567146102055780633ce4a5bc1461021a57806342966c681461025a57600080fd5b8063095ea7b311610176578063095ea7b3146101c757806318160ddd146101ea57806323b872dd146101f257600080fd5b806306fdde0314610192578063091d2788146101b0575b600080fd5b61019a61043d565b6040516101a79190611193565b60405180910390f35b6101b960025481565b6040519081526020016101a7565b6101da6101d53660046111d2565b6104cf565b60405190151581526020016101a7565b6006546101b9565b6101da6102003660046111fe565b6104e6565b60095460405160ff90911681526020016101a7565b61023573735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6101da61026836600461123f565b61057d565b6101da61027b3660046111d2565b610591565b6101b960035481565b6101b9610297366004611258565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b61019a6106e5565b6103157f000000000000000000000000000000000000000000000000000000000000000081565b6040516101a79190611275565b6101da6103303660046111d2565b6106f4565b6101da6103433660046112e5565b610701565b61035b610356366004611258565b610850565b005b610365610917565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101a7565b6101b961039f3660046113dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b61035b61040536600461123f565b610b35565b6000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b61035b61043836600461123f565b610bb7565b60606007805461044c90611416565b80601f016020809104026020016040519081016040528092919081815260200182805461047890611416565b80156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b5050505050905090565b60006104dc338484610c39565b5060015b92915050565b60006104f3848484610d42565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020548281101561055e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610572853361056d8685611498565b610c39565b506001949350505050565b60006105893383610efd565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105cf575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156105f3575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561062a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610634838361103f565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106d49186906114ab565b60405180910390a250600192915050565b60606008805461044c90611416565b60006104dc338484610d42565b600080600061070e610917565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c491906114cd565b6107fa576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108043385610efd565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161083d918991899187916114ef565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461089d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa1580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ce919061151e565b905073ffffffffffffffffffffffffffffffffffffffff8116610a1d576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad0919061153b565b905080600003610b0c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610b1f9190611554565b610b29919061156b565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b82576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161090c565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c04576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161090c565b73ffffffffffffffffffffffffffffffffffffffff8316610c86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610cd3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d8f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610ddc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610e3c576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e468282611498565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610e8990849061156b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eef91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610f4a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015610faa576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb48282611498565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081209190915560068054849290610fef908490611498565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610d35565b73ffffffffffffffffffffffffffffffffffffffff821661108c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461109e919061156b565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906110d890849061156b565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561115557602081850181015186830182015201611139565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006111a6602083018461112f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146111cf57600080fd5b50565b600080604083850312156111e557600080fd5b82356111f0816111ad565b946020939093013593505050565b60008060006060848603121561121357600080fd5b833561121e816111ad565b9250602084013561122e816111ad565b929592945050506040919091013590565b60006020828403121561125157600080fd5b5035919050565b60006020828403121561126a57600080fd5b81356111a6816111ad565b60208101600383106112b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156112f857600080fd5b823567ffffffffffffffff81111561130f57600080fd5b8301601f8101851361132057600080fd5b803567ffffffffffffffff81111561133a5761133a6112b6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156113a6576113a66112b6565b6040528181528282016020018710156113be57600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156113f057600080fd5b82356113fb816111ad565b9150602083013561140b816111ad565b809150509250929050565b600181811c9082168061142a57607f821691505b602082108103611463577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104e0576104e0611469565b6040815260006114be604083018561112f565b90508260208301529392505050565b6000602082840312156114df57600080fd5b815180151581146111a657600080fd5b608081526000611502608083018761112f565b6020830195909552506040810192909252606090910152919050565b60006020828403121561153057600080fd5b81516111a6816111ad565b60006020828403121561154d57600080fd5b5051919050565b80820281158282048414176104e0576104e0611469565b808201808211156104e0576104e061146956fea264697066735822122062e8c81bc642fb8e9a1eaabde5abdece7e58510051b4aa2bee706dc57435041764736f6c634300081a0033a2646970667358221220bb0d3f3c490ec0602a3a49fe681209be7fc0d70fb79b0cd0b134cdf6a1bf1a7964736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index 0251612c..67c61efa 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -31,7 +31,7 @@ var ( // ZetaConnectorBaseMetaData contains all meta data concerning the ZetaConnectorBase contract. var ZetaConnectorBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -242,12 +242,12 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) PAUSERROLE() ([32]byte return _ZetaConnectorBase.Contract.PAUSERROLE(&_ZetaConnectorBase.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorBase *ZetaConnectorBaseCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ZetaConnectorBase.contract.Call(opts, &out, "TSS_ROLE") + err := _ZetaConnectorBase.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -259,18 +259,18 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCaller) TSSROLE(opts *bind.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorBase *ZetaConnectorBaseSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorBase.Contract.TSSROLE(&_ZetaConnectorBase.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorBase.Contract.WITHDRAWERROLE(&_ZetaConnectorBase.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorBase.Contract.TSSROLE(&_ZetaConnectorBase.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorBase.Contract.WITHDRAWERROLE(&_ZetaConnectorBase.CallOpts) } // Gateway is a free data retrieval call binding the contract method 0x116191b6. diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index d901064a..88856e77 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806391d1485411610081578063a783c78911610066578063a783c7891461031f578063d547741f14610346578063e63ab1e91461035957600080fd5b806391d14854146102d1578063a217fddf1461031757600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b6101696102df366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122049fc4f7005945c94be87b64761390ef0a7a9420599ed8603d7ad523eef4e31d764736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -264,12 +264,12 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) PAUSERROLE() ([32] return _ZetaConnectorNative.Contract.PAUSERROLE(&_ZetaConnectorNative.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNative *ZetaConnectorNativeCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ZetaConnectorNative.contract.Call(opts, &out, "TSS_ROLE") + err := _ZetaConnectorNative.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -281,18 +281,18 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCaller) TSSROLE(opts *bind.CallOp } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNative *ZetaConnectorNativeSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNative.Contract.TSSROLE(&_ZetaConnectorNative.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNative.Contract.WITHDRAWERROLE(&_ZetaConnectorNative.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNative.Contract.TSSROLE(&_ZetaConnectorNative.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNative.Contract.WITHDRAWERROLE(&_ZetaConnectorNative.CallOpts) } // Gateway is a free data retrieval call binding the contract method 0x116191b6. diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index b1352d6b..88e3e12b 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6508061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063de1cb76c11610066578063de1cb76c146102a8578063e20c9f71146102b0578063fa7626d4146102b857600080fd5b8063ba414fa614610280578063d509b16c14610298578063dcf7d037146102a057600080fd5b8063a783c789116100bd578063a783c7891461023b578063b0464fdc14610270578063b5508aa91461027857600080fd5b8063916a17c61461021e578063991a2ab51461023357600080fd5b80633f7286f41161013a57806366d9a9a01161011457806366d9a9a0146101ec57806385226c8114610201578063893f91641461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806357bb1c8f146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b610199610a2b565b6040516101a69190617b71565b60405180910390f35b6101b7610a8d565b6040516101a69190617c0d565b61018f610bcf565b6101996113a2565b610199611402565b61018f611462565b61018f611abe565b6101f4611d30565b6040516101a69190617d73565b610209611eb2565b6040516101a69190617e11565b61018f611f82565b6102266121b9565b6040516101a69190617e88565b61018f6122b4565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6040519081526020016101a6565b610226612538565b610209612633565b610288612703565b60405190151581526020016101a6565b61018f6127d7565b61018f612bed565b61018f6132ad565b610199613913565b601f546102889060ff1681565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161031790617a84565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561039b573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261048c919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613973565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061051890617a91565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610554573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105af90617a9e565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105f3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161063890617aab565b604051809103906000f080158015610654573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a8357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a65575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610bc657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610baf578382906000526020600020018054610b2290617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90617f1f565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b505050505081526020019060010190610b03565b505050508152505081526020019060010190610ab1565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190617f6c565b9050610cdb816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e32916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061104e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061113492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190617f6c565b90506111e58188613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190617f6c565b905061126e816112698a8761802e565b613992565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190617f6c565b9050611315816000613992565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190617f6c565b9050611396816000613992565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361150393921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190617f6c565b9050611551816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116a8916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561184e57600080fd5b505af1158015611862573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118a79089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061198d92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190617f6c565b9050611a3e816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190617f6c565b905061126e8185613992565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611c739190600401618041565b600060405180830381600087803b158015611c8d57600080fd5b505af1158015611ca1573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611cf99290911690879086908890600401617fc6565b600060405180830381600087803b158015611d1357600080fd5b505af1158015611d27573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000209060020201604051806040016040529081600082018054611d8790617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611db390617f1f565b8015611e005780601f10611dd557610100808354040283529160200191611e00565b820191906000526020600020905b815481529060010190602001808311611de357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e475790505b50505050508152505081526020019060010190611d54565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610bc6578382906000526020600020018054611ef590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190617f1f565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b505050505081526020019060010190611ed6565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ffc57600080fd5b505af1158015612010573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120fb9190600401618041565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b505050505050565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561229c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122495790505b505050505081525050815260200190600101906121dd565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123b357600080fd5b505af11580156123c7573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124b29190600401618041565b600060405180830381600087803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611cf99290911690879086908890600401617fc6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561261b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125c85790505b5050505050815250508152602001906001019061255c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610bc657838290600052602060002001805461267690617f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546126a290617f1f565b80156126ef5780601f106126c4576101008083540402835291602001916126ef565b820191906000526020600020905b8154815290600101906020018083116126d257829003601f168201915b505050505081526020019060010190612657565b60085460009060ff161561271b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156127ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d09190617f6c565b1415905090565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f9190617f6c565b905061285c816000613992565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161293c916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ac857600080fd5b505af1158015612adc573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b158015612b5057600080fd5b505af1158015612b64573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bda9190617f6c565b9050612be68186613992565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cec9190617f6c565b9050612cf9816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6d9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e50916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612f1057600080fd5b505af1158015612f24573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612f62600289618054565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506130839089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061316992909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561318357600080fd5b505af1158015613197573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320d9190617f6c565b905061321e8161126960028a618054565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561326e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132929190617f6c565b905061126e816132a360028b618054565b611269908761802e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133669190617f6c565b9050613373816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156133c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e79190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916134ca916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156134e457600080fd5b505af11580156134f8573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561358a57600080fd5b505af115801561359e573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506135e192506001600160a01b0390911690879061808f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906136d6908a908990617fad565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561376c57600080fd5b505af1158015613780573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe91506137c59089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561383f57600080fd5b505af1158015613853573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c89993506138ab92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156138c557600080fd5b505af11580156138d9573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611198565b60606015805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b600061397d617ab8565b613988848483613a11565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139fd57600080fd5b505afa1580156121b1573d6000803e3d6000fd5b600080613a1e8584613a8c565b9050613a816040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a6c92919061808f565b60405160208183030381529060405285613a98565b9150505b9392505050565b6000613a858383613ac6565b60c08101515160009015613abc57613ab584848460c00151613ae1565b9050613a85565b613ab58484613c87565b6000613ad28383613d72565b613a8583836020015184613a98565b600080613aec613d82565b90506000613afa8683613e55565b90506000613b1182606001518360200151856142fb565b90506000613b218383898961450d565b90506000613b2e8261538a565b602081015181519192509060030b15613ba157898260400151604051602001613b589291906180b1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b9891600401618041565b60405180910390fd5b6000613be46040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615559565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c37908490600401618041565b602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c789190618132565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cdc908790600401618041565b600060405180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d219190810190618243565b90506000613d4f8285604051602001613d3b929190618278565b604051602081830303815290604052615759565b90506001600160a01b038116613988578484604051602001613b589291906182a7565b613d7e8282600061576c565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e09908490600401618352565b600060405180830381865afa158015613e26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e4e9190810190618399565b9250505090565b613e876040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ed26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613edb8561586f565b60208201526000613eeb86615c54565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f559190810190618399565b86838560200151604051602001613f6f94939291906183e2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fc7908590600401618041565b600060405180830381865afa158015613fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261400c9190810190618399565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140549084906004016184e6565b602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190618538565b6140aa5781604051602001613b58919061855a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140ef9084906004016185ec565b600060405180830381865afa15801561410c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141349190810190618399565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061417b90849060040161863e565b602060405180830381865afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc9190618538565b15614251576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061420690849060040161863e565b600060405180830381865afa158015614223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261424b9190810190618399565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142769190618690565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016142a29291906186fc565b600060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e79190810190618399565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143175790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061437757614377618721565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143cb576143cb618721565b6020026020010181905250846040516020016143e79190618750565b6040516020818303038152906040528160028151811061440957614409618721565b60200260200101819052508260405160200161442591906187bc565b6040516020818303038152906040528160038151811061444757614447618721565b6020026020010181905250600061445d8261538a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144ee9060408051808201825260008082526020918201528151808301909252845182528085019082015290615ed7565b6145035785604051602001613b5891906187fd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561455d565b511590565b6146d157826020015115614619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b98565b8260c00151156146d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b98565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146ea57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147459061888e565b935060ff168151811061475a5761475a618721565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147ab91906188ad565b6040516020818303038152906040528282806147c69061888e565b935060ff16815181106147db576147db618721565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806148289061888e565b935060ff168151811061483d5761483d618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061488a9061888e565b935060ff168151811061489f5761489f618721565b602002602001018190525087602001518282806148bb9061888e565b935060ff16815181106148d0576148d0618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061491d9061888e565b935060ff168151811061493257614932618721565b60209081029190910101528751828261494a8161888e565b935060ff168151811061495f5761495f618721565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806149ac9061888e565b935060ff16815181106149c1576149c1618721565b60200260200101819052506149d546615f38565b82826149e08161888e565b935060ff16815181106149f5576149f5618721565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a429061888e565b935060ff1681518110614a5757614a57618721565b602002602001018190525086828280614a6f9061888e565b935060ff1681518110614a8457614a84618721565b6020908102919091010152855115614bab5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ad58161888e565b935060ff1681518110614aea57614aea618721565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b3a908990600401618041565b600060405180830381865afa158015614b57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b7f9190810190618399565b8282614b8a8161888e565b935060ff1681518110614b9f57614b9f618721565b60200260200101819052505b846020015115614c7b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614bf48161888e565b935060ff1681518110614c0957614c09618721565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c569061888e565b935060ff1681518110614c6b57614c6b618721565b6020026020010181905250614e42565b614cb36145588660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d465760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614cf68161888e565b935060ff1681518110614d0b57614d0b618721565b60200260200101819052508460a00151604051602001614d2b9190618750565b604051602081830303815290604052828280614c569061888e565b8460c00151158015614d89575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d8790511590565b155b15614e425760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dcd8161888e565b935060ff1681518110614de257614de2618721565b6020026020010181905250614df688615fd8565b604051602001614e069190618750565b604051602081830303815290604052828280614e219061888e565b935060ff1681518110614e3657614e36618721565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e7690511590565b614f0b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eb98161888e565b935060ff1681518110614ece57614ece618721565b60200260200101819052508460400151828280614eea9061888e565b935060ff1681518110614eff57614eff618721565b60200260200101819052505b60608501511561502c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f548161888e565b935060ff1681518110614f6957614f69618721565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150009190810190618399565b828261500b8161888e565b935060ff168151811061502057615020618721565b60200260200101819052505b60e085015151156150d35760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150768161888e565b935060ff168151811061508b5761508b618721565b60200260200101819052506150a78560e0015160000151615f38565b82826150b28161888e565b935060ff16815181106150c7576150c7618721565b60200260200101819052505b60e0850151602001511561517d5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826151208161888e565b935060ff168151811061513557615135618721565b60200260200101819052506151518560e0015160200151615f38565b828261515c8161888e565b935060ff168151811061517157615171618721565b60200260200101819052505b60e085015160400151156152275760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151ca8161888e565b935060ff16815181106151df576151df618721565b60200260200101819052506151fb8560e0015160400151615f38565b82826152068161888e565b935060ff168151811061521b5761521b618721565b60200260200101819052505b60e085015160600151156152d15760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152748161888e565b935060ff168151811061528957615289618721565b60200260200101819052506152a58560e0015160600151615f38565b82826152b08161888e565b935060ff16815181106152c5576152c5618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152ef576152ef61815b565b60405190808252806020026020018201604052801561532257816020015b606081526020019060019003908161530d5790505b50905060005b8260ff168160ff16101561537b57838160ff168151811061534b5761534b618721565b6020026020010151828260ff168151811061536857615368618721565b6020908102919091010152600101615328565b5093505050505b949350505050565b6153b16040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161543791869101618918565b600060405180830381865afa158015615454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261547c9190810190618399565b9050600061548a8683616ac7565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ba9190617e11565b6000604051808303816000875af11580156154d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615501919081019061895f565b805190915060030b1580159061551a5750602081015151155b80156155295750604081015151155b15614503578160008151811061554157615541618721565b6020026020010151604051602001613b589190618a15565b6060600061558e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155c59082905b90616c1c565b156157225760006156428261563c846156366156088a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c43565b90616ca5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156a6908290616c1c565b1561571057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261570d905b8290616d2a565b90505b61571981616d50565b92505050613a85565b821561573b578484604051602001613b58929190618c01565b5050604080516020810190915260008152613a85565b509392505050565b6000808251602084016000f09392505050565b8160a001511561577b57505050565b6000615788848484616db9565b905060006157958261538a565b602081015181519192509060030b1580156158315750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615831906040805180820182526000808252602091820152815180830190925284518252808501908201526155bf565b1561583e57505050505050565b6040820151511561585e578160400151604051602001613b589190618ca8565b80604051602001613b589190618d06565b606060006158a48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615909905b8290615ed7565b1561597857604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973908390617354565b616d50565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159da905b82906173de565b600103615aa757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4090615706565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973905b8390616d2a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b0690615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6e908390617478565b905060008160018351615b81919061802e565b81518110615b9157615b91618721565b60200260200101519050615c34615973615c076040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617354565b95945050505050565b82604051602001613b589190618d71565b50919050565b60606000615c898360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ceb90615902565b15615cf957613a8581616d50565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d58906159d3565b600103615dc257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a859061597390615aa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2190615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e89908390617478565b9050600181511115615ec5578060028251615ea4919061802e565b81518110615eb457615eb4618721565b602002602001015192505050919050565b5082604051602001613b589190618d71565b805182516000911115615eec5750600061398c565b81518351602085015160009291615f0291618e4f565b615f0c919061802e565b905082602001518103615f2357600191505061398c565b82516020840151819020912014905092915050565b60606000615f458361751d565b600101905060008167ffffffffffffffff811115615f6557615f6561815b565b6040519080825280601f01601f191660200182016040528015615f8f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f9957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616064905b82906175ff565b156160a457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161039061605d565b1561614357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161a29061605d565b156161e257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162419061605d565b806162a65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a69061605d565b156162e657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163459061605d565b806163aa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163aa9061605d565b156163ea57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164499061605d565b806164ae5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ae9061605d565b156164ee57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654d9061605d565b806165b25750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b29061605d565b156165f257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166519061605d565b1561669157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166f09061605d565b1561673057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678f9061605d565b156167cf57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682e9061605d565b1561686e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168cd9061605d565b1561690d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696c9061605d565b806169d15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d19061605d565b15616a1157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a709061605d565b15616ab057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b589290602001618e62565b60608060005b8451811015616b525781858281518110616ae957616ae9618721565b6020026020010151604051602001616b02929190618278565b604051602081830303815290604052915060018551616b21919061802e565b8114616b4a5781604051602001616b389190618fcb565b60405160208183030381529060405291505b600101616acd565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b6b5790505090508381600081518110616b9657616b96618721565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bea57616bea618721565b60200260200101819052508181600281518110616c0957616c09618721565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c3a9291849190617613565b14159392505050565b60408051808201909152600080825260208201526000616c758460000151856020015185600001518660200151617724565b9050836020015181616c87919061802e565b84518590616c9690839061802e565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cca57508161398c565b6020808301519084015160019114616cf15750815160208481015190840151829020919020145b8015616d2257825184518590616d0890839061802e565b9052508251602085018051616d1e908390618e4f565b9052505b509192915050565b6040805180820190915260008082526020820152616d49838383617844565b5092915050565b60606000826000015167ffffffffffffffff811115616d7157616d7161815b565b6040519080825280601f01601f191660200182016040528015616d9b576020820181803683370190505b5090506000602082019050616d4981856020015186600001516178ef565b60606000616dc5613d82565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616de257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e3d9061888e565b935060ff1681518110616e5257616e52618721565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616ea3919061900c565b604051602081830303815290604052828280616ebe9061888e565b935060ff1681518110616ed357616ed3618721565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f209061888e565b935060ff1681518110616f3557616f35618721565b602002602001018190525082604051602001616f5191906187bc565b604051602081830303815290604052828280616f6c9061888e565b935060ff1681518110616f8157616f81618721565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fce9061888e565b935060ff1681518110616fe357616fe3618721565b6020026020010181905250616ff88784617969565b82826170038161888e565b935060ff168151811061701857617018618721565b6020908102919091010152855151156170c45760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261706a8161888e565b935060ff168151811061707f5761707f618721565b6020026020010181905250617098866000015184617969565b82826170a38161888e565b935060ff16815181106170b8576170b8618721565b60200260200101819052505b8560800151156171325760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261710d8161888e565b935060ff168151811061712257617122618721565b6020026020010181905250617198565b84156171985760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171778161888e565b935060ff168151811061718c5761718c618721565b60200260200101819052505b604086015151156172345760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171e28161888e565b935060ff16815181106171f7576171f7618721565b602002602001018190525085604001518282806172139061888e565b935060ff168151811061722857617228618721565b60200260200101819052505b85606001511561729e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261727d8161888e565b935060ff168151811061729257617292618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172bc576172bc61815b565b6040519080825280602002602001820160405280156172ef57816020015b60608152602001906001900390816172da5790505b50905060005b8260ff168160ff16101561734857838160ff168151811061731857617318618721565b6020026020010151828260ff168151811061733557617335618721565b60209081029190910101526001016172f5565b50979650505050505050565b604080518082019091526000808252602082015281518351101561737957508161398c565b8151835160208501516000929161738f91618e4f565b617399919061802e565b602084015190915060019082146173ba575082516020840151819020908220145b80156173d5578351855186906173d190839061802e565b9052505b50929392505050565b60008082600001516174028560000151866020015186600001518760200151617724565b61740c9190618e4f565b90505b835160208501516174209190618e4f565b8111616d49578161743081619051565b925050826000015161746785602001518361744b919061802e565b8651617457919061802e565b8386600001518760200151617724565b6174719190618e4f565b905061740f565b6060600061748684846173de565b617491906001618e4f565b67ffffffffffffffff8111156174a9576174a961815b565b6040519080825280602002602001820160405280156174dc57816020015b60608152602001906001900390816174c75790505b50905060005b8151811015615751576174f86159738686616d2a565b82828151811061750a5761750a618721565b60209081029190910101526001016174e2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617592576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175b057662386f26fc10000830492506010015b6305f5e10083106175c8576305f5e100830492506008015b61271083106175dc57612710830492506004015b606483106175ee576064830492506002015b600a831061398c5760010192915050565b600061760b83836179a9565b159392505050565b60008085841161771a57602084116176c6576000841561765e57600161763a86602061802e565b61764590600861906b565b617650906002619169565b61765a919061802e565b1990505b835181168561766d8989618e4f565b617677919061802e565b805190935082165b8181146176b1578784116176995787945050505050615382565b836176a381619175565b94505082845116905061767f565b6176bb8785618e4f565b945050505050615382565b8383206176d3858861802e565b6176dd9087618e4f565b91505b85821061771857848220808203617705576176fb8684618e4f565b9350505050615382565b61771060018461802e565b9250506176e0565b505b5092949350505050565b6000838186851161782f57602085116177de576000851561777057600161774c87602061802e565b61775790600861906b565b617762906002619169565b61776c919061802e565b1990505b845181166000876177818b8b618e4f565b61778b919061802e565b855190915083165b8281146177d0578186106177b8576177ab8b8b618e4f565b9650505050505050615382565b856177c281619051565b965050838651169050617793565b859650505050505050615382565b508383206000905b6177f0868961802e565b821161782d5785832080820361780c5783945050505050615382565b617817600185618e4f565b935050818061782590619051565b9250506177e6565b505b6178398787618e4f565b979650505050505050565b604080518082019091526000808252602082015260006178768560000151866020015186600001518760200151617724565b602080870180519186019190915251909150617892908261802e565b8352845160208601516178a59190618e4f565b81036178b457600085526178e6565b835183516178c29190618e4f565b855186906178d190839061802e565b90525083516178e09082618e4f565b60208601525b50909392505050565b602081106179275781518352617906602084618e4f565b9250617913602083618e4f565b915061792060208261802e565b90506178ef565b600019811561795657600161793d83602061802e565b61794990610100619169565b617953919061802e565b90505b9151835183169219169190911790915250565b606060006179778484613e55565b80516020808301516040519394506179919390910161918c565b60405160208183030381529060405291505092915050565b81518151600091908111156179bc575081515b6020808501519084015160005b83811015617a755782518251808214617a45576000196020871015617a24576001846179f689602061802e565b617a009190618e4f565b617a0b90600861906b565b617a16906002619169565b617a20919061802e565b1990505b8181168382168181039114617a4257975061398c9650505050505050565b50505b617a50602086618e4f565b9450617a5d602085618e4f565b93505050602081617a6e9190618e4f565b90506179c9565b508451865161450391906191e4565b610c9f8061920583390190565b6113e280619ea483390190565b6116378061b28683390190565b610d5e8061c8bd83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afb617b00565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb25783516001600160a01b0316835260209384019390920191600101617b8b565b509095945050505050565b60005b83811015617bd8578181015183820152602001617bc0565b50506000910152565b60008151808452617bf9816020860160208601617bbd565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd9848651617be1565b6020958601959094509290920191600101617c9f565b509197505050602094850194929092019150600101617c35565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d695781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d29565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ddf6040880182617be1565b9050602082015191508681036020880152617dfa8183617d15565b965050506020938401939190910190600101617d9b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e73858351617be1565b94506020938401939190910190600101617e39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f096040870182617d15565b9550506020938401939190910190600101617eb0565b600181811c90821680617f3357607f821691505b602082108103615c4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f7e57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615c346060830184617be1565b8281526040602082015260006153826040830184617be1565b6001600160a01b0385168152836020820152608060408201526000617fee6080830185617be1565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561398c5761398c617fff565b602081526000613a856020830184617be1565b60008261808a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153826040830184617be1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180e981601a850160208801617bbd565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161812681601c840160208801617bbd565b01601c01949350505050565b60006020828403121561814457600080fd5b81516001600160a01b0381168114613a8557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156181ad576181ad61815b565b60405290565b60008067ffffffffffffffff8411156181ce576181ce61815b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181fd576181fd61815b565b60405283815290508082840185101561821557600080fd5b615751846020830185617bbd565b600082601f83011261823457600080fd5b613a85838351602085016181b3565b60006020828403121561825557600080fd5b815167ffffffffffffffff81111561826c57600080fd5b61398884828501618223565b6000835161828a818460208801617bbd565b83519083019061829e818360208801617bbd565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182df81601a850160208801617bbd565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161831c816033840160208801617bbd565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a856080830184617be1565b6000602082840312156183ab57600080fd5b815167ffffffffffffffff8111156183c257600080fd5b8201601f810184136183d357600080fd5b613988848251602084016181b3565b600085516183f4818460208a01617bbd565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161842e816001840160208a01617bbd565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161846c816002840160208901617bbd565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516184ae816002840160208801617bbd565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184f96040830184617be1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561854a57600080fd5b81518015158114613a8557600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161859281601f850160208701617bbd565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006185ff6040830184617be1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186516040830184617be1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516186c8816014850160208701617bbd565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061870f6040830185617be1565b8281036020840152613a818185617be1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618788816001850160208701617bbd565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516187ce818460208701617bbd565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161888181604b850160208701617bbd565b91909101604b0192915050565b600060ff821660ff81036188a4576188a4617fff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a856080830184617be1565b60006020828403121561897157600080fd5b815167ffffffffffffffff81111561898857600080fd5b82016060818503121561899a57600080fd5b6189a261818a565b81518060030b81146189b357600080fd5b8152602082015167ffffffffffffffff8111156189cf57600080fd5b6189db86828501618223565b602083015250604082015167ffffffffffffffff8111156189fb57600080fd5b618a0786828501618223565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618a73816021850160208701617bbd565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618c5f816021850160208801617bbd565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c9c81602e840160208801617bbd565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618d64816022850160208701617bbd565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618da981600e850160208701617bbd565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561398c5761398c617fff565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e9a816018850160208801617bbd565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618ed781601c840160208801617bbd565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618fdd818460208701617bbd565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161904481601c850160208701617bbd565b91909101601c0192915050565b6000600019820361906457619064617fff565b5060010190565b808202811582820484141761398c5761398c617fff565b6001815b60018411156190bd578085048111156190a1576190a1617fff565b60018416156190af57908102905b60019390931c928002619086565b935093915050565b6000826190d45750600161398c565b816190e15750600061398c565b81600181146190f757600281146191015761911d565b600191505061398c565b60ff84111561911257619112617fff565b50506001821b61398c565b5060208310610133831016604e8410600b8410161715619140575081810a61398c565b61914d6000198484619082565b806000190482111561916157619161617fff565b029392505050565b6000613a8583836190c5565b60008161918457619184617fff565b506000190190565b6000835161919e818460208801617bbd565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516191d8816001840160208801617bbd565b01600101949350505050565b8181036000831280158383131683831282161715616d4957616d49617fff56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806391d1485411610081578063a783c78911610066578063a783c7891461031f578063d547741f14610346578063e63ab1e91461035957600080fd5b806391d14854146102d1578063a217fddf1461031757600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b6101696102df366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122049fc4f7005945c94be87b64761390ef0a7a9420599ed8603d7ad523eef4e31d764736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122070db47d80268bdaa9679130c45d280360c0e25fee7fa33c60b05e4431170ac6a64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6508061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b610199610a2b565b6040516101a69190617b71565b60405180910390f35b6101b7610a8d565b6040516101a69190617c0d565b61018f610bcf565b6101996113a2565b610199611402565b61018f611462565b6101ec611abe565b6040516101a69190617d73565b61018f611c40565b610209611eb2565b6040516101a69190617e11565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611f82565b6040516101a69190617e88565b61025361207d565b610209612178565b610278612248565b60405190151581526020016101a6565b61018f61231c565b61018f6125a0565b61018f6129b6565b61018f613076565b6101996136dc565b601f546102789060ff1681565b61018f61373c565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161031790617a84565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561039b573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261048c919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613973565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061051890617a91565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610554573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105af90617a9e565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105f3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161063890617aab565b604051809103906000f080158015610654573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a8357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a65575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610bc657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610baf578382906000526020600020018054610b2290617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90617f1f565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b505050505081526020019060010190610b03565b505050508152505081526020019060010190610ab1565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190617f6c565b9050610cdb816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e32916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061104e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061113492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190617f6c565b90506111e58188613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190617f6c565b905061126e816112698a8761802e565b613992565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190617f6c565b9050611315816000613992565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190617f6c565b9050611396816000613992565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361150393921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190617f6c565b9050611551816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116a8916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561184e57600080fd5b505af1158015611862573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118a79089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061198d92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190617f6c565b9050611a3e816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190617f6c565b905061126e8185613992565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000209060020201604051806040016040529081600082018054611b1590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190617f1f565b8015611b8e5780601f10611b6357610100808354040283529160200191611b8e565b820191906000526020600020905b815481529060010190602001808311611b7157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611bd55790505b50505050508152505081526020019060010190611ae2565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611df59190600401618041565b600060405180830381600087803b158015611e0f57600080fd5b505af1158015611e23573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7b9290911690879086908890600401617fc6565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610bc6578382906000526020600020018054611ef590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190617f1f565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b505050505081526020019060010190611ed6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561206557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120125790505b50505050508152505081526020019060010190611fa6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561216057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161210d5790505b505050505081525050815260200190600101906120a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000200180546121bb90617f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546121e790617f1f565b80156122345780601f1061220957610100808354040283529160200191612234565b820191906000526020600020905b81548152906001019060200180831161221757829003601f168201915b50505050508152602001906001019061219c565b60085460009060ff1615612260575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190617f6c565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061251a9190600401618041565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7b9290911690879086908890600401617fc6565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190617f6c565b9050612625816000613992565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612705916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156127c557600080fd5b505af11580156127d9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a39190617f6c565b90506129af8186613992565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190617f6c565b9050612ac2816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612c19916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015612c3357600080fd5b505af1158015612c47573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612d2b600289618054565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612e4c9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612f3292909116908a9089908b90600401617fc6565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190617f6c565b9050612fe78161126960028a618054565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190617f6c565b905061126e8161306c60028b618054565b611269908761802e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561310b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312f9190617f6c565b905061313c816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b09190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613293916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506133aa92506001600160a01b0390911690879061808f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061349f908a908990617fad565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe915061358e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061367492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561368e57600080fd5b505af11580156136a2573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611198565b60606015805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b59190600401618041565b600060405180830381600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b505050505050565b600061397d617ab8565b613988848483613a11565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139fd57600080fd5b505afa15801561396b573d6000803e3d6000fd5b600080613a1e8584613a8c565b9050613a816040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a6c92919061808f565b60405160208183030381529060405285613a98565b9150505b9392505050565b6000613a858383613ac6565b60c08101515160009015613abc57613ab584848460c00151613ae1565b9050613a85565b613ab58484613c87565b6000613ad28383613d72565b613a8583836020015184613a98565b600080613aec613d82565b90506000613afa8683613e55565b90506000613b1182606001518360200151856142fb565b90506000613b218383898961450d565b90506000613b2e8261538a565b602081015181519192509060030b15613ba157898260400151604051602001613b589291906180b1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b9891600401618041565b60405180910390fd5b6000613be46040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615559565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c37908490600401618041565b602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c789190618132565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cdc908790600401618041565b600060405180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d219190810190618243565b90506000613d4f8285604051602001613d3b929190618278565b604051602081830303815290604052615759565b90506001600160a01b038116613988578484604051602001613b589291906182a7565b613d7e8282600061576c565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e09908490600401618352565b600060405180830381865afa158015613e26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e4e9190810190618399565b9250505090565b613e876040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ed26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613edb8561586f565b60208201526000613eeb86615c54565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f559190810190618399565b86838560200151604051602001613f6f94939291906183e2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fc7908590600401618041565b600060405180830381865afa158015613fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261400c9190810190618399565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140549084906004016184e6565b602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190618538565b6140aa5781604051602001613b58919061855a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140ef9084906004016185ec565b600060405180830381865afa15801561410c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141349190810190618399565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061417b90849060040161863e565b602060405180830381865afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc9190618538565b15614251576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061420690849060040161863e565b600060405180830381865afa158015614223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261424b9190810190618399565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142769190618690565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016142a29291906186fc565b600060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e79190810190618399565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143175790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061437757614377618721565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143cb576143cb618721565b6020026020010181905250846040516020016143e79190618750565b6040516020818303038152906040528160028151811061440957614409618721565b60200260200101819052508260405160200161442591906187bc565b6040516020818303038152906040528160038151811061444757614447618721565b6020026020010181905250600061445d8261538a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144ee9060408051808201825260008082526020918201528151808301909252845182528085019082015290615ed7565b6145035785604051602001613b5891906187fd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561455d565b511590565b6146d157826020015115614619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b98565b8260c00151156146d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b98565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146ea57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147459061888e565b935060ff168151811061475a5761475a618721565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147ab91906188ad565b6040516020818303038152906040528282806147c69061888e565b935060ff16815181106147db576147db618721565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806148289061888e565b935060ff168151811061483d5761483d618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061488a9061888e565b935060ff168151811061489f5761489f618721565b602002602001018190525087602001518282806148bb9061888e565b935060ff16815181106148d0576148d0618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061491d9061888e565b935060ff168151811061493257614932618721565b60209081029190910101528751828261494a8161888e565b935060ff168151811061495f5761495f618721565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806149ac9061888e565b935060ff16815181106149c1576149c1618721565b60200260200101819052506149d546615f38565b82826149e08161888e565b935060ff16815181106149f5576149f5618721565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a429061888e565b935060ff1681518110614a5757614a57618721565b602002602001018190525086828280614a6f9061888e565b935060ff1681518110614a8457614a84618721565b6020908102919091010152855115614bab5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ad58161888e565b935060ff1681518110614aea57614aea618721565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b3a908990600401618041565b600060405180830381865afa158015614b57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b7f9190810190618399565b8282614b8a8161888e565b935060ff1681518110614b9f57614b9f618721565b60200260200101819052505b846020015115614c7b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614bf48161888e565b935060ff1681518110614c0957614c09618721565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c569061888e565b935060ff1681518110614c6b57614c6b618721565b6020026020010181905250614e42565b614cb36145588660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d465760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614cf68161888e565b935060ff1681518110614d0b57614d0b618721565b60200260200101819052508460a00151604051602001614d2b9190618750565b604051602081830303815290604052828280614c569061888e565b8460c00151158015614d89575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d8790511590565b155b15614e425760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dcd8161888e565b935060ff1681518110614de257614de2618721565b6020026020010181905250614df688615fd8565b604051602001614e069190618750565b604051602081830303815290604052828280614e219061888e565b935060ff1681518110614e3657614e36618721565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e7690511590565b614f0b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eb98161888e565b935060ff1681518110614ece57614ece618721565b60200260200101819052508460400151828280614eea9061888e565b935060ff1681518110614eff57614eff618721565b60200260200101819052505b60608501511561502c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f548161888e565b935060ff1681518110614f6957614f69618721565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150009190810190618399565b828261500b8161888e565b935060ff168151811061502057615020618721565b60200260200101819052505b60e085015151156150d35760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150768161888e565b935060ff168151811061508b5761508b618721565b60200260200101819052506150a78560e0015160000151615f38565b82826150b28161888e565b935060ff16815181106150c7576150c7618721565b60200260200101819052505b60e0850151602001511561517d5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826151208161888e565b935060ff168151811061513557615135618721565b60200260200101819052506151518560e0015160200151615f38565b828261515c8161888e565b935060ff168151811061517157615171618721565b60200260200101819052505b60e085015160400151156152275760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151ca8161888e565b935060ff16815181106151df576151df618721565b60200260200101819052506151fb8560e0015160400151615f38565b82826152068161888e565b935060ff168151811061521b5761521b618721565b60200260200101819052505b60e085015160600151156152d15760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152748161888e565b935060ff168151811061528957615289618721565b60200260200101819052506152a58560e0015160600151615f38565b82826152b08161888e565b935060ff16815181106152c5576152c5618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152ef576152ef61815b565b60405190808252806020026020018201604052801561532257816020015b606081526020019060019003908161530d5790505b50905060005b8260ff168160ff16101561537b57838160ff168151811061534b5761534b618721565b6020026020010151828260ff168151811061536857615368618721565b6020908102919091010152600101615328565b5093505050505b949350505050565b6153b16040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161543791869101618918565b600060405180830381865afa158015615454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261547c9190810190618399565b9050600061548a8683616ac7565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ba9190617e11565b6000604051808303816000875af11580156154d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615501919081019061895f565b805190915060030b1580159061551a5750602081015151155b80156155295750604081015151155b15614503578160008151811061554157615541618721565b6020026020010151604051602001613b589190618a15565b6060600061558e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155c59082905b90616c1c565b156157225760006156428261563c846156366156088a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c43565b90616ca5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156a6908290616c1c565b1561571057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261570d905b8290616d2a565b90505b61571981616d50565b92505050613a85565b821561573b578484604051602001613b58929190618c01565b5050604080516020810190915260008152613a85565b509392505050565b6000808251602084016000f09392505050565b8160a001511561577b57505050565b6000615788848484616db9565b905060006157958261538a565b602081015181519192509060030b1580156158315750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615831906040805180820182526000808252602091820152815180830190925284518252808501908201526155bf565b1561583e57505050505050565b6040820151511561585e578160400151604051602001613b589190618ca8565b80604051602001613b589190618d06565b606060006158a48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615909905b8290615ed7565b1561597857604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973908390617354565b616d50565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159da905b82906173de565b600103615aa757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4090615706565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973905b8390616d2a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b0690615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6e908390617478565b905060008160018351615b81919061802e565b81518110615b9157615b91618721565b60200260200101519050615c34615973615c076040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617354565b95945050505050565b82604051602001613b589190618d71565b50919050565b60606000615c898360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ceb90615902565b15615cf957613a8581616d50565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d58906159d3565b600103615dc257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a859061597390615aa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2190615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e89908390617478565b9050600181511115615ec5578060028251615ea4919061802e565b81518110615eb457615eb4618721565b602002602001015192505050919050565b5082604051602001613b589190618d71565b805182516000911115615eec5750600061398c565b81518351602085015160009291615f0291618e4f565b615f0c919061802e565b905082602001518103615f2357600191505061398c565b82516020840151819020912014905092915050565b60606000615f458361751d565b600101905060008167ffffffffffffffff811115615f6557615f6561815b565b6040519080825280601f01601f191660200182016040528015615f8f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f9957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616064905b82906175ff565b156160a457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161039061605d565b1561614357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161a29061605d565b156161e257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162419061605d565b806162a65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a69061605d565b156162e657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163459061605d565b806163aa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163aa9061605d565b156163ea57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164499061605d565b806164ae5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ae9061605d565b156164ee57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654d9061605d565b806165b25750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b29061605d565b156165f257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166519061605d565b1561669157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166f09061605d565b1561673057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678f9061605d565b156167cf57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682e9061605d565b1561686e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168cd9061605d565b1561690d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696c9061605d565b806169d15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d19061605d565b15616a1157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a709061605d565b15616ab057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b589290602001618e62565b60608060005b8451811015616b525781858281518110616ae957616ae9618721565b6020026020010151604051602001616b02929190618278565b604051602081830303815290604052915060018551616b21919061802e565b8114616b4a5781604051602001616b389190618fcb565b60405160208183030381529060405291505b600101616acd565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b6b5790505090508381600081518110616b9657616b96618721565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bea57616bea618721565b60200260200101819052508181600281518110616c0957616c09618721565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c3a9291849190617613565b14159392505050565b60408051808201909152600080825260208201526000616c758460000151856020015185600001518660200151617724565b9050836020015181616c87919061802e565b84518590616c9690839061802e565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cca57508161398c565b6020808301519084015160019114616cf15750815160208481015190840151829020919020145b8015616d2257825184518590616d0890839061802e565b9052508251602085018051616d1e908390618e4f565b9052505b509192915050565b6040805180820190915260008082526020820152616d49838383617844565b5092915050565b60606000826000015167ffffffffffffffff811115616d7157616d7161815b565b6040519080825280601f01601f191660200182016040528015616d9b576020820181803683370190505b5090506000602082019050616d4981856020015186600001516178ef565b60606000616dc5613d82565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616de257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e3d9061888e565b935060ff1681518110616e5257616e52618721565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616ea3919061900c565b604051602081830303815290604052828280616ebe9061888e565b935060ff1681518110616ed357616ed3618721565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f209061888e565b935060ff1681518110616f3557616f35618721565b602002602001018190525082604051602001616f5191906187bc565b604051602081830303815290604052828280616f6c9061888e565b935060ff1681518110616f8157616f81618721565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fce9061888e565b935060ff1681518110616fe357616fe3618721565b6020026020010181905250616ff88784617969565b82826170038161888e565b935060ff168151811061701857617018618721565b6020908102919091010152855151156170c45760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261706a8161888e565b935060ff168151811061707f5761707f618721565b6020026020010181905250617098866000015184617969565b82826170a38161888e565b935060ff16815181106170b8576170b8618721565b60200260200101819052505b8560800151156171325760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261710d8161888e565b935060ff168151811061712257617122618721565b6020026020010181905250617198565b84156171985760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171778161888e565b935060ff168151811061718c5761718c618721565b60200260200101819052505b604086015151156172345760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171e28161888e565b935060ff16815181106171f7576171f7618721565b602002602001018190525085604001518282806172139061888e565b935060ff168151811061722857617228618721565b60200260200101819052505b85606001511561729e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261727d8161888e565b935060ff168151811061729257617292618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172bc576172bc61815b565b6040519080825280602002602001820160405280156172ef57816020015b60608152602001906001900390816172da5790505b50905060005b8260ff168160ff16101561734857838160ff168151811061731857617318618721565b6020026020010151828260ff168151811061733557617335618721565b60209081029190910101526001016172f5565b50979650505050505050565b604080518082019091526000808252602082015281518351101561737957508161398c565b8151835160208501516000929161738f91618e4f565b617399919061802e565b602084015190915060019082146173ba575082516020840151819020908220145b80156173d5578351855186906173d190839061802e565b9052505b50929392505050565b60008082600001516174028560000151866020015186600001518760200151617724565b61740c9190618e4f565b90505b835160208501516174209190618e4f565b8111616d49578161743081619051565b925050826000015161746785602001518361744b919061802e565b8651617457919061802e565b8386600001518760200151617724565b6174719190618e4f565b905061740f565b6060600061748684846173de565b617491906001618e4f565b67ffffffffffffffff8111156174a9576174a961815b565b6040519080825280602002602001820160405280156174dc57816020015b60608152602001906001900390816174c75790505b50905060005b8151811015615751576174f86159738686616d2a565b82828151811061750a5761750a618721565b60209081029190910101526001016174e2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617592576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175b057662386f26fc10000830492506010015b6305f5e10083106175c8576305f5e100830492506008015b61271083106175dc57612710830492506004015b606483106175ee576064830492506002015b600a831061398c5760010192915050565b600061760b83836179a9565b159392505050565b60008085841161771a57602084116176c6576000841561765e57600161763a86602061802e565b61764590600861906b565b617650906002619169565b61765a919061802e565b1990505b835181168561766d8989618e4f565b617677919061802e565b805190935082165b8181146176b1578784116176995787945050505050615382565b836176a381619175565b94505082845116905061767f565b6176bb8785618e4f565b945050505050615382565b8383206176d3858861802e565b6176dd9087618e4f565b91505b85821061771857848220808203617705576176fb8684618e4f565b9350505050615382565b61771060018461802e565b9250506176e0565b505b5092949350505050565b6000838186851161782f57602085116177de576000851561777057600161774c87602061802e565b61775790600861906b565b617762906002619169565b61776c919061802e565b1990505b845181166000876177818b8b618e4f565b61778b919061802e565b855190915083165b8281146177d0578186106177b8576177ab8b8b618e4f565b9650505050505050615382565b856177c281619051565b965050838651169050617793565b859650505050505050615382565b508383206000905b6177f0868961802e565b821161782d5785832080820361780c5783945050505050615382565b617817600185618e4f565b935050818061782590619051565b9250506177e6565b505b6178398787618e4f565b979650505050505050565b604080518082019091526000808252602082015260006178768560000151866020015186600001518760200151617724565b602080870180519186019190915251909150617892908261802e565b8352845160208601516178a59190618e4f565b81036178b457600085526178e6565b835183516178c29190618e4f565b855186906178d190839061802e565b90525083516178e09082618e4f565b60208601525b50909392505050565b602081106179275781518352617906602084618e4f565b9250617913602083618e4f565b915061792060208261802e565b90506178ef565b600019811561795657600161793d83602061802e565b61794990610100619169565b617953919061802e565b90505b9151835183169219169190911790915250565b606060006179778484613e55565b80516020808301516040519394506179919390910161918c565b60405160208183030381529060405291505092915050565b81518151600091908111156179bc575081515b6020808501519084015160005b83811015617a755782518251808214617a45576000196020871015617a24576001846179f689602061802e565b617a009190618e4f565b617a0b90600861906b565b617a16906002619169565b617a20919061802e565b1990505b8181168382168181039114617a4257975061398c9650505050505050565b50505b617a50602086618e4f565b9450617a5d602085618e4f565b93505050602081617a6e9190618e4f565b90506179c9565b508451865161450391906191e4565b610c9f8061920583390190565b6113e280619ea483390190565b6116378061b28683390190565b610d5e8061c8bd83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afb617b00565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb25783516001600160a01b0316835260209384019390920191600101617b8b565b509095945050505050565b60005b83811015617bd8578181015183820152602001617bc0565b50506000910152565b60008151808452617bf9816020860160208601617bbd565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd9848651617be1565b6020958601959094509290920191600101617c9f565b509197505050602094850194929092019150600101617c35565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d695781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d29565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ddf6040880182617be1565b9050602082015191508681036020880152617dfa8183617d15565b965050506020938401939190910190600101617d9b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e73858351617be1565b94506020938401939190910190600101617e39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f096040870182617d15565b9550506020938401939190910190600101617eb0565b600181811c90821680617f3357607f821691505b602082108103615c4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f7e57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615c346060830184617be1565b8281526040602082015260006153826040830184617be1565b6001600160a01b0385168152836020820152608060408201526000617fee6080830185617be1565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561398c5761398c617fff565b602081526000613a856020830184617be1565b60008261808a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153826040830184617be1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180e981601a850160208801617bbd565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161812681601c840160208801617bbd565b01601c01949350505050565b60006020828403121561814457600080fd5b81516001600160a01b0381168114613a8557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156181ad576181ad61815b565b60405290565b60008067ffffffffffffffff8411156181ce576181ce61815b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181fd576181fd61815b565b60405283815290508082840185101561821557600080fd5b615751846020830185617bbd565b600082601f83011261823457600080fd5b613a85838351602085016181b3565b60006020828403121561825557600080fd5b815167ffffffffffffffff81111561826c57600080fd5b61398884828501618223565b6000835161828a818460208801617bbd565b83519083019061829e818360208801617bbd565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182df81601a850160208801617bbd565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161831c816033840160208801617bbd565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a856080830184617be1565b6000602082840312156183ab57600080fd5b815167ffffffffffffffff8111156183c257600080fd5b8201601f810184136183d357600080fd5b613988848251602084016181b3565b600085516183f4818460208a01617bbd565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161842e816001840160208a01617bbd565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161846c816002840160208901617bbd565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516184ae816002840160208801617bbd565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184f96040830184617be1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561854a57600080fd5b81518015158114613a8557600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161859281601f850160208701617bbd565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006185ff6040830184617be1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186516040830184617be1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516186c8816014850160208701617bbd565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061870f6040830185617be1565b8281036020840152613a818185617be1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618788816001850160208701617bbd565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516187ce818460208701617bbd565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161888181604b850160208701617bbd565b91909101604b0192915050565b600060ff821660ff81036188a4576188a4617fff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a856080830184617be1565b60006020828403121561897157600080fd5b815167ffffffffffffffff81111561898857600080fd5b82016060818503121561899a57600080fd5b6189a261818a565b81518060030b81146189b357600080fd5b8152602082015167ffffffffffffffff8111156189cf57600080fd5b6189db86828501618223565b602083015250604082015167ffffffffffffffff8111156189fb57600080fd5b618a0786828501618223565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618a73816021850160208701617bbd565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618c5f816021850160208801617bbd565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c9c81602e840160208801617bbd565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618d64816022850160208701617bbd565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618da981600e850160208701617bbd565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561398c5761398c617fff565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e9a816018850160208801617bbd565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618ed781601c840160208801617bbd565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618fdd818460208701617bbd565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161904481601c850160208701617bbd565b91909101601c0192915050565b6000600019820361906457619064617fff565b5060010190565b808202811582820484141761398c5761398c617fff565b6001815b60018411156190bd578085048111156190a1576190a1617fff565b60018416156190af57908102905b60019390931c928002619086565b935093915050565b6000826190d45750600161398c565b816190e15750600061398c565b81600181146190f757600281146191015761911d565b600191505061398c565b60ff84111561911257619112617fff565b50506001821b61398c565b5060208310610133831016604e8410600b8410161715619140575081810a61398c565b61914d6000198484619082565b806000190482111561916157619161617fff565b029392505050565b6000613a8583836190c5565b60008161918457619184617fff565b506000190190565b6000835161919e818460208801617bbd565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516191d8816001840160208801617bbd565b01600101949350505050565b8181036000831280158383131683831282161715616d4957616d49617fff56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220b4235f4edd0cbb54ab4d84250a2d0a2b9ff09b592338112c0aa13aeb1ffce1cc64736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. @@ -251,12 +251,12 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCallerSession) ISTEST() ( return _ZetaConnectorNativeTest.Contract.ISTEST(&_ZetaConnectorNativeTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ZetaConnectorNativeTest.contract.Call(opts, &out, "TSS_ROLE") + err := _ZetaConnectorNativeTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -268,18 +268,18 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCaller) TSSROLE(opts *bin } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNativeTest.Contract.TSSROLE(&_ZetaConnectorNativeTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNativeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNativeTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCallerSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNativeTest.Contract.TSSROLE(&_ZetaConnectorNativeTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNativeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNativeTest.CallOpts) } // ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. @@ -686,25 +686,25 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWi return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveERC20(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS") +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer") } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } // TestWithdrawAndCallReceiveERC20Partial is a paid mutator transaction binding the contract method 0xdcf7d037. @@ -770,46 +770,46 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWi return _ZetaConnectorNativeTest.Contract.TestWithdrawAndRevert(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndRevertFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfSenderIsNotWithdrawer") } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndRevertFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndRevertFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawFailsIfSenderIsNotWithdrawer") } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawFailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNativeTest.Contract.TestWithdrawFailsIfSenderIsNotTSS(&_ZetaConnectorNativeTest.TransactOpts) +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } // ZetaConnectorNativeTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the ZetaConnectorNativeTest contract. diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index e2d4ea15..d002b04a 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"_maxSupply\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"_maxSupply\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -264,12 +264,12 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) PAUSERROLE() return _ZetaConnectorNonNative.Contract.PAUSERROLE(&_ZetaConnectorNonNative.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ZetaConnectorNonNative.contract.Call(opts, &out, "TSS_ROLE") + err := _ZetaConnectorNonNative.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -281,18 +281,18 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) TSSROLE(opts *bind. } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNonNative.Contract.TSSROLE(&_ZetaConnectorNonNative.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNative.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNonNative.Contract.TSSROLE(&_ZetaConnectorNonNative.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNative.CallOpts) } // Gateway is a free data retrieval call binding the contract method 0x116191b6. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index ec38413b..64f55d0e 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dddc8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063de1cb76c11610066578063de1cb76c146102a8578063e20c9f71146102b0578063fa7626d4146102b857600080fd5b8063ba414fa614610280578063d509b16c14610298578063dcf7d037146102a057600080fd5b8063a783c789116100bd578063a783c7891461023b578063b0464fdc14610270578063b5508aa91461027857600080fd5b8063916a17c61461021e578063991a2ab51461023357600080fd5b80633f7286f41161013a57806366d9a9a01161011457806366d9a9a0146101ec57806385226c8114610201578063893f91641461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806357bb1c8f146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b6101996109c4565b6040516101a69190617b03565b60405180910390f35b6101b7610a26565b6040516101a69190617b9f565b61018f610b68565b610199611343565b6101996113a3565b61018f611403565b61018f6119f0565b6101f4611c62565b6040516101a69190617d05565b610209611de4565b6040516101a69190617da3565b61018f611eb4565b6102266120eb565b6040516101a69190617e1a565b61018f6121e6565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6040519081526020016101a6565b61022661246a565b610209612565565b610288612635565b60405190151581526020016101a6565b61018f612709565b61018f612b29565b61018f613170565b6101996138a5565b601f546102889060ff1681565b60258054307fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556026805461123490831617905560278054615678921682179055604051819061031a90617a16565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561034d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261043e919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613905565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906104ca90617a23565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610506573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061056190617a30565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105a5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b505050506040516106ee90617a3d565b604051809103906000f08015801561070a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a1c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fe575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610b5f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b48578382906000526020600020018054610abb90617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790617eb1565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081526020019060010190610a9c565b505050508152505081526020019060010190610a4a565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190617efe565b9050610c74816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190617efe565b9050610cf5816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610ddc916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150610ff89089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506110de92909116908a9089908b90600401617f58565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190617efe565b905061118e8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190617efe565b905061120f816000613924565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190617efe565b90506112b6816000613924565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190617efe565b9050611337816000613924565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936114a493921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190617efe565b90506114f2816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190617efe565b9050611573816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161165a916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118599089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118d357600080fd5b505af11580156118e7573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061193f92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190617efe565b905061118e816000613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aa657600080fd5b505af1158015611aba573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ba59190600401617f91565b600060405180830381600087803b158015611bbf57600080fd5b505af1158015611bd3573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611c2b9290911690879086908890600401617f58565b600060405180830381600087803b158015611c4557600080fd5b505af1158015611c59573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000209060020201604051806040016040529081600082018054611cb990617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce590617eb1565b8015611d325780601f10611d0757610100808354040283529160200191611d32565b820191906000526020600020905b815481529060010190602001808311611d1557829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611dcc57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d795790505b50505050508152505081526020019060010190611c86565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610b5f578382906000526020600020018054611e2790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390617eb1565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081526020019060010190611e08565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061202d9190600401617f91565b600060405180830381600087803b15801561204757600080fd5b505af115801561205b573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156120cf57600080fd5b505af11580156120e3573d6000803e3d6000fd5b505050505050565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156121ce57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161217b5790505b5050505050815250508152602001906001019061210f565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506123e49190600401617f91565b600060405180830381600087803b1580156123fe57600080fd5b505af1158015612412573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c2b9290911690879086908890600401617f58565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124fa5790505b5050505050815250508152602001906001019061248e565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000200180546125a890617eb1565b80601f01602080910402602001604051908101604052809291908181526020018280546125d490617eb1565b80156126215780601f106125f657610100808354040283529160200191612621565b820191906000526020600020905b81548152906001019060200180831161260457829003601f168201915b505050505081526020019060010190612589565b60085460009060ff161561264d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156126de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127029190617efe565b1415905090565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa15801561275e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127829190617efe565b905061278f816000613924565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612878916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561289257600080fd5b505af11580156128a6573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561293857600080fd5b505af115801561294c573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0457600080fd5b505af1158015612a18573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b169190617efe565b9050612b228186613924565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c289190617efe565b9050612c35816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca99190617efe565b9050612cb6816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612d9d916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015612db757600080fd5b505af1158015612dcb573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612e5d57600080fd5b505af1158015612e71573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612eaf600289617fd3565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612f7757600080fd5b505af1158015612f8b573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612fd09089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561304a57600080fd5b505af115801561305e573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506130b692909116908a9089908b90600401617f58565b600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a9190617efe565b905061118e8161316b60028a617fd3565b613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132299190617efe565b9050613236816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa9190617efe565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613394916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b1580156133ae57600080fd5b505af11580156133c2573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561345457600080fd5b505af1158015613468573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506134ab92506001600160a01b0390911690879061800e565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561354157600080fd5b505af1158015613555573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906135a0908a908990617f3f565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561363657600080fd5b505af115801561364a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe915061368f9089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561370957600080fd5b505af115801561371d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061377592909116908a9089908b90600401617f58565b600060405180830381600087803b15801561378f57600080fd5b505af11580156137a3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138199190617efe565b90506138258188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138999190617efe565b905061120f8185613924565b60606015805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b600061390f617a4a565b61391a8484836139a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561398f57600080fd5b505afa1580156120e3573d6000803e3d6000fd5b6000806139b08584613a1e565b9050613a136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139fe92919061800e565b60405160208183030381529060405285613a2a565b9150505b9392505050565b6000613a178383613a58565b60c08101515160009015613a4e57613a4784848460c00151613a73565b9050613a17565b613a478484613c19565b6000613a648383613d04565b613a1783836020015184613a2a565b600080613a7e613d14565b90506000613a8c8683613de7565b90506000613aa3826060015183602001518561428d565b90506000613ab38383898961449f565b90506000613ac08261531c565b602081015181519192509060030b15613b3357898260400151604051602001613aea929190618030565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b2a91600401617f91565b60405180910390fd5b6000613b766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154eb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613bc9908490600401617f91565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906180b1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c6e908790600401617f91565b600060405180830381865afa158015613c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb391908101906181c2565b90506000613ce18285604051602001613ccd9291906181f7565b6040516020818303038152906040526156eb565b90506001600160a01b03811661391a578484604051602001613aea929190618226565b613d10828260006156fe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d9b9084906004016182d1565b600060405180830381865afa158015613db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613de09190810190618318565b9250505090565b613e196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e6d85615801565b60208201526000613e7d86615be6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ee79190810190618318565b86838560200151604051602001613f019493929190618361565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f59908590600401617f91565b600060405180830381865afa158015613f76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9e9190810190618318565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fe6908490600401618465565b602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906184b7565b61403c5781604051602001613aea91906184d9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061408190849060040161856b565b600060405180830381865afa15801561409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c69190810190618318565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061410d9084906004016185bd565b602060405180830381865afa15801561412a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414e91906184b7565b156141e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141989084906004016185bd565b600060405180830381865afa1580156141b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141dd9190810190618318565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614208919061860f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161423492919061867b565b600060405180830381865afa158015614251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142799190810190618318565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142a95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614309576143096186a0565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061435d5761435d6186a0565b60200260200101819052508460405160200161437991906186cf565b6040516020818303038152906040528160028151811061439b5761439b6186a0565b6020026020010181905250826040516020016143b7919061873b565b604051602081830303815290604052816003815181106143d9576143d96186a0565b602002602001018190525060006143ef8261531c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144809060408051808201825260008082526020918201528151808301909252845182528085019082015290615e69565b6144955785604051602001613aea919061877c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144ef565b511590565b614663578260200151156145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b2a565b8260c0015115614663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b2a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161467c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146d79061880d565b935060ff16815181106146ec576146ec6186a0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161473d919061882c565b6040516020818303038152906040528282806147589061880d565b935060ff168151811061476d5761476d6186a0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806147ba9061880d565b935060ff16815181106147cf576147cf6186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061481c9061880d565b935060ff1681518110614831576148316186a0565b6020026020010181905250876020015182828061484d9061880d565b935060ff1681518110614862576148626186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806148af9061880d565b935060ff16815181106148c4576148c46186a0565b6020908102919091010152875182826148dc8161880d565b935060ff16815181106148f1576148f16186a0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061493e9061880d565b935060ff1681518110614953576149536186a0565b602002602001018190525061496746615eca565b82826149728161880d565b935060ff1681518110614987576149876186a0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149d49061880d565b935060ff16815181106149e9576149e96186a0565b602002602001018190525086828280614a019061880d565b935060ff1681518110614a1657614a166186a0565b6020908102919091010152855115614b3d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a678161880d565b935060ff1681518110614a7c57614a7c6186a0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614acc908990600401617f91565b600060405180830381865afa158015614ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b119190810190618318565b8282614b1c8161880d565b935060ff1681518110614b3157614b316186a0565b60200260200101819052505b846020015115614c0d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b868161880d565b935060ff1681518110614b9b57614b9b6186a0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614be89061880d565b935060ff1681518110614bfd57614bfd6186a0565b6020026020010181905250614dd4565b614c456144ea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cd85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c888161880d565b935060ff1681518110614c9d57614c9d6186a0565b60200260200101819052508460a00151604051602001614cbd91906186cf565b604051602081830303815290604052828280614be89061880d565b8460c00151158015614d1b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d1990511590565b155b15614dd45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5f8161880d565b935060ff1681518110614d7457614d746186a0565b6020026020010181905250614d8888615f6a565b604051602001614d9891906186cf565b604051602081830303815290604052828280614db39061880d565b935060ff1681518110614dc857614dc86186a0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e0890511590565b614e9d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e4b8161880d565b935060ff1681518110614e6057614e606186a0565b60200260200101819052508460400151828280614e7c9061880d565b935060ff1681518110614e9157614e916186a0565b60200260200101819052505b606085015115614fbe5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ee68161880d565b935060ff1681518110614efb57614efb6186a0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f929190810190618318565b8282614f9d8161880d565b935060ff1681518110614fb257614fb26186a0565b60200260200101819052505b60e085015151156150655760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150088161880d565b935060ff168151811061501d5761501d6186a0565b60200260200101819052506150398560e0015160000151615eca565b82826150448161880d565b935060ff1681518110615059576150596186a0565b60200260200101819052505b60e0850151602001511561510f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826150b28161880d565b935060ff16815181106150c7576150c76186a0565b60200260200101819052506150e38560e0015160200151615eca565b82826150ee8161880d565b935060ff1681518110615103576151036186a0565b60200260200101819052505b60e085015160400151156151b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261515c8161880d565b935060ff1681518110615171576151716186a0565b602002602001018190525061518d8560e0015160400151615eca565b82826151988161880d565b935060ff16815181106151ad576151ad6186a0565b60200260200101819052505b60e085015160600151156152635760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152068161880d565b935060ff168151811061521b5761521b6186a0565b60200260200101819052506152378560e0015160600151615eca565b82826152428161880d565b935060ff1681518110615257576152576186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615281576152816180da565b6040519080825280602002602001820160405280156152b457816020015b606081526020019060019003908161529f5790505b50905060005b8260ff168160ff16101561530d57838160ff16815181106152dd576152dd6186a0565b6020026020010151828260ff16815181106152fa576152fa6186a0565b60209081029190910101526001016152ba565b5093505050505b949350505050565b6153436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153c991869101618897565b600060405180830381865afa1580156153e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540e9190810190618318565b9050600061541c8683616a59565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161544c9190617da3565b6000604051808303816000875af115801561546b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261549391908101906188de565b805190915060030b158015906154ac5750602081015151155b80156154bb5750604081015151155b1561449557816000815181106154d3576154d36186a0565b6020026020010151604051602001613aea9190618994565b606060006155208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155579082905b90616bae565b156156b45760006155d4826155ce846155c861559a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bd5565b90616c37565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615638908290616bae565b156156a257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261569f905b8290616cbc565b90505b6156ab81616ce2565b92505050613a17565b82156156cd578484604051602001613aea929190618b80565b5050604080516020810190915260008152613a17565b509392505050565b6000808251602084016000f09392505050565b8160a001511561570d57505050565b600061571a848484616d4b565b905060006157278261531c565b602081015181519192509060030b1580156157c35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157c390604080518082018252600080825260209182015281518083019092528451825280850190820152615551565b156157d057505050505050565b604082015151156157f0578160400151604051602001613aea9190618c27565b80604051602001613aea9190618c85565b606060006158368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061589b905b8290615e69565b1561590a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a17906159059083906172e6565b616ce2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261596c905b8290617370565b600103615a3957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d290615698565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a1790615905905b8390616cbc565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a9890615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b0090839061740a565b905060008160018351615b139190618cf0565b81518110615b2357615b236186a0565b60200260200101519050615bc6615905615b996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172e6565b95945050505050565b82604051602001613aea9190618d03565b50919050565b60606000615c1b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c7d90615894565b15615c8b57613a1781616ce2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cea90615965565b600103615d5457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a179061590590615a32565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615db390615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e1b90839061740a565b9050600181511115615e57578060028251615e369190618cf0565b81518110615e4657615e466186a0565b602002602001015192505050919050565b5082604051602001613aea9190618d03565b805182516000911115615e7e5750600061391e565b81518351602085015160009291615e9491618de1565b615e9e9190618cf0565b905082602001518103615eb557600191505061391e565b82516020840151819020912014905092915050565b60606000615ed7836174af565b600101905060008167ffffffffffffffff811115615ef757615ef76180da565b6040519080825280601f01601f191660200182016040528015615f21576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f2b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615ff6905b8290617591565b1561603657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609590615fef565b156160d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261613490615fef565b1561617457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d390615fef565b806162385750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623890615fef565b1561627857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162d790615fef565b8061633c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261633c90615fef565b1561637c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163db90615fef565b806164405750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261644090615fef565b1561648057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164df90615fef565b806165445750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654490615fef565b1561658457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165e390615fef565b1561662357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261668290615fef565b156166c257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261672190615fef565b1561676157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c090615fef565b1561680057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685f90615fef565b1561689f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fe90615fef565b806169635750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696390615fef565b156169a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a0290615fef565b15616a4257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aea9290602001618df4565b60608060005b8451811015616ae45781858281518110616a7b57616a7b6186a0565b6020026020010151604051602001616a949291906181f7565b604051602081830303815290604052915060018551616ab39190618cf0565b8114616adc5781604051602001616aca9190618f5d565b60405160208183030381529060405291505b600101616a5f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616afd5790505090508381600081518110616b2857616b286186a0565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b7c57616b7c6186a0565b60200260200101819052508181600281518110616b9b57616b9b6186a0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616bcc92918491906175a5565b14159392505050565b60408051808201909152600080825260208201526000616c0784600001518560200151856000015186602001516176b6565b9050836020015181616c199190618cf0565b84518590616c28908390618cf0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c5c57508161391e565b6020808301519084015160019114616c835750815160208481015190840151829020919020145b8015616cb457825184518590616c9a908390618cf0565b9052508251602085018051616cb0908390618de1565b9052505b509192915050565b6040805180820190915260008082526020820152616cdb8383836177d6565b5092915050565b60606000826000015167ffffffffffffffff811115616d0357616d036180da565b6040519080825280601f01601f191660200182016040528015616d2d576020820181803683370190505b5090506000602082019050616cdb8185602001518660000151617881565b60606000616d57613d14565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d7457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dcf9061880d565b935060ff1681518110616de457616de46186a0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e359190618f9e565b604051602081830303815290604052828280616e509061880d565b935060ff1681518110616e6557616e656186a0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616eb29061880d565b935060ff1681518110616ec757616ec76186a0565b602002602001018190525082604051602001616ee3919061873b565b604051602081830303815290604052828280616efe9061880d565b935060ff1681518110616f1357616f136186a0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f609061880d565b935060ff1681518110616f7557616f756186a0565b6020026020010181905250616f8a87846178fb565b8282616f958161880d565b935060ff1681518110616faa57616faa6186a0565b6020908102919091010152855151156170565760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616ffc8161880d565b935060ff1681518110617011576170116186a0565b602002602001018190525061702a8660000151846178fb565b82826170358161880d565b935060ff168151811061704a5761704a6186a0565b60200260200101819052505b8560800151156170c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261709f8161880d565b935060ff16815181106170b4576170b46186a0565b602002602001018190525061712a565b841561712a5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171098161880d565b935060ff168151811061711e5761711e6186a0565b60200260200101819052505b604086015151156171c65760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171748161880d565b935060ff1681518110617189576171896186a0565b602002602001018190525085604001518282806171a59061880d565b935060ff16815181106171ba576171ba6186a0565b60200260200101819052505b8560600151156172305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261720f8161880d565b935060ff1681518110617224576172246186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561724e5761724e6180da565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b8260ff168160ff1610156172da57838160ff16815181106172aa576172aa6186a0565b6020026020010151828260ff16815181106172c7576172c76186a0565b6020908102919091010152600101617287565b50979650505050505050565b604080518082019091526000808252602082015281518351101561730b57508161391e565b8151835160208501516000929161732191618de1565b61732b9190618cf0565b6020840151909150600190821461734c575082516020840151819020908220145b801561736757835185518690617363908390618cf0565b9052505b50929392505050565b600080826000015161739485600001518660200151866000015187602001516176b6565b61739e9190618de1565b90505b835160208501516173b29190618de1565b8111616cdb57816173c281618fe3565b92505082600001516173f98560200151836173dd9190618cf0565b86516173e99190618cf0565b83866000015187602001516176b6565b6174039190618de1565b90506173a1565b606060006174188484617370565b617423906001618de1565b67ffffffffffffffff81111561743b5761743b6180da565b60405190808252806020026020018201604052801561746e57816020015b60608152602001906001900390816174595790505b50905060005b81518110156156e35761748a6159058686616cbc565b82828151811061749c5761749c6186a0565b6020908102919091010152600101617474565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617524576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061754257662386f26fc10000830492506010015b6305f5e100831061755a576305f5e100830492506008015b612710831061756e57612710830492506004015b60648310617580576064830492506002015b600a831061391e5760010192915050565b600061759d838361793b565b159392505050565b6000808584116176ac576020841161765857600084156175f05760016175cc866020618cf0565b6175d7906008618ffd565b6175e29060026190fb565b6175ec9190618cf0565b1990505b83518116856175ff8989618de1565b6176099190618cf0565b805190935082165b8181146176435787841161762b5787945050505050615314565b8361763581619107565b945050828451169050617611565b61764d8785618de1565b945050505050615314565b8383206176658588618cf0565b61766f9087618de1565b91505b8582106176aa578482208082036176975761768d8684618de1565b9350505050615314565b6176a2600184618cf0565b925050617672565b505b5092949350505050565b600083818685116177c1576020851161777057600085156177025760016176de876020618cf0565b6176e9906008618ffd565b6176f49060026190fb565b6176fe9190618cf0565b1990505b845181166000876177138b8b618de1565b61771d9190618cf0565b855190915083165b8281146177625781861061774a5761773d8b8b618de1565b9650505050505050615314565b8561775481618fe3565b965050838651169050617725565b859650505050505050615314565b508383206000905b6177828689618cf0565b82116177bf5785832080820361779e5783945050505050615314565b6177a9600185618de1565b93505081806177b790618fe3565b925050617778565b505b6177cb8787618de1565b979650505050505050565b6040805180820190915260008082526020820152600061780885600001518660200151866000015187602001516176b6565b6020808701805191860191909152519091506178249082618cf0565b8352845160208601516178379190618de1565b81036178465760008552617878565b835183516178549190618de1565b85518690617863908390618cf0565b90525083516178729082618de1565b60208601525b50909392505050565b602081106178b95781518352617898602084618de1565b92506178a5602083618de1565b91506178b2602082618cf0565b9050617881565b60001981156178e85760016178cf836020618cf0565b6178db906101006190fb565b6178e59190618cf0565b90505b9151835183169219169190911790915250565b606060006179098484613de7565b80516020808301516040519394506179239390910161911e565b60405160208183030381529060405291505092915050565b815181516000919081111561794e575081515b6020808501519084015160005b83811015617a0757825182518082146179d75760001960208710156179b657600184617988896020618cf0565b6179929190618de1565b61799d906008618ffd565b6179a89060026190fb565b6179b29190618cf0565b1990505b81811683821681810391146179d457975061391e9650505050505050565b50505b6179e2602086618de1565b94506179ef602085618de1565b93505050602081617a009190618de1565b905061795b565b50845186516144959190619176565b6112a68061919783390190565b6113e28061a43d83390190565b61182a8061b81f83390190565b610d5e8061d04983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a8d617a92565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a8d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b445783516001600160a01b0316835260209384019390920191600101617b1d565b509095945050505050565b60005b83811015617b6a578181015183820152602001617b52565b50506000910152565b60008151808452617b8b816020860160208601617b4f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c6b848651617b73565b6020958601959094509290920191600101617c31565b509197505050602094850194929092019150600101617bc7565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cfb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cbb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d716040880182617b73565b9050602082015191508681036020880152617d8c8183617ca7565b965050506020938401939190910190600101617d2d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e05858351617b73565b94506020938401939190910190600101617dcb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e9b6040870182617ca7565b9550506020938401939190910190600101617e42565b600181811c90821680617ec557607f821691505b602082108103615be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f1057600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615bc66060830184617b73565b8281526040602082015260006153146040830184617b73565b6001600160a01b0385168152836020820152608060408201526000617f806080830185617b73565b905082606083015295945050505050565b602081526000613a176020830184617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082618009577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153146040830184617b73565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161806881601a850160208801617b4f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180a581601c840160208801617b4f565b01601c01949350505050565b6000602082840312156180c357600080fd5b81516001600160a01b0381168114613a1757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561812c5761812c6180da565b60405290565b60008067ffffffffffffffff84111561814d5761814d6180da565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561817c5761817c6180da565b60405283815290508082840185101561819457600080fd5b6156e3846020830185617b4f565b600082601f8301126181b357600080fd5b613a1783835160208501618132565b6000602082840312156181d457600080fd5b815167ffffffffffffffff8111156181eb57600080fd5b61391a848285016181a2565b60008351618209818460208801617b4f565b83519083019061821d818360208801617b4f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161825e81601a850160208801617b4f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161829b816033840160208801617b4f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a176080830184617b73565b60006020828403121561832a57600080fd5b815167ffffffffffffffff81111561834157600080fd5b8201601f8101841361835257600080fd5b61391a84825160208401618132565b60008551618373818460208a01617b4f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183ad816001840160208a01617b4f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516183eb816002840160208901617b4f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161842d816002840160208801617b4f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184786040830184617b73565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156184c957600080fd5b81518015158114613a1757600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161851181601f850160208701617b4f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061857e6040830184617b73565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185d06040830184617b73565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618647816014850160208701617b4f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061868e6040830185617b73565b8281036020840152613a138185617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618707816001850160208701617b4f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161874d818460208701617b4f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161880081604b850160208701617b4f565b91909101604b0192915050565b600060ff821660ff810361882357618823617fa4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a176080830184617b73565b6000602082840312156188f057600080fd5b815167ffffffffffffffff81111561890757600080fd5b82016060818503121561891957600080fd5b618921618109565b81518060030b811461893257600080fd5b8152602082015167ffffffffffffffff81111561894e57600080fd5b61895a868285016181a2565b602083015250604082015167ffffffffffffffff81111561897a57600080fd5b618986868285016181a2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189f2816021850160208701617b4f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bde816021850160208801617b4f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1b81602e840160208801617b4f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618ce3816022850160208701617b4f565b9190910160220192915050565b8181038181111561391e5761391e617fa4565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d3b81600e850160208701617b4f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561391e5761391e617fa4565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e2c816018850160208801617b4f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e6981601c840160208801617b4f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f6f818460208701617b4f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fd681601c850160208701617b4f565b91909101601c0192915050565b60006000198203618ff657618ff6617fa4565b5060010190565b808202811582820484141761391e5761391e617fa4565b6001815b600184111561904f5780850481111561903357619033617fa4565b600184161561904157908102905b60019390931c928002619018565b935093915050565b6000826190665750600161391e565b816190735750600061391e565b81600181146190895760028114619093576190af565b600191505061391e565b60ff8411156190a4576190a4617fa4565b50506001821b61391e565b5060208310610133831016604e8410600b84101617156190d2575081810a61391e565b6190df6000198484619014565b80600019048211156190f3576190f3617fa4565b029392505050565b6000613a178383619057565b60008161911657619116617fa4565b506000190190565b60008351619130818460208801617b4f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161916a816001840160208801617b4f565b01600101949350505050565b8181036000831280158383131683831282161715616cdb57616cdb617fa456fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220e85480915ea748eb09b1b126e7ddd7ae6a5422f81d24e35f93cdf1647539559d64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"structStdInvariant.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\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"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},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dddc8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b6101996109c4565b6040516101a69190617b03565b60405180910390f35b6101b7610a26565b6040516101a69190617b9f565b61018f610b68565b610199611343565b6101996113a3565b61018f611403565b6101ec6119f0565b6040516101a69190617d05565b61018f611b72565b610209611de4565b6040516101a69190617da3565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611eb4565b6040516101a69190617e1a565b610253611faf565b6102096120aa565b61027861217a565b60405190151581526020016101a6565b61018f61224e565b61018f6124d2565b61018f6128f2565b61018f612f39565b61019961366e565b601f546102789060ff1681565b61018f6136ce565b60258054307fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556026805461123490831617905560278054615678921682179055604051819061031a90617a16565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561034d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261043e919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613905565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906104ca90617a23565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610506573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061056190617a30565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105a5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b505050506040516106ee90617a3d565b604051809103906000f08015801561070a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a1c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fe575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610b5f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b48578382906000526020600020018054610abb90617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790617eb1565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081526020019060010190610a9c565b505050508152505081526020019060010190610a4a565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190617efe565b9050610c74816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190617efe565b9050610cf5816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610ddc916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150610ff89089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506110de92909116908a9089908b90600401617f58565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190617efe565b905061118e8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190617efe565b905061120f816000613924565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190617efe565b90506112b6816000613924565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190617efe565b9050611337816000613924565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936114a493921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190617efe565b90506114f2816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190617efe565b9050611573816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161165a916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118599089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118d357600080fd5b505af11580156118e7573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061193f92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190617efe565b905061118e816000613924565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000209060020201604051806040016040529081600082018054611a4790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7390617eb1565b8015611ac05780601f10611a9557610100808354040283529160200191611ac0565b820191906000526020600020905b815481529060010190602001808311611aa357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b075790505b50505050508152505081526020019060010190611a14565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d279190600401617f91565b600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611dad9290911690879086908890600401617f58565b600060405180830381600087803b158015611dc757600080fd5b505af1158015611ddb573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610b5f578382906000526020600020018054611e2790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390617eb1565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081526020019060010190611e08565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611f9757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f445790505b50505050508152505081526020019060010190611ed8565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561209257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161203f5790505b50505050508152505081526020019060010190611fd3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000200180546120ed90617eb1565b80601f016020809104026020016040519081016040528092919081815260200182805461211990617eb1565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b5050505050815260200190600101906120ce565b60085460009060ff1615612192575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190617efe565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061244c9190600401617f91565b600060405180830381600087803b15801561246657600080fd5b505af115801561247a573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611dad9290911690879086908890600401617f58565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015612527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254b9190617efe565b9050612558816000613924565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612641916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561265b57600080fd5b505af115801561266f573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401600060405180830381600087803b15801561285557600080fd5b505af1158015612869573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df9190617efe565b90506128eb8186613924565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f19190617efe565b90506129fe816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190617efe565b9050612a7f816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612b66916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612c78600289617fd3565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d4057600080fd5b505af1158015612d54573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612d999089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e1357600080fd5b505af1158015612e27573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612e7f92909116908a9089908b90600401617f58565b600060405180830381600087803b158015612e9957600080fd5b505af1158015612ead573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f239190617efe565b905061118e81612f3460028a617fd3565b613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190617efe565b9050612fff816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561304f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130739190617efe565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161315d916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561317757600080fd5b505af115801561318b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061327492506001600160a01b0390911690879061800e565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613369908a908990617f3f565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156133ff57600080fd5b505af1158015613413573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe91506134589089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134d257600080fd5b505af11580156134e6573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061353e92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561355857600080fd5b505af115801561356c573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156135be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e29190617efe565b90506135ee8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190617efe565b905061120f8185613924565b60606015805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561374857600080fd5b505af115801561375c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138479190600401617f91565b600060405180830381600087803b15801561386157600080fd5b505af1158015613875573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b505050505050565b600061390f617a4a565b61391a8484836139a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561398f57600080fd5b505afa1580156138fd573d6000803e3d6000fd5b6000806139b08584613a1e565b9050613a136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139fe92919061800e565b60405160208183030381529060405285613a2a565b9150505b9392505050565b6000613a178383613a58565b60c08101515160009015613a4e57613a4784848460c00151613a73565b9050613a17565b613a478484613c19565b6000613a648383613d04565b613a1783836020015184613a2a565b600080613a7e613d14565b90506000613a8c8683613de7565b90506000613aa3826060015183602001518561428d565b90506000613ab38383898961449f565b90506000613ac08261531c565b602081015181519192509060030b15613b3357898260400151604051602001613aea929190618030565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b2a91600401617f91565b60405180910390fd5b6000613b766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154eb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613bc9908490600401617f91565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906180b1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c6e908790600401617f91565b600060405180830381865afa158015613c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb391908101906181c2565b90506000613ce18285604051602001613ccd9291906181f7565b6040516020818303038152906040526156eb565b90506001600160a01b03811661391a578484604051602001613aea929190618226565b613d10828260006156fe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d9b9084906004016182d1565b600060405180830381865afa158015613db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613de09190810190618318565b9250505090565b613e196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e6d85615801565b60208201526000613e7d86615be6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ee79190810190618318565b86838560200151604051602001613f019493929190618361565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f59908590600401617f91565b600060405180830381865afa158015613f76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9e9190810190618318565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fe6908490600401618465565b602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906184b7565b61403c5781604051602001613aea91906184d9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061408190849060040161856b565b600060405180830381865afa15801561409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c69190810190618318565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061410d9084906004016185bd565b602060405180830381865afa15801561412a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414e91906184b7565b156141e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141989084906004016185bd565b600060405180830381865afa1580156141b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141dd9190810190618318565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614208919061860f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161423492919061867b565b600060405180830381865afa158015614251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142799190810190618318565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142a95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614309576143096186a0565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061435d5761435d6186a0565b60200260200101819052508460405160200161437991906186cf565b6040516020818303038152906040528160028151811061439b5761439b6186a0565b6020026020010181905250826040516020016143b7919061873b565b604051602081830303815290604052816003815181106143d9576143d96186a0565b602002602001018190525060006143ef8261531c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144809060408051808201825260008082526020918201528151808301909252845182528085019082015290615e69565b6144955785604051602001613aea919061877c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144ef565b511590565b614663578260200151156145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b2a565b8260c0015115614663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b2a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161467c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146d79061880d565b935060ff16815181106146ec576146ec6186a0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161473d919061882c565b6040516020818303038152906040528282806147589061880d565b935060ff168151811061476d5761476d6186a0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806147ba9061880d565b935060ff16815181106147cf576147cf6186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061481c9061880d565b935060ff1681518110614831576148316186a0565b6020026020010181905250876020015182828061484d9061880d565b935060ff1681518110614862576148626186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806148af9061880d565b935060ff16815181106148c4576148c46186a0565b6020908102919091010152875182826148dc8161880d565b935060ff16815181106148f1576148f16186a0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061493e9061880d565b935060ff1681518110614953576149536186a0565b602002602001018190525061496746615eca565b82826149728161880d565b935060ff1681518110614987576149876186a0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149d49061880d565b935060ff16815181106149e9576149e96186a0565b602002602001018190525086828280614a019061880d565b935060ff1681518110614a1657614a166186a0565b6020908102919091010152855115614b3d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a678161880d565b935060ff1681518110614a7c57614a7c6186a0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614acc908990600401617f91565b600060405180830381865afa158015614ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b119190810190618318565b8282614b1c8161880d565b935060ff1681518110614b3157614b316186a0565b60200260200101819052505b846020015115614c0d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b868161880d565b935060ff1681518110614b9b57614b9b6186a0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614be89061880d565b935060ff1681518110614bfd57614bfd6186a0565b6020026020010181905250614dd4565b614c456144ea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cd85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c888161880d565b935060ff1681518110614c9d57614c9d6186a0565b60200260200101819052508460a00151604051602001614cbd91906186cf565b604051602081830303815290604052828280614be89061880d565b8460c00151158015614d1b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d1990511590565b155b15614dd45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5f8161880d565b935060ff1681518110614d7457614d746186a0565b6020026020010181905250614d8888615f6a565b604051602001614d9891906186cf565b604051602081830303815290604052828280614db39061880d565b935060ff1681518110614dc857614dc86186a0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e0890511590565b614e9d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e4b8161880d565b935060ff1681518110614e6057614e606186a0565b60200260200101819052508460400151828280614e7c9061880d565b935060ff1681518110614e9157614e916186a0565b60200260200101819052505b606085015115614fbe5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ee68161880d565b935060ff1681518110614efb57614efb6186a0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f929190810190618318565b8282614f9d8161880d565b935060ff1681518110614fb257614fb26186a0565b60200260200101819052505b60e085015151156150655760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150088161880d565b935060ff168151811061501d5761501d6186a0565b60200260200101819052506150398560e0015160000151615eca565b82826150448161880d565b935060ff1681518110615059576150596186a0565b60200260200101819052505b60e0850151602001511561510f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826150b28161880d565b935060ff16815181106150c7576150c76186a0565b60200260200101819052506150e38560e0015160200151615eca565b82826150ee8161880d565b935060ff1681518110615103576151036186a0565b60200260200101819052505b60e085015160400151156151b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261515c8161880d565b935060ff1681518110615171576151716186a0565b602002602001018190525061518d8560e0015160400151615eca565b82826151988161880d565b935060ff16815181106151ad576151ad6186a0565b60200260200101819052505b60e085015160600151156152635760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152068161880d565b935060ff168151811061521b5761521b6186a0565b60200260200101819052506152378560e0015160600151615eca565b82826152428161880d565b935060ff1681518110615257576152576186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615281576152816180da565b6040519080825280602002602001820160405280156152b457816020015b606081526020019060019003908161529f5790505b50905060005b8260ff168160ff16101561530d57838160ff16815181106152dd576152dd6186a0565b6020026020010151828260ff16815181106152fa576152fa6186a0565b60209081029190910101526001016152ba565b5093505050505b949350505050565b6153436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153c991869101618897565b600060405180830381865afa1580156153e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540e9190810190618318565b9050600061541c8683616a59565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161544c9190617da3565b6000604051808303816000875af115801561546b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261549391908101906188de565b805190915060030b158015906154ac5750602081015151155b80156154bb5750604081015151155b1561449557816000815181106154d3576154d36186a0565b6020026020010151604051602001613aea9190618994565b606060006155208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155579082905b90616bae565b156156b45760006155d4826155ce846155c861559a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bd5565b90616c37565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615638908290616bae565b156156a257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261569f905b8290616cbc565b90505b6156ab81616ce2565b92505050613a17565b82156156cd578484604051602001613aea929190618b80565b5050604080516020810190915260008152613a17565b509392505050565b6000808251602084016000f09392505050565b8160a001511561570d57505050565b600061571a848484616d4b565b905060006157278261531c565b602081015181519192509060030b1580156157c35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157c390604080518082018252600080825260209182015281518083019092528451825280850190820152615551565b156157d057505050505050565b604082015151156157f0578160400151604051602001613aea9190618c27565b80604051602001613aea9190618c85565b606060006158368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061589b905b8290615e69565b1561590a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a17906159059083906172e6565b616ce2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261596c905b8290617370565b600103615a3957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d290615698565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a1790615905905b8390616cbc565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a9890615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b0090839061740a565b905060008160018351615b139190618cf0565b81518110615b2357615b236186a0565b60200260200101519050615bc6615905615b996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172e6565b95945050505050565b82604051602001613aea9190618d03565b50919050565b60606000615c1b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c7d90615894565b15615c8b57613a1781616ce2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cea90615965565b600103615d5457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a179061590590615a32565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615db390615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e1b90839061740a565b9050600181511115615e57578060028251615e369190618cf0565b81518110615e4657615e466186a0565b602002602001015192505050919050565b5082604051602001613aea9190618d03565b805182516000911115615e7e5750600061391e565b81518351602085015160009291615e9491618de1565b615e9e9190618cf0565b905082602001518103615eb557600191505061391e565b82516020840151819020912014905092915050565b60606000615ed7836174af565b600101905060008167ffffffffffffffff811115615ef757615ef76180da565b6040519080825280601f01601f191660200182016040528015615f21576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f2b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615ff6905b8290617591565b1561603657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609590615fef565b156160d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261613490615fef565b1561617457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d390615fef565b806162385750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623890615fef565b1561627857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162d790615fef565b8061633c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261633c90615fef565b1561637c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163db90615fef565b806164405750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261644090615fef565b1561648057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164df90615fef565b806165445750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654490615fef565b1561658457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165e390615fef565b1561662357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261668290615fef565b156166c257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261672190615fef565b1561676157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c090615fef565b1561680057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685f90615fef565b1561689f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fe90615fef565b806169635750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696390615fef565b156169a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a0290615fef565b15616a4257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aea9290602001618df4565b60608060005b8451811015616ae45781858281518110616a7b57616a7b6186a0565b6020026020010151604051602001616a949291906181f7565b604051602081830303815290604052915060018551616ab39190618cf0565b8114616adc5781604051602001616aca9190618f5d565b60405160208183030381529060405291505b600101616a5f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616afd5790505090508381600081518110616b2857616b286186a0565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b7c57616b7c6186a0565b60200260200101819052508181600281518110616b9b57616b9b6186a0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616bcc92918491906175a5565b14159392505050565b60408051808201909152600080825260208201526000616c0784600001518560200151856000015186602001516176b6565b9050836020015181616c199190618cf0565b84518590616c28908390618cf0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c5c57508161391e565b6020808301519084015160019114616c835750815160208481015190840151829020919020145b8015616cb457825184518590616c9a908390618cf0565b9052508251602085018051616cb0908390618de1565b9052505b509192915050565b6040805180820190915260008082526020820152616cdb8383836177d6565b5092915050565b60606000826000015167ffffffffffffffff811115616d0357616d036180da565b6040519080825280601f01601f191660200182016040528015616d2d576020820181803683370190505b5090506000602082019050616cdb8185602001518660000151617881565b60606000616d57613d14565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d7457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dcf9061880d565b935060ff1681518110616de457616de46186a0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e359190618f9e565b604051602081830303815290604052828280616e509061880d565b935060ff1681518110616e6557616e656186a0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616eb29061880d565b935060ff1681518110616ec757616ec76186a0565b602002602001018190525082604051602001616ee3919061873b565b604051602081830303815290604052828280616efe9061880d565b935060ff1681518110616f1357616f136186a0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f609061880d565b935060ff1681518110616f7557616f756186a0565b6020026020010181905250616f8a87846178fb565b8282616f958161880d565b935060ff1681518110616faa57616faa6186a0565b6020908102919091010152855151156170565760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616ffc8161880d565b935060ff1681518110617011576170116186a0565b602002602001018190525061702a8660000151846178fb565b82826170358161880d565b935060ff168151811061704a5761704a6186a0565b60200260200101819052505b8560800151156170c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261709f8161880d565b935060ff16815181106170b4576170b46186a0565b602002602001018190525061712a565b841561712a5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171098161880d565b935060ff168151811061711e5761711e6186a0565b60200260200101819052505b604086015151156171c65760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171748161880d565b935060ff1681518110617189576171896186a0565b602002602001018190525085604001518282806171a59061880d565b935060ff16815181106171ba576171ba6186a0565b60200260200101819052505b8560600151156172305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261720f8161880d565b935060ff1681518110617224576172246186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561724e5761724e6180da565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b8260ff168160ff1610156172da57838160ff16815181106172aa576172aa6186a0565b6020026020010151828260ff16815181106172c7576172c76186a0565b6020908102919091010152600101617287565b50979650505050505050565b604080518082019091526000808252602082015281518351101561730b57508161391e565b8151835160208501516000929161732191618de1565b61732b9190618cf0565b6020840151909150600190821461734c575082516020840151819020908220145b801561736757835185518690617363908390618cf0565b9052505b50929392505050565b600080826000015161739485600001518660200151866000015187602001516176b6565b61739e9190618de1565b90505b835160208501516173b29190618de1565b8111616cdb57816173c281618fe3565b92505082600001516173f98560200151836173dd9190618cf0565b86516173e99190618cf0565b83866000015187602001516176b6565b6174039190618de1565b90506173a1565b606060006174188484617370565b617423906001618de1565b67ffffffffffffffff81111561743b5761743b6180da565b60405190808252806020026020018201604052801561746e57816020015b60608152602001906001900390816174595790505b50905060005b81518110156156e35761748a6159058686616cbc565b82828151811061749c5761749c6186a0565b6020908102919091010152600101617474565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617524576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061754257662386f26fc10000830492506010015b6305f5e100831061755a576305f5e100830492506008015b612710831061756e57612710830492506004015b60648310617580576064830492506002015b600a831061391e5760010192915050565b600061759d838361793b565b159392505050565b6000808584116176ac576020841161765857600084156175f05760016175cc866020618cf0565b6175d7906008618ffd565b6175e29060026190fb565b6175ec9190618cf0565b1990505b83518116856175ff8989618de1565b6176099190618cf0565b805190935082165b8181146176435787841161762b5787945050505050615314565b8361763581619107565b945050828451169050617611565b61764d8785618de1565b945050505050615314565b8383206176658588618cf0565b61766f9087618de1565b91505b8582106176aa578482208082036176975761768d8684618de1565b9350505050615314565b6176a2600184618cf0565b925050617672565b505b5092949350505050565b600083818685116177c1576020851161777057600085156177025760016176de876020618cf0565b6176e9906008618ffd565b6176f49060026190fb565b6176fe9190618cf0565b1990505b845181166000876177138b8b618de1565b61771d9190618cf0565b855190915083165b8281146177625781861061774a5761773d8b8b618de1565b9650505050505050615314565b8561775481618fe3565b965050838651169050617725565b859650505050505050615314565b508383206000905b6177828689618cf0565b82116177bf5785832080820361779e5783945050505050615314565b6177a9600185618de1565b93505081806177b790618fe3565b925050617778565b505b6177cb8787618de1565b979650505050505050565b6040805180820190915260008082526020820152600061780885600001518660200151866000015187602001516176b6565b6020808701805191860191909152519091506178249082618cf0565b8352845160208601516178379190618de1565b81036178465760008552617878565b835183516178549190618de1565b85518690617863908390618cf0565b90525083516178729082618de1565b60208601525b50909392505050565b602081106178b95781518352617898602084618de1565b92506178a5602083618de1565b91506178b2602082618cf0565b9050617881565b60001981156178e85760016178cf836020618cf0565b6178db906101006190fb565b6178e59190618cf0565b90505b9151835183169219169190911790915250565b606060006179098484613de7565b80516020808301516040519394506179239390910161911e565b60405160208183030381529060405291505092915050565b815181516000919081111561794e575081515b6020808501519084015160005b83811015617a0757825182518082146179d75760001960208710156179b657600184617988896020618cf0565b6179929190618de1565b61799d906008618ffd565b6179a89060026190fb565b6179b29190618cf0565b1990505b81811683821681810391146179d457975061391e9650505050505050565b50505b6179e2602086618de1565b94506179ef602085618de1565b93505050602081617a009190618de1565b905061795b565b50845186516144959190619176565b6112a68061919783390190565b6113e28061a43d83390190565b61182a8061b81f83390190565b610d5e8061d04983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a8d617a92565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a8d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b445783516001600160a01b0316835260209384019390920191600101617b1d565b509095945050505050565b60005b83811015617b6a578181015183820152602001617b52565b50506000910152565b60008151808452617b8b816020860160208601617b4f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c6b848651617b73565b6020958601959094509290920191600101617c31565b509197505050602094850194929092019150600101617bc7565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cfb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cbb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d716040880182617b73565b9050602082015191508681036020880152617d8c8183617ca7565b965050506020938401939190910190600101617d2d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e05858351617b73565b94506020938401939190910190600101617dcb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e9b6040870182617ca7565b9550506020938401939190910190600101617e42565b600181811c90821680617ec557607f821691505b602082108103615be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f1057600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615bc66060830184617b73565b8281526040602082015260006153146040830184617b73565b6001600160a01b0385168152836020820152608060408201526000617f806080830185617b73565b905082606083015295945050505050565b602081526000613a176020830184617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082618009577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153146040830184617b73565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161806881601a850160208801617b4f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180a581601c840160208801617b4f565b01601c01949350505050565b6000602082840312156180c357600080fd5b81516001600160a01b0381168114613a1757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561812c5761812c6180da565b60405290565b60008067ffffffffffffffff84111561814d5761814d6180da565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561817c5761817c6180da565b60405283815290508082840185101561819457600080fd5b6156e3846020830185617b4f565b600082601f8301126181b357600080fd5b613a1783835160208501618132565b6000602082840312156181d457600080fd5b815167ffffffffffffffff8111156181eb57600080fd5b61391a848285016181a2565b60008351618209818460208801617b4f565b83519083019061821d818360208801617b4f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161825e81601a850160208801617b4f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161829b816033840160208801617b4f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a176080830184617b73565b60006020828403121561832a57600080fd5b815167ffffffffffffffff81111561834157600080fd5b8201601f8101841361835257600080fd5b61391a84825160208401618132565b60008551618373818460208a01617b4f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183ad816001840160208a01617b4f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516183eb816002840160208901617b4f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161842d816002840160208801617b4f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184786040830184617b73565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156184c957600080fd5b81518015158114613a1757600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161851181601f850160208701617b4f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061857e6040830184617b73565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185d06040830184617b73565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618647816014850160208701617b4f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061868e6040830185617b73565b8281036020840152613a138185617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618707816001850160208701617b4f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161874d818460208701617b4f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161880081604b850160208701617b4f565b91909101604b0192915050565b600060ff821660ff810361882357618823617fa4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a176080830184617b73565b6000602082840312156188f057600080fd5b815167ffffffffffffffff81111561890757600080fd5b82016060818503121561891957600080fd5b618921618109565b81518060030b811461893257600080fd5b8152602082015167ffffffffffffffff81111561894e57600080fd5b61895a868285016181a2565b602083015250604082015167ffffffffffffffff81111561897a57600080fd5b618986868285016181a2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189f2816021850160208701617b4f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bde816021850160208801617b4f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1b81602e840160208801617b4f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618ce3816022850160208701617b4f565b9190910160220192915050565b8181038181111561391e5761391e617fa4565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d3b81600e850160208701617b4f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561391e5761391e617fa4565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e2c816018850160208801617b4f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e6981601c840160208801617b4f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f6f818460208701617b4f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fd681601c850160208701617b4f565b91909101601c0192915050565b60006000198203618ff657618ff6617fa4565b5060010190565b808202811582820484141761391e5761391e617fa4565b6001815b600184111561904f5780850481111561903357619033617fa4565b600184161561904157908102905b60019390931c928002619018565b935093915050565b6000826190665750600161391e565b816190735750600061391e565b81600181146190895760028114619093576190af565b600191505061391e565b60ff8411156190a4576190a4617fa4565b50506001821b61391e565b5060208310610133831016604e8410600b84101617156190d2575081810a61391e565b6190df6000198484619014565b80600019048211156190f3576190f3617fa4565b029392505050565b6000613a178383619057565b60008161911657619116617fa4565b506000190190565b60008351619130818460208801617b4f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161916a816001840160208801617b4f565b01600101949350505050565b8181036000831280158383131683831282161715616cdb57616cdb617fa456fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122049bb636b102be587bd8860316de0ccc099b1bf45bf33a7d054bec099acc25c6264736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. @@ -251,12 +251,12 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) ISTE return _ZetaConnectorNonNativeTest.Contract.ISTEST(&_ZetaConnectorNonNativeTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ZetaConnectorNonNativeTest.contract.Call(opts, &out, "TSS_ROLE") + err := _ZetaConnectorNonNativeTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") if err != nil { return *new([32]byte), err @@ -268,18 +268,18 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCaller) TSSROLE(opt } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNonNativeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNativeTest.CallOpts) } -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) TSSROLE() ([32]byte, error) { - return _ZetaConnectorNonNativeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeTest.CallOpts) +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNativeTest.CallOpts) } // ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. @@ -686,25 +686,25 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveERC20(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS") +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer") } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x991a2ab5. +// TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xc1909972. // -// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } // TestWithdrawAndCallReceiveERC20Partial is a paid mutator transaction binding the contract method 0xdcf7d037. @@ -770,46 +770,46 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevert(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndRevertFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfSenderIsNotWithdrawer") } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndRevertFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawAndRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x57bb1c8f. +// TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // -// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndRevertFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawFailsIfSenderIsNotTSS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawFailsIfSenderIsNotTSS") +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawFailsIfSenderIsNotWithdrawer") } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawFailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } -// TestWithdrawFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0x893f9164. +// TestWithdrawFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe574f84. // -// Solidity: function testWithdrawFailsIfSenderIsNotTSS() returns() -func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawFailsIfSenderIsNotTSS() (*types.Transaction, error) { - return _ZetaConnectorNonNativeTest.Contract.TestWithdrawFailsIfSenderIsNotTSS(&_ZetaConnectorNonNativeTest.TransactOpts) +// Solidity: function testWithdrawFailsIfSenderIsNotWithdrawer() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } // ZetaConnectorNonNativeTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the ZetaConnectorNonNativeTest contract. diff --git a/v2/typechain-types/ERC20Custody.ts b/v2/typechain-types/ERC20Custody.ts index a8f46c59..f4bfcc0a 100644 --- a/v2/typechain-types/ERC20Custody.ts +++ b/v2/typechain-types/ERC20Custody.ts @@ -28,7 +28,7 @@ export interface ERC20CustodyInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" - | "TSS_ROLE" + | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" @@ -65,7 +65,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; - encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; encodeFunctionData(functionFragment: "gateway", values?: undefined): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -119,7 +122,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; decodeFunctionResult( functionFragment: "getRoleAdmin", @@ -348,7 +354,7 @@ export interface ERC20Custody extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; - TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -431,7 +437,7 @@ export interface ERC20Custody extends BaseContract { nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( - nameOrSignature: "TSS_ROLE" + nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "gateway" diff --git a/v2/typechain-types/ERC20CustodyEchidnaTest.ts b/v2/typechain-types/ERC20CustodyEchidnaTest.ts index c5bb60c7..f9701fff 100644 --- a/v2/typechain-types/ERC20CustodyEchidnaTest.ts +++ b/v2/typechain-types/ERC20CustodyEchidnaTest.ts @@ -28,7 +28,7 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" - | "TSS_ROLE" + | "WITHDRAWER_ROLE" | "echidnaCaller" | "gateway" | "getRoleAdmin" @@ -68,7 +68,10 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; - encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; encodeFunctionData( functionFragment: "echidnaCaller", values?: undefined @@ -131,7 +134,10 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "echidnaCaller", data: BytesLike @@ -369,7 +375,7 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; - TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; echidnaCaller: TypedContractMethod<[], [string], "view">; @@ -462,7 +468,7 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( - nameOrSignature: "TSS_ROLE" + nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "echidnaCaller" diff --git a/v2/typechain-types/ZetaConnectorBase.ts b/v2/typechain-types/ZetaConnectorBase.ts index 73268bb4..f8abb37a 100644 --- a/v2/typechain-types/ZetaConnectorBase.ts +++ b/v2/typechain-types/ZetaConnectorBase.ts @@ -28,7 +28,7 @@ export interface ZetaConnectorBaseInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" - | "TSS_ROLE" + | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" @@ -67,7 +67,10 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; - encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; encodeFunctionData(functionFragment: "gateway", values?: undefined): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -126,7 +129,10 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; decodeFunctionResult( functionFragment: "getRoleAdmin", @@ -341,7 +347,7 @@ export interface ZetaConnectorBase extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; - TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -432,7 +438,7 @@ export interface ZetaConnectorBase extends BaseContract { nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( - nameOrSignature: "TSS_ROLE" + nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "gateway" diff --git a/v2/typechain-types/ZetaConnectorNative.ts b/v2/typechain-types/ZetaConnectorNative.ts index 8093f84e..2e795f63 100644 --- a/v2/typechain-types/ZetaConnectorNative.ts +++ b/v2/typechain-types/ZetaConnectorNative.ts @@ -28,7 +28,7 @@ export interface ZetaConnectorNativeInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" - | "TSS_ROLE" + | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" @@ -67,7 +67,10 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; - encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; encodeFunctionData(functionFragment: "gateway", values?: undefined): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -126,7 +129,10 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; decodeFunctionResult( functionFragment: "getRoleAdmin", @@ -341,7 +347,7 @@ export interface ZetaConnectorNative extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; - TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -432,7 +438,7 @@ export interface ZetaConnectorNative extends BaseContract { nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( - nameOrSignature: "TSS_ROLE" + nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "gateway" diff --git a/v2/typechain-types/ZetaConnectorNonNative.ts b/v2/typechain-types/ZetaConnectorNonNative.ts index ebfcbc30..e38595f5 100644 --- a/v2/typechain-types/ZetaConnectorNonNative.ts +++ b/v2/typechain-types/ZetaConnectorNonNative.ts @@ -28,7 +28,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" - | "TSS_ROLE" + | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" @@ -70,7 +70,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; - encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; encodeFunctionData(functionFragment: "gateway", values?: undefined): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -134,7 +137,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; decodeFunctionResult( functionFragment: "getRoleAdmin", @@ -366,7 +372,7 @@ export interface ZetaConnectorNonNative extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; - TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -465,7 +471,7 @@ export interface ZetaConnectorNonNative extends BaseContract { nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( - nameOrSignature: "TSS_ROLE" + nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "gateway" diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 853c87de..48bd1e82 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -48,7 +48,7 @@ const _abi = [ }, { type: "function", - name: "TSS_ROLE", + name: "WITHDRAWER_ROLE", inputs: [], outputs: [ { @@ -626,7 +626,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a783c78911610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a783c7891461032c578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806391d14854146102de578063a217fddf1461032457600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b6101846102ec3660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b61021c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea264697066735822122057430c05e808c93ad08f23c8558fedb52efa4d67cf0a57b2dd98e821ae51b67a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a217fddf1461034b578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806385f438c1146102de57806391d148541461030557600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b61021c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103133660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea2646970667358221220e3eceeff6045b5584ad5b26814ad7e9728c8428c7219e4a4930ed3899cab596964736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ERC20Custody__factory.ts b/v2/typechain-types/factories/ERC20Custody__factory.ts index 47e91da8..d2602a55 100644 --- a/v2/typechain-types/factories/ERC20Custody__factory.ts +++ b/v2/typechain-types/factories/ERC20Custody__factory.ts @@ -66,7 +66,7 @@ const _abi = [ }, { type: "function", - name: "TSS_ROLE", + name: "WITHDRAWER_ROLE", inputs: [], outputs: [ { @@ -595,7 +595,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a0033"; + "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index d6091635..8825fb05 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -1062,7 +1062,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220af2aee4bb8619080193c563076055a5fe28cf059e1b2e4432ec1ac64d5deb0a264736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a783c78911610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a783c78914610288578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806391d148541461023a578063a217fddf1461028057600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b610133610248366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220abf37a0d692af7273db39fd6d2d0d50fcc6de3ed0cbf1e3dedbaf0587a21db7664736f6c634300081a0033"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220e575ea5a18b9462f7a8e597ab970f6a09ecc09fd51c56fa3c6c1397f89f20af164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts index 184f6236..b6699ea5 100644 --- a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts @@ -1038,7 +1038,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220975ffeceb66195fca55e75e929fa8630b2095b6d3ae11711ecb5d1374d5f145464736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e0d221e2700a741409740f6a05e6ac8e799e50b3e2a6e75b5173b33a31fa502464736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index 6fcdb9ae..c47fde35 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -1010,7 +1010,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212209a50a0580be351f844bf8c2e4e16bea016eb437abddf87869636be59b9cefee264736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212201821442f44389baeb888640e13de33662eed4aff4f3c0ea195d55f55d8f2920864736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts index 302e6262..addcb7b2 100644 --- a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts @@ -37,7 +37,7 @@ const _abi = [ }, { type: "function", - name: "TSS_ROLE", + name: "WITHDRAWER_ROLE", inputs: [], outputs: [ { diff --git a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts index 120d15d9..ce7b5485 100644 --- a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts @@ -74,7 +74,7 @@ const _abi = [ }, { type: "function", - name: "TSS_ROLE", + name: "WITHDRAWER_ROLE", inputs: [], outputs: [ { @@ -611,7 +611,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806391d1485411610081578063a783c78911610066578063a783c7891461031f578063d547741f14610346578063e63ab1e91461035957600080fd5b806391d14854146102d1578063a217fddf1461031757600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b6101696102df366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122049fc4f7005945c94be87b64761390ef0a7a9420599ed8603d7ad523eef4e31d764736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts index 99a7e026..b37e3908 100644 --- a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts @@ -74,7 +74,7 @@ const _abi = [ }, { type: "function", - name: "TSS_ROLE", + name: "WITHDRAWER_ROLE", inputs: [], outputs: [ { @@ -617,7 +617,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806391d148541161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806391d148541461030a578063a217fddf14610350578063a783c7891461035857600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b61018f6103183660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220566ffa23d01291032be3e583f457a61f7e0646b54f3b63bedf0e0811738fc77864736f6c634300081a0033"; + "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer]