{ "_format": "hh-sol-artifact-1", "contractName": "VAnchorTree", "sourceName": "contracts/vanchors/instances/VAnchorTree.sol", "abi": [ { "inputs": [ { "internalType": "contract IAnchorVerifier", "name": "_verifier", "type": "address" }, { "internalType": "uint32", "name": "_merkleTreeLevels", "type": "uint32" }, { "internalType": "contract IHasher", "name": "_hasher", "type": "address" }, { "internalType": "address", "name": "_handler", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint8", "name": "_maxEdges", "type": "uint8" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "chainID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "latestLeafIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "merkleRoot", "type": "uint256" } ], "name": "EdgeAddition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "chainID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "latestLeafIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "merkleRoot", "type": "uint256" } ], "name": "EdgeUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "commitment", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "leafIndex", "type": "uint32" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newMerkleRoot", "type": "uint256" } ], "name": "Insertion", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maximumDepositAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "MaxDepositLimitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "minimalWithdrawalAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "MinWithdrawalLimitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "commitment", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "subTreeIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "leafIndex", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "encryptedOutput", "type": "bytes" } ], "name": "NewCommitment", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "nullifier", "type": "uint256" } ], "name": "NewNullifier", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "key", "type": "bytes" } ], "name": "PublicKey", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "handler", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "SetHandler", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "SetVerifier", "type": "event" }, { "inputs": [], "name": "EVM_CHAIN_ID_TYPE", "outputs": [ { "internalType": "bytes2", "name": "", "type": "bytes2" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FIELD_SIZE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_EXT_AMOUNT", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROOT_HISTORY_SIZE", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZERO_VALUE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_fromTokenAddress", "type": "address" }, { "internalType": "address", "name": "_toTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_extAmount", "type": "uint256" } ], "name": "_executeWrapping", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "", "type": "bytes" }, { "components": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "int256", "name": "extAmount", "type": "int256" }, { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "refund", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "internalType": "struct CommonExtData", "name": "_externalData", "type": "tuple" }, { "components": [ { "internalType": "bytes", "name": "encryptedOutput1", "type": "bytes" }, { "internalType": "bytes", "name": "encryptedOutput2", "type": "bytes" } ], "internalType": "struct Encryptions", "name": "_encryptions", "type": "tuple" } ], "name": "_genExtDataHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_fromTokenAddress", "type": "address" }, { "internalType": "address", "name": "_toTokenAddress", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_minusExtAmount", "type": "uint256" } ], "name": "_withdrawAndUnwrap", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "_extAmount", "type": "int256" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "calculatePublicAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "commitments", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maximumDepositAmount", "type": "uint256" }, { "internalType": "uint32", "name": "_nonce", "type": "uint32" } ], "name": "configureMaximumDepositLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minimalWithdrawalAmount", "type": "uint256" }, { "internalType": "uint32", "name": "_nonce", "type": "uint32" } ], "name": "configureMinimalWithdrawalLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "currentNeighborRootIndex", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRootIndex", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "edgeExistsForChain", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "edgeIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "edgeList", "outputs": [ { "internalType": "uint256", "name": "chainID", "type": "uint256" }, { "internalType": "uint256", "name": "root", "type": "uint256" }, { "internalType": "uint256", "name": "latestLeafIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "srcResourceID", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "filledSubtrees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getChainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getChainIdType", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getHasher", "outputs": [ { "internalType": "contract IHasher", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLastRoot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLatestNeighborEdges", "outputs": [ { "components": [ { "internalType": "uint256", "name": "chainID", "type": "uint256" }, { "internalType": "uint256", "name": "root", "type": "uint256" }, { "internalType": "uint256", "name": "latestLeafIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "srcResourceID", "type": "bytes32" } ], "internalType": "struct Edge[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLatestNeighborRoots", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLevels", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNextIndex", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getProposalNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "index", "type": "uint32" } ], "name": "getZeroHash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "handler", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_chainID", "type": "uint256" } ], "name": "hasEdge", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_left", "type": "uint256" }, { "internalType": "uint256", "name": "_right", "type": "uint256" } ], "name": "hashLeftRight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasher", "outputs": [ { "internalType": "contract IHasher", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minimalWithdrawalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_maximumDepositAmount", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "resourceID", "type": "bytes32" } ], "name": "isCorrectExecutionChain", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "resourceId", "type": "bytes32" } ], "name": "isCorrectExecutionContext", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_neighborChainID", "type": "uint256" }, { "internalType": "uint256", "name": "_root", "type": "uint256" } ], "name": "isKnownNeighborRoot", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_root", "type": "uint256" } ], "name": "isKnownRoot", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_nullifierHash", "type": "uint256" } ], "name": "isSpent", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_nullifierHashes", "type": "uint256[]" } ], "name": "isSpentArray", "outputs": [ { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_roots", "type": "uint256[]" } ], "name": "isValidRoots", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "levels", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxEdges", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maximumDepositAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minimalWithdrawalAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "neighborRoots", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextIndex", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nullifierHashes", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "outerLevels", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_resourceId", "type": "bytes32" } ], "name": "parseChainIdFromResourceId", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "proposalNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "bytes", "name": "keyData", "type": "bytes" } ], "internalType": "struct VAnchorBase.Account", "name": "_account", "type": "tuple" } ], "name": "register", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "bytes", "name": "keyData", "type": "bytes" } ], "internalType": "struct VAnchorBase.Account", "name": "_account", "type": "tuple" }, { "internalType": "bytes", "name": "_proof", "type": "bytes" }, { "internalType": "bytes", "name": "_auxPublicInputs", "type": "bytes" }, { "components": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "int256", "name": "extAmount", "type": "int256" }, { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "refund", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "internalType": "struct CommonExtData", "name": "_externalData", "type": "tuple" }, { "components": [ { "internalType": "bytes", "name": "roots", "type": "bytes" }, { "internalType": "bytes", "name": "extensionRoots", "type": "bytes" }, { "internalType": "uint256[]", "name": "inputNullifiers", "type": "uint256[]" }, { "internalType": "uint256[2]", "name": "outputCommitments", "type": "uint256[2]" }, { "internalType": "uint256", "name": "publicAmount", "type": "uint256" }, { "internalType": "uint256", "name": "extDataHash", "type": "uint256" } ], "internalType": "struct PublicInputs", "name": "_publicInputs", "type": "tuple" }, { "components": [ { "internalType": "bytes", "name": "encryptedOutput1", "type": "bytes" }, { "internalType": "bytes", "name": "encryptedOutput2", "type": "bytes" } ], "internalType": "struct Encryptions", "name": "_encryptions", "type": "tuple" } ], "name": "registerAndTransact", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "roots", "outputs": [ { "internalType": "uint256", "name": "root", "type": "uint256" }, { "internalType": "uint32", "name": "latestLeafindex", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_handler", "type": "address" }, { "internalType": "uint32", "name": "_nonce", "type": "uint32" } ], "name": "setHandler", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_verifier", "type": "address" }, { "internalType": "uint32", "name": "_nonce", "type": "uint32" } ], "name": "setVerifier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_proof", "type": "bytes" }, { "internalType": "bytes", "name": "_auxPublicInputs", "type": "bytes" }, { "components": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "int256", "name": "extAmount", "type": "int256" }, { "internalType": "address", "name": "relayer", "type": "address" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "refund", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "internalType": "struct CommonExtData", "name": "_externalData", "type": "tuple" }, { "components": [ { "internalType": "bytes", "name": "roots", "type": "bytes" }, { "internalType": "bytes", "name": "extensionRoots", "type": "bytes" }, { "internalType": "uint256[]", "name": "inputNullifiers", "type": "uint256[]" }, { "internalType": "uint256[2]", "name": "outputCommitments", "type": "uint256[2]" }, { "internalType": "uint256", "name": "publicAmount", "type": "uint256" }, { "internalType": "uint256", "name": "extDataHash", "type": "uint256" } ], "internalType": "struct PublicInputs", "name": "_publicInputs", "type": "tuple" }, { "components": [ { "internalType": "bytes", "name": "encryptedOutput1", "type": "bytes" }, { "internalType": "bytes", "name": "encryptedOutput2", "type": "bytes" } ], "internalType": "struct Encryptions", "name": "_encryptions", "type": "tuple" } ], "name": "transact", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[8]", "name": "_proof", "type": "uint256[8]" } ], "name": "unpackProof", "outputs": [ { "internalType": "uint256[2]", "name": "", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "", "type": "uint256[2]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_root", "type": "uint256" }, { "internalType": "uint32", "name": "_leafIndex", "type": "uint32" }, { "internalType": "bytes32", "name": "_srcResourceID", "type": "bytes32" } ], "name": "updateEdge", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "verifier", "outputs": [ { "internalType": "contract IAnchorVerifier", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60e060405260108054600160a01b600160e01b03191690553480156200002457600080fd5b50604051620056803803806200568083398101604081905262000047916200036a565b6001600555600780546001600160a01b038086166001600160a01b03199283161790925563ffffffff871660a081905260ff841660805260108054848b1693169290921790915590831660c05285908590620000f65760405162461bcd60e51b815260206004820152602360248201527f5f6c6576656c732073686f756c642062652067726561746572207468616e207a60448201526265726f60e81b60648201526084015b60405180910390fd5b60208263ffffffff16106200014e5760405162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e20333200006044820152606401620000ed565b601080546001600160e01b0316600160e01b63ffffffff851602179055601180546001600160a01b0319166001600160a01b03831617905560005b8263ffffffff168163ffffffff1610156200023e57601154604051631d052ab160e31b815263ffffffff831660048201526001600160a01b039091169063e829558890602401602060405180830381865afa158015620001ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021391906200040b565b63ffffffff82166000908152600260205260409020558062000235816200043b565b91505062000189565b506040805180820190915260115481906001600160a01b031663e82955886200026960018762000461565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d291906200040b565b81526000602091820181905280526001815281517fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495501517fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4a805463ffffffff191663ffffffff90921691909117905550620004889650505050505050565b6001600160a01b03811681146200036757600080fd5b50565b60008060008060008060c087890312156200038457600080fd5b8651620003918162000351565b602088015190965063ffffffff81168114620003ac57600080fd5b6040880151909550620003bf8162000351565b6060880151909450620003d28162000351565b6080880151909350620003e58162000351565b60a088015190925060ff81168114620003fd57600080fd5b809150509295509295509295565b6000602082840312156200041e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681810362000457576200045762000425565b6001019392505050565b63ffffffff82811682821603908082111562000481576200048162000425565b5092915050565b60805160a05160c0516151666200051a60003960008181610ccc0152611b700152600081816109a401528181610e130152818161188b0152611f2901526000818161073901528181610d1801528181610d8201528181611719015281816117b901528181611d6701528181611eed01528181612487015281816134e201528181613587015261364d01526151666000f3fe6080604052600436106103b85760003560e01c80638c832b13116101f2578063cc3c74a11161010d578063ec732959116100a0578063f5fc3d6b1161006f578063f5fc3d6b14610c5e578063fa73168714610c8a578063fc0c546a14610cba578063fc7e9c6f14610cee57600080fd5b8063ec73295914610bae578063ed33639f14610be2578063f178e47c14610c02578063f5ab0dd614610c2f57600080fd5b8063e4a30116116100dc578063e4a3011614610b16578063e70ea87c14610b36578063ea495db014610b63578063ea65ba4914610b8157600080fd5b8063cc3c74a114610a8b578063cd87a3b414610aa1578063d384534d14610ab6578063dbc916b814610ad657600080fd5b8063b75e679811610185578063c1922f9e11610154578063c1922f9e146109c6578063c2230d6e146109d9578063c2b40ae414610a17578063c80916d414610a6b57600080fd5b8063b75e679814610941578063ba70f75714610961578063bc063e1a146107a3578063bfbc0a391461099257600080fd5b8063a0d192f5116101c1578063a0d192f5146108ce578063a38f76e8146108ee578063a6232a9314610901578063b2bc6e0f1461092157600080fd5b80638c832b13146108445780638f1c56bd1461086457806390eeb02b1461087a578063921563111461089e57600080fd5b806349ce8997116102e257806371523c3211610275578063830b2f5711610244578063830b2f57146107bb578063840b2791146107db5780638b7e8782146107f15780638c0d34d81461082257600080fd5b806371523c321461072757806372c1ad031461076d57806378abb49b1461078d5780637fe24ffe146107a357600080fd5b80635a129efe116102b15780635a129efe146106915780635bb93995146106c15780635d2d766c146106e15780636338bcbc1461071457600080fd5b806349ce8997146105fe5780634c830cbd1461062e5780634ecf518b1461065a578063509cd41e1461067e57600080fd5b80632570b7b41161035a57806338a26a091161032957806338a26a091461055f5780633bfa8d7a14610572578063414a37ba1461059257806343e7119f146105c657600080fd5b80632570b7b4146104d45780632b7ac3f3146104f4578063305e9eac1461052c5780633408e4701461054c57600080fd5b8063158ef93e11610396578063158ef93e146104365780631e627617146104605780631f79a1e9146104825780631f7f99f7146104b257600080fd5b80630b27fb9a146103bd5780630c394a60146103e15780630eb7606f14610414575b600080fd5b3480156103c957600080fd5b506006545b6040519081526020015b60405180910390f35b3480156103ed57600080fd5b50601054600160e01b900463ffffffff165b60405163ffffffff90911681526020016103d8565b34801561042057600080fd5b50601054600160c01b900463ffffffff166103ff565b34801561044257600080fd5b506000546104509060ff1681565b60405190151581526020016103d8565b34801561046c57600080fd5b50610475610d12565b6040516103d89190613e49565b34801561048e57600080fd5b5061045061049d366004613e8d565b60036020526000908152604090205460ff1681565b3480156104be57600080fd5b506104d26104cd366004613eb8565b610ed4565b005b3480156104e057600080fd5b506103ce6104ef366004613ee8565b610fd0565b34801561050057600080fd5b50601054610514906001600160a01b031681565b6040516001600160a01b0390911681526020016103d8565b34801561053857600080fd5b506103ce610547366004613f0a565b6110cd565b34801561055857600080fd5b50466103ce565b6104d261056d36600461432f565b611140565b34801561057e57600080fd5b5061045061058d366004613ee8565b61115e565b34801561059e57600080fd5b506103ce7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b3480156105d257600080fd5b506103ce6105e1366004613eb8565b600b60209081526000928352604080842090915290825290205481565b34801561060a57600080fd5b50610450610619366004613e8d565b60046020526000908152604090205460ff1681565b34801561063a57600080fd5b506106436111f5565b60405165ffffffffffff90911681526020016103d8565b34801561066657600080fd5b506010546103ff90600160e01b900463ffffffff1681565b6104d261068c366004614413565b611243565b34801561069d57600080fd5b506104506106ac366004613e8d565b60009081526003602052604090205460ff1690565b3480156106cd57600080fd5b506103ce6106dc366004613ee8565b6112bf565b3480156106ed57600080fd5b506103ff6106fc366004613e8d565b600c6020526000908152604090205463ffffffff1681565b6103ce610722366004614464565b611397565b34801561073357600080fd5b5061075b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016103d8565b34801561077957600080fd5b506104d26107883660046144a5565b6115c6565b34801561079957600080fd5b506103ce600f5481565b3480156107af57600080fd5b506103ce600160f81b81565b3480156107c757600080fd5b506104506107d6366004613e8d565b6116ef565b3480156107e757600080fd5b506103ce600e5481565b3480156107fd57600080fd5b50610809600160f81b81565b6040516001600160f01b031990911681526020016103d8565b34801561082e57600080fd5b50610837611713565b6040516103d891906144d3565b34801561085057600080fd5b506104d261085f366004613eb8565b611958565b34801561087057600080fd5b506103ce600d5481565b34801561088657600080fd5b506010546103ff90600160a01b900463ffffffff1681565b3480156108aa57600080fd5b506104506108b9366004613e8d565b60009081526009602052604090205460ff1690565b3480156108da57600080fd5b506104d26108e93660046144a5565b611a42565b6104d26108fc366004614537565b611b6b565b34801561090d57600080fd5b5061045061091c366004613e8d565b611ba0565b34801561092d57600080fd5b506104d261093c3660046145f8565b611c26565b34801561094d57600080fd5b5061045061095c36600461462c565b611c8b565b34801561096d57600080fd5b50601054600160a01b900463ffffffff166000908152600160205260409020546103ce565b34801561099e57600080fd5b506103ff7f000000000000000000000000000000000000000000000000000000000000000081565b6104d26109d4366004614660565b61205d565b3480156109e557600080fd5b506109ff6109f4366004613e8d565b65ffffffffffff1690565b6040516001600160401b0390911681526020016103d8565b348015610a2357600080fd5b50610a51610a32366004613e8d565b6001602081905260009182526040909120805491015463ffffffff1682565b6040805192835263ffffffff9091166020830152016103d8565b348015610a7757600080fd5b50600754610514906001600160a01b031681565b348015610a9757600080fd5b506103ce60065481565b348015610aad57600080fd5b506103ff601e81565b348015610ac257600080fd5b506103ce610ad1366004614687565b612675565b348015610ae257600080fd5b50610af6610af1366004613e8d565b61271b565b6040805194855260208501939093529183015260608201526080016103d8565b348015610b2257600080fd5b506104d2610b31366004613ee8565b612755565b348015610b4257600080fd5b506103ce610b51366004613e8d565b60086020526000908152604090205481565b348015610b6f57600080fd5b506011546001600160a01b0316610514565b348015610b8d57600080fd5b50610ba1610b9c3660046146fc565b6127d0565b6040516103d89190614770565b348015610bba57600080fd5b506103ce7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b348015610bee57600080fd5b50601154610514906001600160a01b031681565b348015610c0e57600080fd5b506103ce610c1d366004613e8d565b60026020526000908152604090205481565b348015610c3b57600080fd5b50610c4f610c4a3660046147aa565b612898565b6040516103d89392919061485c565b348015610c6a57600080fd5b50610450610c79366004613e8d565b60301c6001600160a01b0316301490565b348015610c9657600080fd5b50610450610ca5366004613e8d565b60096020526000908152604090205460ff1681565b348015610cc657600080fd5b506105147f000000000000000000000000000000000000000000000000000000000000000081565b348015610cfa57600080fd5b506010546103ff90600160c01b900463ffffffff1681565b606060007f000000000000000000000000000000000000000000000000000000000000000060ff166001600160401b03811115610d5157610d51613f27565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b50905060005b7f000000000000000000000000000000000000000000000000000000000000000060ff16811015610ece57610db681600161489b565b600a5410610e0657600a8181548110610dd157610dd16148ae565b906000526020600020906004020160010154828281518110610df557610df56148ae565b602002602001018181525050610ebc565b3063305e9eac610e3760017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d91906148e8565b828281518110610eaf57610eaf6148ae565b6020026020010181815250505b80610ec681614901565b915050610d80565b50919050565b6007546001600160a01b03163314610f075760405162461bcd60e51b8152600401610efe9061491a565b60405180910390fd5b8063ffffffff168060065410610f2f5760405162461bcd60e51b8152600401610efe90614951565b600654610f3d90600161489b565b811115610f5c5760405162461bcd60e51b8152600401610efe90614994565b600681905560005460ff16610f835760405162461bcd60e51b8152600401610efe906149f1565b610f8c83600e55565b6040805184815263ffffffff841660208201527f7365fbc0361c0ff116a7632dca78f1f79cba64d281371ad578752ce44cb0f29b91015b60405180910390a1505050565b6000600160f81b82106110135760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b6044820152606401610efe565b611020600160f81b614a28565b831380156110315750600160f81b83125b6110725760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a5908195e1d08185b5bdd5b9d60721b6044820152606401610efe565b600061107e8385614a44565b905060008112156110c15761109281614a28565b6110bc907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001614a64565b6110c3565b805b9150505b92915050565b601154604051631d052ab160e31b815263ffffffff831660048201526000916001600160a01b03169063e829558890602401602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906148e8565b61114986611c26565b6111568585858585611b6b565b505050505050565b600081600003611170575060006110c7565b6000838152600c602052604090205463ffffffff16805b6000858152600b6020908152604080832063ffffffff8516845290915290205484036111b8576001925050506110c7565b8063ffffffff166000036111ca5750601e5b806111d481614a77565b9150508163ffffffff168163ffffffff160361118757506000949350505050565b60408051600160f81b602082018190524660e01b6001600160e01b0319811660228401528351808403600601815260269093019093526000929161123881614a97565b60d01c935050505090565b61124e843083612921565b604051632404142f60e11b81526001600160a01b038481166004830152602482018390528381166044830152851690634808285e906064015b600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b5050505050505050565b600080306001600160a01b031663ea495db06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190614ace565b604051635bb9399560e01b815260048101869052602481018590529091506001600160a01b03821690635bb9399590604401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c391906148e8565b604051634b66a6ff60e11b81526004810182905260009081906001600160a01b038516906396cd4dfe90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140591906148e8565b90506001600160a01b0385166114f6578034146114815760405162461bcd60e51b815260206004820152603460248201527f56416e63686f72426173653a206d73672e76616c75652073686f756c6420626560448201527308195c5d585b081d1bc81ddc985c105b5bdd5b9d60621b6064820152608401610efe565b604051633d97186b60e11b81523360048201526001600160a01b03868116602483015260006044830152306064830152851690637b2e30d69034906084016000604051808303818588803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b50505050506115be565b341561154f5760405162461bcd60e51b815260206004820152602260248201527f56416e63686f72426173653a206d73672e76616c75652073686f756c64206265604482015261020360f41b6064820152608401610efe565b604051633d97186b60e11b81523360048201526001600160a01b03868116602483015260448201839052306064830152851690637b2e30d690608401600060405180830381600087803b1580156115a557600080fd5b505af11580156115b9573d6000803e3d6000fd5b505050505b949350505050565b6007546001600160a01b031633146115f05760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff1680600654106116185760405162461bcd60e51b8152600401610efe90614951565b60065461162690600161489b565b8111156116455760405162461bcd60e51b8152600401610efe90614994565b60068190556001600160a01b0383166116965760405162461bcd60e51b8152602060048201526013602482015272048616e646c65722063616e6e6f74206265203606c1b6044820152606401610efe565b600780546001600160a01b0319166001600160a01b0385169081179091556040805191825263ffffffff841660208301527fd2e262b0385d9d9b956b22e37ce5d35b7120e1d369538757a6d7afd7bfe2d0269101610fc3565b600065ffffffffffff8216806117036111f5565b65ffffffffffff16149392505050565b606060007f000000000000000000000000000000000000000000000000000000000000000060ff166001600160401b0381111561175257611752613f27565b6040519080825280602002602001820160405280156117b157816020015b61179e6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b8152602001906001900390816117705790505b50905060005b7f000000000000000000000000000000000000000000000000000000000000000060ff16811015610ece576117ed81600161489b565b600a541061186b57600a8181548110611808576118086148ae565b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505082828151811061185b5761185b6148ae565b6020026020010181905250611946565b604080516080810190915260008152602081013063305e9eac6118af60017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156118f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191591906148e8565b8152602001600081526020016000801b81525082828151811061193a5761193a6148ae565b60200260200101819052505b8061195081614901565b9150506117b7565b6007546001600160a01b031633146119825760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff1680600654106119aa5760405162461bcd60e51b8152600401610efe90614951565b6006546119b890600161489b565b8111156119d75760405162461bcd60e51b8152600401610efe90614994565b600681905560005460ff166119fe5760405162461bcd60e51b8152600401610efe906149f1565b611a0783600f55565b6040805184815263ffffffff841660208201527f1aac2d1c43f1cd792e5494b49218701c2ca718a80d6d6b480b7903c049e6bb1d9101610fc3565b6007546001600160a01b03163314611a6c5760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff168060065410611a945760405162461bcd60e51b8152600401610efe90614951565b600654611aa290600161489b565b811115611ac15760405162461bcd60e51b8152600401610efe90614994565b60068190556001600160a01b038316611b125760405162461bcd60e51b8152602060048201526013602482015272048616e646c65722063616e6e6f74206265203606c1b6044820152606401610efe565b601080546001600160a01b0319166001600160a01b0385169081179091556040805191825263ffffffff841660208301527ffb66e9e8ae339b78aacff90234fbd7dd75bea9bcea581ea47833249a68f2bb8e9101610fc3565b611b997f000000000000000000000000000000000000000000000000000000000000000086868686866129e9565b5050505050565b600081600003611bb257506000919050565b601054600160a01b900463ffffffff16805b63ffffffff81166000908152600160205260409020548403611bea575060019392505050565b8063ffffffff16600003611bfc5750601e5b80611c0681614a77565b9150508163ffffffff168163ffffffff1603611bc4575060009392505050565b80516001600160a01b03163314611c7f5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2062652072656769737465726564000000006044820152606401610efe565b611c8881612c39565b50565b6000306001600160a01b031663a6232a9383600081518110611caf57611caf6148ae565b60200260200101516040518263ffffffff1660e01b8152600401611cd591815260200190565b602060405180830381865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190614aeb565b611d625760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610efe565b611d8d7f00000000000000000000000000000000000000000000000000000000000000006001614b0d565b60ff16825114611ddf5760405162461bcd60e51b815260206004820152601b60248201527f496e636f727265637420726f6f74206172726179206c656e67746800000000006044820152606401610efe565b600160005b600a54811015611ee6576000600a8281548110611e0357611e036148ae565b90600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050611e79816000015186846001611e5c919061489b565b81518110611e6c57611e6c6148ae565b602002602001015161115e565b611ec55760405162461bcd60e51b815260206004820152601760248201527f4e65696768626f7220726f6f74206e6f7420666f756e640000000000000000006044820152606401610efe565b82611ecf81614901565b935050508080611ede90614901565b915050611de4565b505b611f137f00000000000000000000000000000000000000000000000000000000000000006001614b0d565b60ff168114612054573063305e9eac611f4d60017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015611f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb391906148e8565b838281518110611fc557611fc56148ae565b602002602001015114612042576040805162461bcd60e51b81526020600482015260248101919091527f4c696e6b61626c65416e63686f723a206e6f6e2d6578697374656e742065646760448201527f65206973206e6f742073657420746f207468652064656661756c7420726f6f746064820152608401610efe565b8061204c81614901565b915050611ee8565b50600192915050565b6007546001600160a01b031633146120875760405162461bcd60e51b8152600401610efe9061491a565b60005460ff166120a95760405162461bcd60e51b8152600401610efe906149f1565b6120b1612c85565b600065ffffffffffff8216604051639215631160e01b81526001600160401b03821660048201529091503090639215631190602401602060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190614aeb565b15612480576001600160401b038116600090815260086020526040902054600a805463ffffffff861692908110612160576121606148ae565b906000526020600020906004020160020154106121d65760405162461bcd60e51b815260206004820152602e60248201527f4c696e6b61626c65416e63686f723a204e6577206c65616620696e646578206d60448201526d3ab9ba1031329033b932b0ba32b960911b6064820152608401610efe565b600a60086000836001600160401b031681526020019081526020016000205481548110612205576122056148ae565b90600052602060002090600402016002015462010000612225919061489b565b8363ffffffff161061229f5760405162461bcd60e51b815260206004820152603a60248201527f4c696e6b61626c65416e63686f723a204e6577206c65616620696e646578206d60448201527f7573742062652077697468696e20325e313620757064617465730000000000006064820152608401610efe565b600a60086000836001600160401b0316815260200190815260200160002054815481106122ce576122ce6148ae565b90600052602060002090600402016003015482146123455760405162461bcd60e51b815260206004820152602e60248201527f4c696e6b61626c65416e63686f723a207372635265736f757263654944206d7560448201526d7374206265207468652073616d6560901b6064820152608401610efe565b6001600160401b038116600090815260086020526040902054600a805463ffffffff861691908390811061237b5761237b6148ae565b90600052602060002090600402016002018190555084600a82815481106123a4576123a46148ae565b6000918252602080832060016004909302018201939093556001600160401b0385168252600c90925260408120549091601e916123e99163ffffffff90911690614b26565b6123f39190614b59565b6001600160401b0384166000818152600c60209081526040808320805463ffffffff191663ffffffff878116918217909255600b84528285209085528352928190208b905580519384529189169083015281018890529091507f918597b0fdca66b353a1b90d2287c2b06307c4d35c824dfcffeb4b675c961ce49060600160405180910390a15050612665565b600a5460ff7f000000000000000000000000000000000000000000000000000000000000000016116125075760405162461bcd60e51b815260206004820152602a60248201527f4c696e6b61626c65416e63686f723a205468697320416e63686f7220697320616044820152697420636170616369747960b01b6064820152608401610efe565b6001600160401b0381166000818152600960209081526040808320805460ff19166001908117909155600a805483516080810185528781528086018c815263ffffffff8c1682870181815260608085018e81529786018755958a528351600486027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a881019190915592517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9840155517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2aa83015594517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2ab9091015587875260088652848720829055600b865284872087805286528487208c9055845197885294870192909252918501899052939192917f5fe2c40955fb42111954fb4f898e4db4998d64ebaae1c872141ff1943990418a910160405180910390a15050505b506126706001600555565b505050565b600060405180610100016040528084600001516001600160a01b031681526020018460200151815260200184604001516001600160a01b0316815260200184606001518152602001846080015181526020018460a001516001600160a01b031681526020018360000151815260200183602001518152506040516020016126fc9190614bcc565b6040516020818303038152906040528051906020012090509392505050565b600a818154811061272b57600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b60005460ff16156127a85760405162461bcd60e51b815260206004820181905260248201527f496e697469616c697a65643a20416c726561647920696e697469616c697a65646044820152606401610efe565b6127ba6000805460ff19166001179055565b6127c382600e55565b6127cc81600f55565b5050565b60606000826001600160401b038111156127ec576127ec613f27565b604051908082528060200260200182016040528015612815578160200160208202803683370190505b50905060005b8381101561289057612854858583818110612838576128386148ae565b9050602002013560009081526003602052604090205460ff1690565b1561287e57600182828151811061286d5761286d6148ae565b911515602092830291909101909101525b8061288881614901565b91505061281b565b509392505050565b6128a0613dfe565b6128a8613e1c565b6128b0613dfe565b50506040805180820182528351815260208085015181830152825160808082018552868501518286019081526060808901519084015282528451808601865290870151815260a08701518184015281830152835180850190945260c0860151845260e0909501519083015293909150565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c91906148e8565b90508181106129ae576129a96001600160a01b0385168484612cde565b6129e3565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528516906340c10f1990604401611287565b50505050565b6129f68585858585612d41565b600083602001511315612ac057600f5483602001511115612a6c5760405162461bcd60e51b815260206004820152602a60248201527f616d6f756e74206973206c6172676572207468616e206d6178696d756d4465706044820152691bdcda5d105b5bdd5b9d60b21b6064820152608401610efe565b856001600160a01b03168360a001516001600160a01b031603612aab576020830151612aa6906001600160a01b0388169033903090612f48565b612ac0565b612abe8360a00151878560200151611397565b505b600083602001511215612c125782516001600160a01b0316612b245760405162461bcd60e51b815260206004820152601e60248201527f43616e277420776974686472617720746f207a65726f206164647265737300006044820152606401610efe565b600e548360200151612b3590614a28565b1015612b975760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206973206c657373207468616e206d696e696d616c576974686460448201526a1c985dd85b105b5bdd5b9d60aa1b6064820152608401610efe565b856001600160a01b03168360a001516001600160a01b031603612bd557612bd08684600001518560200151612bcb90614a28565b612921565b612bf1565b612bf1868460a001518560000151866020015161068c90614a28565b608083015115612c1257612c12836080015184600001518560400151612f80565b606083015115612c2f57612c2f86846040015185606001516130d6565b6111568282613164565b80600001516001600160a01b03167f2c1ca5c14df2aba59d26842c5ff53f6817052ef34f6f7537f8b4c9e3805a5e508260200151604051612c7a9190614c77565b60405180910390a250565b600260055403612cd75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610efe565b6002600555565b6040516001600160a01b03831660248201526044810182905261267090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613367565b6000612d4e858584612675565b905060005b836040015151811015612dee57612d9684604001518281518110612d7957612d796148ae565b602002602001015160009081526003602052604090205460ff1690565b15612ddc5760405162461bcd60e51b8152602060048201526016602482015275125b9c1d5d081a5cc8185b1c9958591e481cdc195b9d60521b6044820152606401610efe565b80612de681614901565b915050612d53565b50612e197f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182614c91565b8360a0015114612e6b5760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c20646174612068617368000000006044820152606401610efe565b612e7d84602001518560600151610fd0565b836080015114612ec75760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081c1d589b1a58c8185b5bdd5b9d605a1b6044820152606401610efe565b612ed386868585613439565b60005b836040015151811015612f3f5760016003600086604001518481518110612eff57612eff6148ae565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612f3790614901565b915050612ed6565b50505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526129e39085906323b872dd60e01b90608401612d0a565b823414612fe85760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b6064820152608401610efe565b6000826001600160a01b03168460405160006040518083038185875af1925050503d8060008114613035576040519150601f19603f3d011682016040523d82523d6000602084013e61303a565b606091505b50509050806129e3576000826001600160a01b03168560405160006040518083038185875af1925050503d8060008114613090576040519150601f19603f3d011682016040523d82523d6000602084013e613095565b606091505b5050905080611b995760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606401610efe565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314191906148e8565b905081156129e3578181106129ae576129a96001600160a01b0385168484612cde565b6060820151805160209091015161317b91906136bd565b5060608201517f8646243b1f3099f7f0c30af0d00cb712e1cc160b88e861c647f19d2f38eef573906000602002015160006002306001600160a01b0316630eb7606f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132109190614ca5565b61321a91906148c4565b845160405161322c9493929190614cc2565b60405180910390a160608201517f8646243b1f3099f7f0c30af0d00cb712e1cc160b88e861c647f19d2f38eef573906001602002015160006001306001600160a01b0316630eb7606f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c89190614ca5565b6132d291906148c4565b84602001516040516132e79493929190614cc2565b60405180910390a160005b826040015151811015612670577f9218fa47e982bf1ded9b6823b77dbac4a5db62fc73f8efc325c7de424a41180283604001518281518110613336576133366148ae565b602002602001015160405161334d91815260200190565b60405180910390a18061335f81614901565b9150506132f2565b60006133bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138b89092919063ffffffff16565b80519091501561267057808060200190518101906133da9190614aeb565b6126705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610efe565b8160400151516002148061345257508160400151516010145b61349e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f6620696e7075747300000000000000006044820152606401610efe565b6040820151516002146000808261355457604051637d6c5ceb60e01b815273__$c855d983235a063579a323068f4c8734f9$__90637d6c5ceb9061350a9088908a907f000000000000000000000000000000000000000000000000000000000000000090600401614ced565b600060405180830381865af4158015613527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261354f9190810190614dbc565b6135f4565b60405163156293fb60e31b815273__$c855d983235a063579a323068f4c8734f9$__9063ab149fd8906135af9088908a907f000000000000000000000000000000000000000000000000000000000000000090600401614ced565b600060405180830381865af41580156135cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135f49190810190614dbc565b9150915061360181611c8b565b6136455760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642076616e63686f7220726f6f747360581b6044820152606401610efe565b6136718783857f00000000000000000000000000000000000000000000000000000000000000006138c7565b612f3f5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e2070726f6f66000000000000006044820152606401610efe565b60008281526004602052604081205460ff16156136ec5760405162461bcd60e51b8152600401610efe90614eb4565b60008281526004602052604090205460ff161561371b5760405162461bcd60e51b8152600401610efe90614eb4565b600061373a6040518060400160405280868152602001858152506139d7565b60008581526004602081815260408084208054600160ff19918216811790925589865294829020805490951617909355825163ba70f75760e01b81529251939450309363ba70f7579380840193908290030181865afa1580156137a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c591906148e8565b6040805163ffffffff8416815242602082015286917f0eb4c02013d417d0ed2dbca4ad4c749718452bf34902768ad51eb049799a217f910160405180910390a3306001600160a01b031663ba70f7576040518163ffffffff1660e01b8152600401602060405180830381865afa158015613843573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386791906148e8565b837f0eb4c02013d417d0ed2dbca4ad4c749718452bf34902768ad51eb049799a217f613894846001614b26565b6040805163ffffffff90921682524260208301520160405180910390a39392505050565b60606115be84846000856139ea565b600080858060200190518101906138de9190614ef5565b905060008060006138ee84612898565b9250925092506000601060009054906101000a90046001600160a01b03166001600160a01b0316638041ca538585858d8c8e6040518763ffffffff1660e01b815260040161394196959493929190614f4c565b602060405180830381865afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190614aeb565b9050806139ca5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610efe565b9998505050505050505050565b805160208201516000916110c791613ac5565b606082471015613a4b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610efe565b600080866001600160a01b03168587604051613a679190614fa8565b60006040518083038185875af1925050503d8060008114613aa4576040519150601f19603f3d011682016040523d82523d6000602084013e613aa9565b606091505b5091509150613aba87838387613d60565b979650505050505050565b60105460009063ffffffff600160c01b8204811691613aee91600160e01b9091041660026150d5565b63ffffffff168163ffffffff1603613b615760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610efe565b6000613b6e6002836150ea565b90506000613b7c86866112bf565b905060008060015b60105463ffffffff600160e01b90910481169082161015613c9257613baa600286614b59565b63ffffffff16600003613c4b57601154604051631d052ab160e31b815263ffffffff831660048201528594506001600160a01b039091169063e829558890602401602060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c91906148e8565b63ffffffff821660009081526002602052604090208590559150613c67565b63ffffffff811660009081526002602052604090205492508391505b613c7183836112bf565b9350613c7e6002866150ea565b945080613c8a8161510d565b915050613b84565b50601054600090601e90613cb490600160a01b900463ffffffff166001614b26565b613cbe9190614b59565b6010805463ffffffff60a01b1916600160a01b63ffffffff8416021790559050613ce9866002614b26565b6010805463ffffffff60c01b1916600160c01b63ffffffff93841681029190911791829055604080518082018252978852910482166020808801918252938316600090815260019485905291909120955186555194909101805463ffffffff19169490911693909317909255509195945050505050565b60608315613dcf578251600003613dc8576001600160a01b0385163b613dc85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610efe565b50816115be565b6115be8383815115613de45781518083602001fd5b8060405162461bcd60e51b8152600401610efe9190614c77565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b613e33613dfe565b815260200190600190039081613e2b5790505090565b6020808252825182820181905260009190848201906040850190845b81811015613e8157835183529284019291840191600101613e65565b50909695505050505050565b600060208284031215613e9f57600080fd5b5035919050565b63ffffffff81168114611c8857600080fd5b60008060408385031215613ecb57600080fd5b823591506020830135613edd81613ea6565b809150509250929050565b60008060408385031215613efb57600080fd5b50508035926020909101359150565b600060208284031215613f1c57600080fd5b81356110c181613ea6565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613f5f57613f5f613f27565b60405290565b60405160c081016001600160401b0381118282101715613f5f57613f5f613f27565b60405161010081016001600160401b0381118282101715613f5f57613f5f613f27565b604051601f8201601f191681016001600160401b0381118282101715613fd257613fd2613f27565b604052919050565b6001600160a01b0381168114611c8857600080fd5b60006001600160401b0382111561400857614008613f27565b50601f01601f191660200190565b600082601f83011261402757600080fd5b813561403a61403582613fef565b613faa565b81815284602083860101111561404f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006040828403121561407e57600080fd5b614086613f3d565b9050813561409381613fda565b815260208201356001600160401b038111156140ae57600080fd5b6140ba84828501614016565b60208301525092915050565b600060c082840312156140d857600080fd5b6140e0613f65565b905081356140ed81613fda565b815260208281013590820152604082013561410781613fda565b80604083015250606082013560608201526080820135608082015260a082013561413081613fda565b60a082015292915050565b60006001600160401b0382111561415457614154613f27565b5060051b60200190565b600082601f83011261416f57600080fd5b8135602061417f6140358361413b565b82815260059290921b8401810191818101908684111561419e57600080fd5b8286015b848110156141b957803583529183019183016141a2565b509695505050505050565b600082601f8301126141d557600080fd5b6141dd613f3d565b8060408401858111156141ef57600080fd5b845b818110156142095780358452602093840193016141f1565b509095945050505050565b600060e0828403121561422657600080fd5b61422e613f65565b905081356001600160401b038082111561424757600080fd5b61425385838601614016565b8352602084013591508082111561426957600080fd5b61427585838601614016565b6020840152604084013591508082111561428e57600080fd5b5061429b8482850161415e565b6040830152506142ae83606084016141c4565b606082015260a0820135608082015260c082013560a082015292915050565b6000604082840312156142df57600080fd5b6142e7613f3d565b905081356001600160401b038082111561430057600080fd5b61430c85838601614016565b8352602084013591508082111561432257600080fd5b506140ba84828501614016565b600080600080600080610160878903121561434957600080fd5b86356001600160401b038082111561436057600080fd5b61436c8a838b0161406c565b9750602089013591508082111561438257600080fd5b61438e8a838b01614016565b965060408901359150808211156143a457600080fd5b6143b08a838b01614016565b95506143bf8a60608b016140c6565b94506101208901359150808211156143d657600080fd5b6143e28a838b01614214565b93506101408901359150808211156143f957600080fd5b5061440689828a016142cd565b9150509295509295509295565b6000806000806080858703121561442957600080fd5b843561443481613fda565b9350602085013561444481613fda565b9250604085013561445481613fda565b9396929550929360600135925050565b60008060006060848603121561447957600080fd5b833561448481613fda565b9250602084013561449481613fda565b929592945050506040919091013590565b600080604083850312156144b857600080fd5b82356144c381613fda565b91506020830135613edd81613ea6565b602080825282518282018190526000919060409081850190868401855b8281101561452a578151805185528681015187860152858101518686015260609081015190850152608090930192908501906001016144f0565b5091979650505050505050565b6000806000806000610140868803121561455057600080fd5b85356001600160401b038082111561456757600080fd5b61457389838a01614016565b9650602088013591508082111561458957600080fd5b61459589838a01614016565b95506145a48960408a016140c6565b94506101008801359150808211156145bb57600080fd5b6145c789838a01614214565b93506101208801359150808211156145de57600080fd5b506145eb888289016142cd565b9150509295509295909350565b60006020828403121561460a57600080fd5b81356001600160401b0381111561462057600080fd5b6110c38482850161406c565b60006020828403121561463e57600080fd5b81356001600160401b0381111561465457600080fd5b6110c38482850161415e565b60008060006060848603121561467557600080fd5b83359250602084013561449481613ea6565b6000806000610100848603121561469d57600080fd5b83356001600160401b03808211156146b457600080fd5b6146c087838801614016565b94506146cf87602088016140c6565b935060e08601359150808211156146e557600080fd5b506146f2868287016142cd565b9150509250925092565b6000806020838503121561470f57600080fd5b82356001600160401b038082111561472657600080fd5b818501915085601f83011261473a57600080fd5b81358181111561474957600080fd5b8660208260051b850101111561475e57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015613e8157835115158352928401929184019160010161478c565b60006101008083850312156147be57600080fd5b83601f8401126147cd57600080fd5b6147d5613f87565b9083019080858311156147e757600080fd5b845b838110156148015780358352602092830192016147e9565b5095945050505050565b8060005b60028110156129e357815184526020938401939091019060010161480f565b8060005b60028110156129e35761484684835161480b565b6040939093019260209190910190600101614832565b610100810161486b828661480b565b614878604083018561482e565b6115be60c083018461480b565b634e487b7160e01b600052601160045260246000fd5b808201808211156110c7576110c7614885565b634e487b7160e01b600052603260045260246000fd5b63ffffffff8281168282160390808211156148e1576148e1614885565b5092915050565b6000602082840312156148fa57600080fd5b5051919050565b60006001820161491357614913614885565b5060010190565b60208082526019908201527f73656e646572206973206e6f74207468652068616e646c657200000000000000604082015260600190565b60208082526023908201527f50726f706f73616c4e6f6e6365547261636b65723a20496e76616c6964206e6f6040820152626e636560e81b606082015260800190565b6020808252603a908201527f50726f706f73616c4e6f6e6365547261636b65723a204e6f6e6365206d75737460408201527f206e6f7420696e6372656d656e74206d6f7265207468616e2031000000000000606082015260800190565b6020808252601c908201527f496e697469616c697a65643a204e6f7420696e697469616c697a656400000000604082015260600190565b6000600160ff1b8201614a3d57614a3d614885565b5060000390565b81810360008312801583831316838312821617156148e1576148e1614885565b818103818111156110c7576110c7614885565b600063ffffffff821680614a8d57614a8d614885565b6000190192915050565b805160208201516001600160d01b03198082169291906006831015614ac65780818460060360031b1b83161693505b505050919050565b600060208284031215614ae057600080fd5b81516110c181613fda565b600060208284031215614afd57600080fd5b815180151581146110c157600080fd5b60ff81811683821601908111156110c7576110c7614885565b63ffffffff8181168382160190808211156148e1576148e1614885565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614b7057614b70614b43565b92169190910692915050565b60005b83811015614b97578181015183820152602001614b7f565b50506000910152565b60008151808452614bb8816020860160208601614b7c565b601f01601f19169290920160200192915050565b6020815260018060a01b0382511660208201526020820151604082015260006040830151614c0560608401826001600160a01b03169052565b5060608301516080830152608083015160a083015260a0830151614c3460c08401826001600160a01b03169052565b5060c08301516101008060e0850152614c51610120850183614ba0565b915060e0850151601f198584030182860152614c6d8382614ba0565b9695505050505050565b602081526000614c8a6020830184614ba0565b9392505050565b600082614ca057614ca0614b43565b500690565b600060208284031215614cb757600080fd5b81516110c181613ea6565b84815283602082015263ffffffff83166040820152608060608201526000614c6d6080830184614ba0565b606081526000845160e06060840152614d0a610140840182614ba0565b9050602080870151605f1980868503016080870152614d298483614ba0565b60408a015187820390920160a088015281518082529184019450600092508301905b80831015614d6b5784518252938301936001929092019190830190614d4b565b5060608901519350614d8060c087018561480b565b608089015161010087015260a089015161012087015285810383870152614da78189614ba0565b9450505050506115be604083018460ff169052565b60008060408385031215614dcf57600080fd5b82516001600160401b0380821115614de657600080fd5b818501915085601f830112614dfa57600080fd5b81516020614e0a61403583613fef565b8281528882848701011115614e1e57600080fd5b614e2d83838301848801614b7c565b87820151909650935082841115614e4357600080fd5b838701935087601f850112614e5757600080fd5b83519250614e676140358461413b565b83815260059390931b8401810192818101925088841115614e8757600080fd5b938101935b83851015614ea557845183529381019391810191614e8c565b80955050505050509250929050565b60208082526021908201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656040820152601960fa1b606082015260800190565b6000610100808385031215614f0957600080fd5b83601f840112614f1857600080fd5b614f20613f87565b908301908085831115614f3257600080fd5b845b83811015614801578051835260209283019201614f34565b6000610160614f5b838a61480b565b614f68604084018961482e565b614f7560c084018861480b565b80610100840152614f8881840187614ba0565b60ff95909516610120840152505090151561014090910152949350505050565b60008251614fba818460208701614b7c565b9190910192915050565b600181815b80851115615001578163ffffffff04821115614fe757614fe7614885565b80851615614ff457918102915b93841c9390800290614fc9565b509250929050565b600082615018575060016110c7565b81615025575060006110c7565b816001811461503b576002811461504557615076565b60019150506110c7565b60ff84111561505657615056614885565b6001841b915063ffffffff82111561507057615070614885565b506110c7565b5060208310610133831016604e8410600b84101617156150ad575081810a63ffffffff8111156150a8576150a8614885565b6110c7565b6150b78383614fc4565b8063ffffffff048211156150cd576150cd614885565b029392505050565b600063ffffffff6110c3818516828516615009565b600063ffffffff8084168061510157615101614b43565b92169190910492915050565b600063ffffffff80831681810361512657615126614885565b600101939250505056fea264697066735822122084213f9a103f30b6bd1a15d636cac2dec283c138385757b885a30156ad002e1564736f6c63430008120033", "deployedBytecode": "0x6080604052600436106103b85760003560e01c80638c832b13116101f2578063cc3c74a11161010d578063ec732959116100a0578063f5fc3d6b1161006f578063f5fc3d6b14610c5e578063fa73168714610c8a578063fc0c546a14610cba578063fc7e9c6f14610cee57600080fd5b8063ec73295914610bae578063ed33639f14610be2578063f178e47c14610c02578063f5ab0dd614610c2f57600080fd5b8063e4a30116116100dc578063e4a3011614610b16578063e70ea87c14610b36578063ea495db014610b63578063ea65ba4914610b8157600080fd5b8063cc3c74a114610a8b578063cd87a3b414610aa1578063d384534d14610ab6578063dbc916b814610ad657600080fd5b8063b75e679811610185578063c1922f9e11610154578063c1922f9e146109c6578063c2230d6e146109d9578063c2b40ae414610a17578063c80916d414610a6b57600080fd5b8063b75e679814610941578063ba70f75714610961578063bc063e1a146107a3578063bfbc0a391461099257600080fd5b8063a0d192f5116101c1578063a0d192f5146108ce578063a38f76e8146108ee578063a6232a9314610901578063b2bc6e0f1461092157600080fd5b80638c832b13146108445780638f1c56bd1461086457806390eeb02b1461087a578063921563111461089e57600080fd5b806349ce8997116102e257806371523c3211610275578063830b2f5711610244578063830b2f57146107bb578063840b2791146107db5780638b7e8782146107f15780638c0d34d81461082257600080fd5b806371523c321461072757806372c1ad031461076d57806378abb49b1461078d5780637fe24ffe146107a357600080fd5b80635a129efe116102b15780635a129efe146106915780635bb93995146106c15780635d2d766c146106e15780636338bcbc1461071457600080fd5b806349ce8997146105fe5780634c830cbd1461062e5780634ecf518b1461065a578063509cd41e1461067e57600080fd5b80632570b7b41161035a57806338a26a091161032957806338a26a091461055f5780633bfa8d7a14610572578063414a37ba1461059257806343e7119f146105c657600080fd5b80632570b7b4146104d45780632b7ac3f3146104f4578063305e9eac1461052c5780633408e4701461054c57600080fd5b8063158ef93e11610396578063158ef93e146104365780631e627617146104605780631f79a1e9146104825780631f7f99f7146104b257600080fd5b80630b27fb9a146103bd5780630c394a60146103e15780630eb7606f14610414575b600080fd5b3480156103c957600080fd5b506006545b6040519081526020015b60405180910390f35b3480156103ed57600080fd5b50601054600160e01b900463ffffffff165b60405163ffffffff90911681526020016103d8565b34801561042057600080fd5b50601054600160c01b900463ffffffff166103ff565b34801561044257600080fd5b506000546104509060ff1681565b60405190151581526020016103d8565b34801561046c57600080fd5b50610475610d12565b6040516103d89190613e49565b34801561048e57600080fd5b5061045061049d366004613e8d565b60036020526000908152604090205460ff1681565b3480156104be57600080fd5b506104d26104cd366004613eb8565b610ed4565b005b3480156104e057600080fd5b506103ce6104ef366004613ee8565b610fd0565b34801561050057600080fd5b50601054610514906001600160a01b031681565b6040516001600160a01b0390911681526020016103d8565b34801561053857600080fd5b506103ce610547366004613f0a565b6110cd565b34801561055857600080fd5b50466103ce565b6104d261056d36600461432f565b611140565b34801561057e57600080fd5b5061045061058d366004613ee8565b61115e565b34801561059e57600080fd5b506103ce7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b3480156105d257600080fd5b506103ce6105e1366004613eb8565b600b60209081526000928352604080842090915290825290205481565b34801561060a57600080fd5b50610450610619366004613e8d565b60046020526000908152604090205460ff1681565b34801561063a57600080fd5b506106436111f5565b60405165ffffffffffff90911681526020016103d8565b34801561066657600080fd5b506010546103ff90600160e01b900463ffffffff1681565b6104d261068c366004614413565b611243565b34801561069d57600080fd5b506104506106ac366004613e8d565b60009081526003602052604090205460ff1690565b3480156106cd57600080fd5b506103ce6106dc366004613ee8565b6112bf565b3480156106ed57600080fd5b506103ff6106fc366004613e8d565b600c6020526000908152604090205463ffffffff1681565b6103ce610722366004614464565b611397565b34801561073357600080fd5b5061075b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016103d8565b34801561077957600080fd5b506104d26107883660046144a5565b6115c6565b34801561079957600080fd5b506103ce600f5481565b3480156107af57600080fd5b506103ce600160f81b81565b3480156107c757600080fd5b506104506107d6366004613e8d565b6116ef565b3480156107e757600080fd5b506103ce600e5481565b3480156107fd57600080fd5b50610809600160f81b81565b6040516001600160f01b031990911681526020016103d8565b34801561082e57600080fd5b50610837611713565b6040516103d891906144d3565b34801561085057600080fd5b506104d261085f366004613eb8565b611958565b34801561087057600080fd5b506103ce600d5481565b34801561088657600080fd5b506010546103ff90600160a01b900463ffffffff1681565b3480156108aa57600080fd5b506104506108b9366004613e8d565b60009081526009602052604090205460ff1690565b3480156108da57600080fd5b506104d26108e93660046144a5565b611a42565b6104d26108fc366004614537565b611b6b565b34801561090d57600080fd5b5061045061091c366004613e8d565b611ba0565b34801561092d57600080fd5b506104d261093c3660046145f8565b611c26565b34801561094d57600080fd5b5061045061095c36600461462c565b611c8b565b34801561096d57600080fd5b50601054600160a01b900463ffffffff166000908152600160205260409020546103ce565b34801561099e57600080fd5b506103ff7f000000000000000000000000000000000000000000000000000000000000000081565b6104d26109d4366004614660565b61205d565b3480156109e557600080fd5b506109ff6109f4366004613e8d565b65ffffffffffff1690565b6040516001600160401b0390911681526020016103d8565b348015610a2357600080fd5b50610a51610a32366004613e8d565b6001602081905260009182526040909120805491015463ffffffff1682565b6040805192835263ffffffff9091166020830152016103d8565b348015610a7757600080fd5b50600754610514906001600160a01b031681565b348015610a9757600080fd5b506103ce60065481565b348015610aad57600080fd5b506103ff601e81565b348015610ac257600080fd5b506103ce610ad1366004614687565b612675565b348015610ae257600080fd5b50610af6610af1366004613e8d565b61271b565b6040805194855260208501939093529183015260608201526080016103d8565b348015610b2257600080fd5b506104d2610b31366004613ee8565b612755565b348015610b4257600080fd5b506103ce610b51366004613e8d565b60086020526000908152604090205481565b348015610b6f57600080fd5b506011546001600160a01b0316610514565b348015610b8d57600080fd5b50610ba1610b9c3660046146fc565b6127d0565b6040516103d89190614770565b348015610bba57600080fd5b506103ce7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b348015610bee57600080fd5b50601154610514906001600160a01b031681565b348015610c0e57600080fd5b506103ce610c1d366004613e8d565b60026020526000908152604090205481565b348015610c3b57600080fd5b50610c4f610c4a3660046147aa565b612898565b6040516103d89392919061485c565b348015610c6a57600080fd5b50610450610c79366004613e8d565b60301c6001600160a01b0316301490565b348015610c9657600080fd5b50610450610ca5366004613e8d565b60096020526000908152604090205460ff1681565b348015610cc657600080fd5b506105147f000000000000000000000000000000000000000000000000000000000000000081565b348015610cfa57600080fd5b506010546103ff90600160c01b900463ffffffff1681565b606060007f000000000000000000000000000000000000000000000000000000000000000060ff166001600160401b03811115610d5157610d51613f27565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b50905060005b7f000000000000000000000000000000000000000000000000000000000000000060ff16811015610ece57610db681600161489b565b600a5410610e0657600a8181548110610dd157610dd16148ae565b906000526020600020906004020160010154828281518110610df557610df56148ae565b602002602001018181525050610ebc565b3063305e9eac610e3760017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d91906148e8565b828281518110610eaf57610eaf6148ae565b6020026020010181815250505b80610ec681614901565b915050610d80565b50919050565b6007546001600160a01b03163314610f075760405162461bcd60e51b8152600401610efe9061491a565b60405180910390fd5b8063ffffffff168060065410610f2f5760405162461bcd60e51b8152600401610efe90614951565b600654610f3d90600161489b565b811115610f5c5760405162461bcd60e51b8152600401610efe90614994565b600681905560005460ff16610f835760405162461bcd60e51b8152600401610efe906149f1565b610f8c83600e55565b6040805184815263ffffffff841660208201527f7365fbc0361c0ff116a7632dca78f1f79cba64d281371ad578752ce44cb0f29b91015b60405180910390a1505050565b6000600160f81b82106110135760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b6044820152606401610efe565b611020600160f81b614a28565b831380156110315750600160f81b83125b6110725760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a5908195e1d08185b5bdd5b9d60721b6044820152606401610efe565b600061107e8385614a44565b905060008112156110c15761109281614a28565b6110bc907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001614a64565b6110c3565b805b9150505b92915050565b601154604051631d052ab160e31b815263ffffffff831660048201526000916001600160a01b03169063e829558890602401602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906148e8565b61114986611c26565b6111568585858585611b6b565b505050505050565b600081600003611170575060006110c7565b6000838152600c602052604090205463ffffffff16805b6000858152600b6020908152604080832063ffffffff8516845290915290205484036111b8576001925050506110c7565b8063ffffffff166000036111ca5750601e5b806111d481614a77565b9150508163ffffffff168163ffffffff160361118757506000949350505050565b60408051600160f81b602082018190524660e01b6001600160e01b0319811660228401528351808403600601815260269093019093526000929161123881614a97565b60d01c935050505090565b61124e843083612921565b604051632404142f60e11b81526001600160a01b038481166004830152602482018390528381166044830152851690634808285e906064015b600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b5050505050505050565b600080306001600160a01b031663ea495db06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190614ace565b604051635bb9399560e01b815260048101869052602481018590529091506001600160a01b03821690635bb9399590604401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c391906148e8565b604051634b66a6ff60e11b81526004810182905260009081906001600160a01b038516906396cd4dfe90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140591906148e8565b90506001600160a01b0385166114f6578034146114815760405162461bcd60e51b815260206004820152603460248201527f56416e63686f72426173653a206d73672e76616c75652073686f756c6420626560448201527308195c5d585b081d1bc81ddc985c105b5bdd5b9d60621b6064820152608401610efe565b604051633d97186b60e11b81523360048201526001600160a01b03868116602483015260006044830152306064830152851690637b2e30d69034906084016000604051808303818588803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b50505050506115be565b341561154f5760405162461bcd60e51b815260206004820152602260248201527f56416e63686f72426173653a206d73672e76616c75652073686f756c64206265604482015261020360f41b6064820152608401610efe565b604051633d97186b60e11b81523360048201526001600160a01b03868116602483015260448201839052306064830152851690637b2e30d690608401600060405180830381600087803b1580156115a557600080fd5b505af11580156115b9573d6000803e3d6000fd5b505050505b949350505050565b6007546001600160a01b031633146115f05760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff1680600654106116185760405162461bcd60e51b8152600401610efe90614951565b60065461162690600161489b565b8111156116455760405162461bcd60e51b8152600401610efe90614994565b60068190556001600160a01b0383166116965760405162461bcd60e51b8152602060048201526013602482015272048616e646c65722063616e6e6f74206265203606c1b6044820152606401610efe565b600780546001600160a01b0319166001600160a01b0385169081179091556040805191825263ffffffff841660208301527fd2e262b0385d9d9b956b22e37ce5d35b7120e1d369538757a6d7afd7bfe2d0269101610fc3565b600065ffffffffffff8216806117036111f5565b65ffffffffffff16149392505050565b606060007f000000000000000000000000000000000000000000000000000000000000000060ff166001600160401b0381111561175257611752613f27565b6040519080825280602002602001820160405280156117b157816020015b61179e6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b8152602001906001900390816117705790505b50905060005b7f000000000000000000000000000000000000000000000000000000000000000060ff16811015610ece576117ed81600161489b565b600a541061186b57600a8181548110611808576118086148ae565b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505082828151811061185b5761185b6148ae565b6020026020010181905250611946565b604080516080810190915260008152602081013063305e9eac6118af60017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156118f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191591906148e8565b8152602001600081526020016000801b81525082828151811061193a5761193a6148ae565b60200260200101819052505b8061195081614901565b9150506117b7565b6007546001600160a01b031633146119825760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff1680600654106119aa5760405162461bcd60e51b8152600401610efe90614951565b6006546119b890600161489b565b8111156119d75760405162461bcd60e51b8152600401610efe90614994565b600681905560005460ff166119fe5760405162461bcd60e51b8152600401610efe906149f1565b611a0783600f55565b6040805184815263ffffffff841660208201527f1aac2d1c43f1cd792e5494b49218701c2ca718a80d6d6b480b7903c049e6bb1d9101610fc3565b6007546001600160a01b03163314611a6c5760405162461bcd60e51b8152600401610efe9061491a565b8063ffffffff168060065410611a945760405162461bcd60e51b8152600401610efe90614951565b600654611aa290600161489b565b811115611ac15760405162461bcd60e51b8152600401610efe90614994565b60068190556001600160a01b038316611b125760405162461bcd60e51b8152602060048201526013602482015272048616e646c65722063616e6e6f74206265203606c1b6044820152606401610efe565b601080546001600160a01b0319166001600160a01b0385169081179091556040805191825263ffffffff841660208301527ffb66e9e8ae339b78aacff90234fbd7dd75bea9bcea581ea47833249a68f2bb8e9101610fc3565b611b997f000000000000000000000000000000000000000000000000000000000000000086868686866129e9565b5050505050565b600081600003611bb257506000919050565b601054600160a01b900463ffffffff16805b63ffffffff81166000908152600160205260409020548403611bea575060019392505050565b8063ffffffff16600003611bfc5750601e5b80611c0681614a77565b9150508163ffffffff168163ffffffff1603611bc4575060009392505050565b80516001600160a01b03163314611c7f5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2062652072656769737465726564000000006044820152606401610efe565b611c8881612c39565b50565b6000306001600160a01b031663a6232a9383600081518110611caf57611caf6148ae565b60200260200101516040518263ffffffff1660e01b8152600401611cd591815260200190565b602060405180830381865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190614aeb565b611d625760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f74000000006044820152606401610efe565b611d8d7f00000000000000000000000000000000000000000000000000000000000000006001614b0d565b60ff16825114611ddf5760405162461bcd60e51b815260206004820152601b60248201527f496e636f727265637420726f6f74206172726179206c656e67746800000000006044820152606401610efe565b600160005b600a54811015611ee6576000600a8281548110611e0357611e036148ae565b90600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050611e79816000015186846001611e5c919061489b565b81518110611e6c57611e6c6148ae565b602002602001015161115e565b611ec55760405162461bcd60e51b815260206004820152601760248201527f4e65696768626f7220726f6f74206e6f7420666f756e640000000000000000006044820152606401610efe565b82611ecf81614901565b935050508080611ede90614901565b915050611de4565b505b611f137f00000000000000000000000000000000000000000000000000000000000000006001614b0d565b60ff168114612054573063305e9eac611f4d60017f00000000000000000000000000000000000000000000000000000000000000006148c4565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015611f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb391906148e8565b838281518110611fc557611fc56148ae565b602002602001015114612042576040805162461bcd60e51b81526020600482015260248101919091527f4c696e6b61626c65416e63686f723a206e6f6e2d6578697374656e742065646760448201527f65206973206e6f742073657420746f207468652064656661756c7420726f6f746064820152608401610efe565b8061204c81614901565b915050611ee8565b50600192915050565b6007546001600160a01b031633146120875760405162461bcd60e51b8152600401610efe9061491a565b60005460ff166120a95760405162461bcd60e51b8152600401610efe906149f1565b6120b1612c85565b600065ffffffffffff8216604051639215631160e01b81526001600160401b03821660048201529091503090639215631190602401602060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190614aeb565b15612480576001600160401b038116600090815260086020526040902054600a805463ffffffff861692908110612160576121606148ae565b906000526020600020906004020160020154106121d65760405162461bcd60e51b815260206004820152602e60248201527f4c696e6b61626c65416e63686f723a204e6577206c65616620696e646578206d60448201526d3ab9ba1031329033b932b0ba32b960911b6064820152608401610efe565b600a60086000836001600160401b031681526020019081526020016000205481548110612205576122056148ae565b90600052602060002090600402016002015462010000612225919061489b565b8363ffffffff161061229f5760405162461bcd60e51b815260206004820152603a60248201527f4c696e6b61626c65416e63686f723a204e6577206c65616620696e646578206d60448201527f7573742062652077697468696e20325e313620757064617465730000000000006064820152608401610efe565b600a60086000836001600160401b0316815260200190815260200160002054815481106122ce576122ce6148ae565b90600052602060002090600402016003015482146123455760405162461bcd60e51b815260206004820152602e60248201527f4c696e6b61626c65416e63686f723a207372635265736f757263654944206d7560448201526d7374206265207468652073616d6560901b6064820152608401610efe565b6001600160401b038116600090815260086020526040902054600a805463ffffffff861691908390811061237b5761237b6148ae565b90600052602060002090600402016002018190555084600a82815481106123a4576123a46148ae565b6000918252602080832060016004909302018201939093556001600160401b0385168252600c90925260408120549091601e916123e99163ffffffff90911690614b26565b6123f39190614b59565b6001600160401b0384166000818152600c60209081526040808320805463ffffffff191663ffffffff878116918217909255600b84528285209085528352928190208b905580519384529189169083015281018890529091507f918597b0fdca66b353a1b90d2287c2b06307c4d35c824dfcffeb4b675c961ce49060600160405180910390a15050612665565b600a5460ff7f000000000000000000000000000000000000000000000000000000000000000016116125075760405162461bcd60e51b815260206004820152602a60248201527f4c696e6b61626c65416e63686f723a205468697320416e63686f7220697320616044820152697420636170616369747960b01b6064820152608401610efe565b6001600160401b0381166000818152600960209081526040808320805460ff19166001908117909155600a805483516080810185528781528086018c815263ffffffff8c1682870181815260608085018e81529786018755958a528351600486027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a881019190915592517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9840155517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2aa83015594517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2ab9091015587875260088652848720829055600b865284872087805286528487208c9055845197885294870192909252918501899052939192917f5fe2c40955fb42111954fb4f898e4db4998d64ebaae1c872141ff1943990418a910160405180910390a15050505b506126706001600555565b505050565b600060405180610100016040528084600001516001600160a01b031681526020018460200151815260200184604001516001600160a01b0316815260200184606001518152602001846080015181526020018460a001516001600160a01b031681526020018360000151815260200183602001518152506040516020016126fc9190614bcc565b6040516020818303038152906040528051906020012090509392505050565b600a818154811061272b57600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b60005460ff16156127a85760405162461bcd60e51b815260206004820181905260248201527f496e697469616c697a65643a20416c726561647920696e697469616c697a65646044820152606401610efe565b6127ba6000805460ff19166001179055565b6127c382600e55565b6127cc81600f55565b5050565b60606000826001600160401b038111156127ec576127ec613f27565b604051908082528060200260200182016040528015612815578160200160208202803683370190505b50905060005b8381101561289057612854858583818110612838576128386148ae565b9050602002013560009081526003602052604090205460ff1690565b1561287e57600182828151811061286d5761286d6148ae565b911515602092830291909101909101525b8061288881614901565b91505061281b565b509392505050565b6128a0613dfe565b6128a8613e1c565b6128b0613dfe565b50506040805180820182528351815260208085015181830152825160808082018552868501518286019081526060808901519084015282528451808601865290870151815260a08701518184015281830152835180850190945260c0860151845260e0909501519083015293909150565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c91906148e8565b90508181106129ae576129a96001600160a01b0385168484612cde565b6129e3565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528516906340c10f1990604401611287565b50505050565b6129f68585858585612d41565b600083602001511315612ac057600f5483602001511115612a6c5760405162461bcd60e51b815260206004820152602a60248201527f616d6f756e74206973206c6172676572207468616e206d6178696d756d4465706044820152691bdcda5d105b5bdd5b9d60b21b6064820152608401610efe565b856001600160a01b03168360a001516001600160a01b031603612aab576020830151612aa6906001600160a01b0388169033903090612f48565b612ac0565b612abe8360a00151878560200151611397565b505b600083602001511215612c125782516001600160a01b0316612b245760405162461bcd60e51b815260206004820152601e60248201527f43616e277420776974686472617720746f207a65726f206164647265737300006044820152606401610efe565b600e548360200151612b3590614a28565b1015612b975760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206973206c657373207468616e206d696e696d616c576974686460448201526a1c985dd85b105b5bdd5b9d60aa1b6064820152608401610efe565b856001600160a01b03168360a001516001600160a01b031603612bd557612bd08684600001518560200151612bcb90614a28565b612921565b612bf1565b612bf1868460a001518560000151866020015161068c90614a28565b608083015115612c1257612c12836080015184600001518560400151612f80565b606083015115612c2f57612c2f86846040015185606001516130d6565b6111568282613164565b80600001516001600160a01b03167f2c1ca5c14df2aba59d26842c5ff53f6817052ef34f6f7537f8b4c9e3805a5e508260200151604051612c7a9190614c77565b60405180910390a250565b600260055403612cd75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610efe565b6002600555565b6040516001600160a01b03831660248201526044810182905261267090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613367565b6000612d4e858584612675565b905060005b836040015151811015612dee57612d9684604001518281518110612d7957612d796148ae565b602002602001015160009081526003602052604090205460ff1690565b15612ddc5760405162461bcd60e51b8152602060048201526016602482015275125b9c1d5d081a5cc8185b1c9958591e481cdc195b9d60521b6044820152606401610efe565b80612de681614901565b915050612d53565b50612e197f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182614c91565b8360a0015114612e6b5760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c20646174612068617368000000006044820152606401610efe565b612e7d84602001518560600151610fd0565b836080015114612ec75760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081c1d589b1a58c8185b5bdd5b9d605a1b6044820152606401610efe565b612ed386868585613439565b60005b836040015151811015612f3f5760016003600086604001518481518110612eff57612eff6148ae565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612f3790614901565b915050612ed6565b50505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526129e39085906323b872dd60e01b90608401612d0a565b823414612fe85760405162461bcd60e51b815260206004820152603060248201527f496e636f727265637420726566756e6420616d6f756e7420726563656976656460448201526f08189e481d1a194818dbdb9d1c9858dd60821b6064820152608401610efe565b6000826001600160a01b03168460405160006040518083038185875af1925050503d8060008114613035576040519150601f19603f3d011682016040523d82523d6000602084013e61303a565b606091505b50509050806129e3576000826001600160a01b03168560405160006040518083038185875af1925050503d8060008114613090576040519150601f19603f3d011682016040523d82523d6000602084013e613095565b606091505b5050905080611b995760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606401610efe565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314191906148e8565b905081156129e3578181106129ae576129a96001600160a01b0385168484612cde565b6060820151805160209091015161317b91906136bd565b5060608201517f8646243b1f3099f7f0c30af0d00cb712e1cc160b88e861c647f19d2f38eef573906000602002015160006002306001600160a01b0316630eb7606f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132109190614ca5565b61321a91906148c4565b845160405161322c9493929190614cc2565b60405180910390a160608201517f8646243b1f3099f7f0c30af0d00cb712e1cc160b88e861c647f19d2f38eef573906001602002015160006001306001600160a01b0316630eb7606f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c89190614ca5565b6132d291906148c4565b84602001516040516132e79493929190614cc2565b60405180910390a160005b826040015151811015612670577f9218fa47e982bf1ded9b6823b77dbac4a5db62fc73f8efc325c7de424a41180283604001518281518110613336576133366148ae565b602002602001015160405161334d91815260200190565b60405180910390a18061335f81614901565b9150506132f2565b60006133bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138b89092919063ffffffff16565b80519091501561267057808060200190518101906133da9190614aeb565b6126705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610efe565b8160400151516002148061345257508160400151516010145b61349e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f6620696e7075747300000000000000006044820152606401610efe565b6040820151516002146000808261355457604051637d6c5ceb60e01b815273__$c855d983235a063579a323068f4c8734f9$__90637d6c5ceb9061350a9088908a907f000000000000000000000000000000000000000000000000000000000000000090600401614ced565b600060405180830381865af4158015613527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261354f9190810190614dbc565b6135f4565b60405163156293fb60e31b815273__$c855d983235a063579a323068f4c8734f9$__9063ab149fd8906135af9088908a907f000000000000000000000000000000000000000000000000000000000000000090600401614ced565b600060405180830381865af41580156135cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135f49190810190614dbc565b9150915061360181611c8b565b6136455760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642076616e63686f7220726f6f747360581b6044820152606401610efe565b6136718783857f00000000000000000000000000000000000000000000000000000000000000006138c7565b612f3f5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e2070726f6f66000000000000006044820152606401610efe565b60008281526004602052604081205460ff16156136ec5760405162461bcd60e51b8152600401610efe90614eb4565b60008281526004602052604090205460ff161561371b5760405162461bcd60e51b8152600401610efe90614eb4565b600061373a6040518060400160405280868152602001858152506139d7565b60008581526004602081815260408084208054600160ff19918216811790925589865294829020805490951617909355825163ba70f75760e01b81529251939450309363ba70f7579380840193908290030181865afa1580156137a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c591906148e8565b6040805163ffffffff8416815242602082015286917f0eb4c02013d417d0ed2dbca4ad4c749718452bf34902768ad51eb049799a217f910160405180910390a3306001600160a01b031663ba70f7576040518163ffffffff1660e01b8152600401602060405180830381865afa158015613843573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386791906148e8565b837f0eb4c02013d417d0ed2dbca4ad4c749718452bf34902768ad51eb049799a217f613894846001614b26565b6040805163ffffffff90921682524260208301520160405180910390a39392505050565b60606115be84846000856139ea565b600080858060200190518101906138de9190614ef5565b905060008060006138ee84612898565b9250925092506000601060009054906101000a90046001600160a01b03166001600160a01b0316638041ca538585858d8c8e6040518763ffffffff1660e01b815260040161394196959493929190614f4c565b602060405180830381865afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190614aeb565b9050806139ca5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b6044820152606401610efe565b9998505050505050505050565b805160208201516000916110c791613ac5565b606082471015613a4b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610efe565b600080866001600160a01b03168587604051613a679190614fa8565b60006040518083038185875af1925050503d8060008114613aa4576040519150601f19603f3d011682016040523d82523d6000602084013e613aa9565b606091505b5091509150613aba87838387613d60565b979650505050505050565b60105460009063ffffffff600160c01b8204811691613aee91600160e01b9091041660026150d5565b63ffffffff168163ffffffff1603613b615760405162461bcd60e51b815260206004820152603060248201527f4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656160448201526f1d995cc818d85b88189948185919195960821b6064820152608401610efe565b6000613b6e6002836150ea565b90506000613b7c86866112bf565b905060008060015b60105463ffffffff600160e01b90910481169082161015613c9257613baa600286614b59565b63ffffffff16600003613c4b57601154604051631d052ab160e31b815263ffffffff831660048201528594506001600160a01b039091169063e829558890602401602060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c91906148e8565b63ffffffff821660009081526002602052604090208590559150613c67565b63ffffffff811660009081526002602052604090205492508391505b613c7183836112bf565b9350613c7e6002866150ea565b945080613c8a8161510d565b915050613b84565b50601054600090601e90613cb490600160a01b900463ffffffff166001614b26565b613cbe9190614b59565b6010805463ffffffff60a01b1916600160a01b63ffffffff8416021790559050613ce9866002614b26565b6010805463ffffffff60c01b1916600160c01b63ffffffff93841681029190911791829055604080518082018252978852910482166020808801918252938316600090815260019485905291909120955186555194909101805463ffffffff19169490911693909317909255509195945050505050565b60608315613dcf578251600003613dc8576001600160a01b0385163b613dc85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610efe565b50816115be565b6115be8383815115613de45781518083602001fd5b8060405162461bcd60e51b8152600401610efe9190614c77565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b613e33613dfe565b815260200190600190039081613e2b5790505090565b6020808252825182820181905260009190848201906040850190845b81811015613e8157835183529284019291840191600101613e65565b50909695505050505050565b600060208284031215613e9f57600080fd5b5035919050565b63ffffffff81168114611c8857600080fd5b60008060408385031215613ecb57600080fd5b823591506020830135613edd81613ea6565b809150509250929050565b60008060408385031215613efb57600080fd5b50508035926020909101359150565b600060208284031215613f1c57600080fd5b81356110c181613ea6565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613f5f57613f5f613f27565b60405290565b60405160c081016001600160401b0381118282101715613f5f57613f5f613f27565b60405161010081016001600160401b0381118282101715613f5f57613f5f613f27565b604051601f8201601f191681016001600160401b0381118282101715613fd257613fd2613f27565b604052919050565b6001600160a01b0381168114611c8857600080fd5b60006001600160401b0382111561400857614008613f27565b50601f01601f191660200190565b600082601f83011261402757600080fd5b813561403a61403582613fef565b613faa565b81815284602083860101111561404f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006040828403121561407e57600080fd5b614086613f3d565b9050813561409381613fda565b815260208201356001600160401b038111156140ae57600080fd5b6140ba84828501614016565b60208301525092915050565b600060c082840312156140d857600080fd5b6140e0613f65565b905081356140ed81613fda565b815260208281013590820152604082013561410781613fda565b80604083015250606082013560608201526080820135608082015260a082013561413081613fda565b60a082015292915050565b60006001600160401b0382111561415457614154613f27565b5060051b60200190565b600082601f83011261416f57600080fd5b8135602061417f6140358361413b565b82815260059290921b8401810191818101908684111561419e57600080fd5b8286015b848110156141b957803583529183019183016141a2565b509695505050505050565b600082601f8301126141d557600080fd5b6141dd613f3d565b8060408401858111156141ef57600080fd5b845b818110156142095780358452602093840193016141f1565b509095945050505050565b600060e0828403121561422657600080fd5b61422e613f65565b905081356001600160401b038082111561424757600080fd5b61425385838601614016565b8352602084013591508082111561426957600080fd5b61427585838601614016565b6020840152604084013591508082111561428e57600080fd5b5061429b8482850161415e565b6040830152506142ae83606084016141c4565b606082015260a0820135608082015260c082013560a082015292915050565b6000604082840312156142df57600080fd5b6142e7613f3d565b905081356001600160401b038082111561430057600080fd5b61430c85838601614016565b8352602084013591508082111561432257600080fd5b506140ba84828501614016565b600080600080600080610160878903121561434957600080fd5b86356001600160401b038082111561436057600080fd5b61436c8a838b0161406c565b9750602089013591508082111561438257600080fd5b61438e8a838b01614016565b965060408901359150808211156143a457600080fd5b6143b08a838b01614016565b95506143bf8a60608b016140c6565b94506101208901359150808211156143d657600080fd5b6143e28a838b01614214565b93506101408901359150808211156143f957600080fd5b5061440689828a016142cd565b9150509295509295509295565b6000806000806080858703121561442957600080fd5b843561443481613fda565b9350602085013561444481613fda565b9250604085013561445481613fda565b9396929550929360600135925050565b60008060006060848603121561447957600080fd5b833561448481613fda565b9250602084013561449481613fda565b929592945050506040919091013590565b600080604083850312156144b857600080fd5b82356144c381613fda565b91506020830135613edd81613ea6565b602080825282518282018190526000919060409081850190868401855b8281101561452a578151805185528681015187860152858101518686015260609081015190850152608090930192908501906001016144f0565b5091979650505050505050565b6000806000806000610140868803121561455057600080fd5b85356001600160401b038082111561456757600080fd5b61457389838a01614016565b9650602088013591508082111561458957600080fd5b61459589838a01614016565b95506145a48960408a016140c6565b94506101008801359150808211156145bb57600080fd5b6145c789838a01614214565b93506101208801359150808211156145de57600080fd5b506145eb888289016142cd565b9150509295509295909350565b60006020828403121561460a57600080fd5b81356001600160401b0381111561462057600080fd5b6110c38482850161406c565b60006020828403121561463e57600080fd5b81356001600160401b0381111561465457600080fd5b6110c38482850161415e565b60008060006060848603121561467557600080fd5b83359250602084013561449481613ea6565b6000806000610100848603121561469d57600080fd5b83356001600160401b03808211156146b457600080fd5b6146c087838801614016565b94506146cf87602088016140c6565b935060e08601359150808211156146e557600080fd5b506146f2868287016142cd565b9150509250925092565b6000806020838503121561470f57600080fd5b82356001600160401b038082111561472657600080fd5b818501915085601f83011261473a57600080fd5b81358181111561474957600080fd5b8660208260051b850101111561475e57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015613e8157835115158352928401929184019160010161478c565b60006101008083850312156147be57600080fd5b83601f8401126147cd57600080fd5b6147d5613f87565b9083019080858311156147e757600080fd5b845b838110156148015780358352602092830192016147e9565b5095945050505050565b8060005b60028110156129e357815184526020938401939091019060010161480f565b8060005b60028110156129e35761484684835161480b565b6040939093019260209190910190600101614832565b610100810161486b828661480b565b614878604083018561482e565b6115be60c083018461480b565b634e487b7160e01b600052601160045260246000fd5b808201808211156110c7576110c7614885565b634e487b7160e01b600052603260045260246000fd5b63ffffffff8281168282160390808211156148e1576148e1614885565b5092915050565b6000602082840312156148fa57600080fd5b5051919050565b60006001820161491357614913614885565b5060010190565b60208082526019908201527f73656e646572206973206e6f74207468652068616e646c657200000000000000604082015260600190565b60208082526023908201527f50726f706f73616c4e6f6e6365547261636b65723a20496e76616c6964206e6f6040820152626e636560e81b606082015260800190565b6020808252603a908201527f50726f706f73616c4e6f6e6365547261636b65723a204e6f6e6365206d75737460408201527f206e6f7420696e6372656d656e74206d6f7265207468616e2031000000000000606082015260800190565b6020808252601c908201527f496e697469616c697a65643a204e6f7420696e697469616c697a656400000000604082015260600190565b6000600160ff1b8201614a3d57614a3d614885565b5060000390565b81810360008312801583831316838312821617156148e1576148e1614885565b818103818111156110c7576110c7614885565b600063ffffffff821680614a8d57614a8d614885565b6000190192915050565b805160208201516001600160d01b03198082169291906006831015614ac65780818460060360031b1b83161693505b505050919050565b600060208284031215614ae057600080fd5b81516110c181613fda565b600060208284031215614afd57600080fd5b815180151581146110c157600080fd5b60ff81811683821601908111156110c7576110c7614885565b63ffffffff8181168382160190808211156148e1576148e1614885565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614b7057614b70614b43565b92169190910692915050565b60005b83811015614b97578181015183820152602001614b7f565b50506000910152565b60008151808452614bb8816020860160208601614b7c565b601f01601f19169290920160200192915050565b6020815260018060a01b0382511660208201526020820151604082015260006040830151614c0560608401826001600160a01b03169052565b5060608301516080830152608083015160a083015260a0830151614c3460c08401826001600160a01b03169052565b5060c08301516101008060e0850152614c51610120850183614ba0565b915060e0850151601f198584030182860152614c6d8382614ba0565b9695505050505050565b602081526000614c8a6020830184614ba0565b9392505050565b600082614ca057614ca0614b43565b500690565b600060208284031215614cb757600080fd5b81516110c181613ea6565b84815283602082015263ffffffff83166040820152608060608201526000614c6d6080830184614ba0565b606081526000845160e06060840152614d0a610140840182614ba0565b9050602080870151605f1980868503016080870152614d298483614ba0565b60408a015187820390920160a088015281518082529184019450600092508301905b80831015614d6b5784518252938301936001929092019190830190614d4b565b5060608901519350614d8060c087018561480b565b608089015161010087015260a089015161012087015285810383870152614da78189614ba0565b9450505050506115be604083018460ff169052565b60008060408385031215614dcf57600080fd5b82516001600160401b0380821115614de657600080fd5b818501915085601f830112614dfa57600080fd5b81516020614e0a61403583613fef565b8281528882848701011115614e1e57600080fd5b614e2d83838301848801614b7c565b87820151909650935082841115614e4357600080fd5b838701935087601f850112614e5757600080fd5b83519250614e676140358461413b565b83815260059390931b8401810192818101925088841115614e8757600080fd5b938101935b83851015614ea557845183529381019391810191614e8c565b80955050505050509250929050565b60208082526021908201527f54686520636f6d6d69746d656e7420686173206265656e207375626d697474656040820152601960fa1b606082015260800190565b6000610100808385031215614f0957600080fd5b83601f840112614f1857600080fd5b614f20613f87565b908301908085831115614f3257600080fd5b845b83811015614801578051835260209283019201614f34565b6000610160614f5b838a61480b565b614f68604084018961482e565b614f7560c084018861480b565b80610100840152614f8881840187614ba0565b60ff95909516610120840152505090151561014090910152949350505050565b60008251614fba818460208701614b7c565b9190910192915050565b600181815b80851115615001578163ffffffff04821115614fe757614fe7614885565b80851615614ff457918102915b93841c9390800290614fc9565b509250929050565b600082615018575060016110c7565b81615025575060006110c7565b816001811461503b576002811461504557615076565b60019150506110c7565b60ff84111561505657615056614885565b6001841b915063ffffffff82111561507057615070614885565b506110c7565b5060208310610133831016604e8410600b84101617156150ad575081810a63ffffffff8111156150a8576150a8614885565b6110c7565b6150b78383614fc4565b8063ffffffff048211156150cd576150cd614885565b029392505050565b600063ffffffff6110c3818516828516615009565b600063ffffffff8084168061510157615101614b43565b92169190910492915050565b600063ffffffff80831681810361512657615126614885565b600101939250505056fea264697066735822122084213f9a103f30b6bd1a15d636cac2dec283c138385757b885a30156ad002e1564736f6c63430008120033", "linkReferences": { "contracts/libs/VAnchorEncodeInputs.sol": { "VAnchorEncodeInputs": [ { "length": 20, "start": 14808 }, { "length": 20, "start": 14973 } ] } }, "deployedLinkReferences": { "contracts/libs/VAnchorEncodeInputs.sol": { "VAnchorEncodeInputs": [ { "length": 20, "start": 13502 }, { "length": 20, "start": 13667 } ] } } }