[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_userAddress", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "_isFrozen", "type": "bool" }, { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" } ], "name": "AddressFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_agent", "type": "address" } ], "name": "AgentAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_agent", "type": "address" } ], "name": "AgentRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_compliance", "type": "address" } ], "name": "ComplianceAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_identityRegistry", "type": "address" } ], "name": "IdentityRegistryAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_userAddress", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_lostWallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_newWallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_investorOnchainID", "type": "address" } ], "name": "RecoverySuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_userAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "TokensFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_userAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "TokensUnfrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_userAddress", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "string", "name": "_newName", "type": "string" }, { "indexed": true, "internalType": "string", "name": "_newSymbol", "type": "string" }, { "indexed": false, "internalType": "uint8", "name": "_newDecimals", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "_newVersion", "type": "string" }, { "indexed": true, "internalType": "address", "name": "_newOnchainID", "type": "address" } ], "name": "UpdatedTokenInformation", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_agent", "type": "address" } ], "name": "addAgent", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_userAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_fromList", "type": "address[]" }, { "internalType": "address[]", "name": "_toList", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchForcedTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_userAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchFreezePartialTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_toList", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_userAddresses", "type": "address[]" }, { "internalType": "bool[]", "name": "_freeze", "type": "bool[]" } ], "name": "batchSetAddressFrozen", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_toList", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_userAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" } ], "name": "batchUnfreezePartialTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "compliance", "outputs": [ { "internalType": "contract IModularCompliance", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "forcedTransfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "freezePartialTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" } ], "name": "getFrozenTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "identityRegistry", "outputs": [ { "internalType": "contract IIdentityRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_identityRegistry", "type": "address" }, { "internalType": "address", "name": "_compliance", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "_decimals", "type": "uint8" }, { "internalType": "address", "name": "_onchainID", "type": "address" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_agent", "type": "address" } ], "name": "isAgent", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" } ], "name": "isFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "onchainID", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_lostWallet", "type": "address" }, { "internalType": "address", "name": "_newWallet", "type": "address" }, { "internalType": "address", "name": "_investorOnchainID", "type": "address" } ], "name": "recoveryAddress", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_agent", "type": "address" } ], "name": "removeAgent", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" }, { "internalType": "bool", "name": "_freeze", "type": "bool" } ], "name": "setAddressFrozen", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_compliance", "type": "address" } ], "name": "setCompliance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_identityRegistry", "type": "address" } ], "name": "setIdentityRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "name": "setName", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_onchainID", "type": "address" } ], "name": "setOnchainID", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "setSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_userAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "unfreezePartialTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ]
6080604052606e805460ff1916905534801561001a57600080fd5b506137a58061002a6000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c8063715018a61161015c578063a9059cbb116100ce578063dd62ed3e11610087578063dd62ed3e146105af578063e5839836146105e8578063f2fde38b14610614578063f898178914610627578063f91b619c1461063a578063fc7e5fa81461064d57600080fd5b8063a9059cbb1461053a578063aba637051461054d578063b84c824614610563578063c47f002714610576578063c69c09cf14610589578063cbf3f8611461059c57600080fd5b80639285948a116101205780639285948a146104d357806395d89b41146104e657806397a6278e146104ee5780639dc29fac146105015780639fc1d0e714610514578063a457c2d71461052757600080fd5b8063715018a61461048c5780638456cb591461049457806384e798421461049c57806388d695b2146104af5780638da5cb5b146104c257600080fd5b806339509351116102005780634a6cc677116101b95780634a6cc6771461041657806354fd4d50146104295780635c975abb1461044a5780636290865d14610455578063685731071461046657806370a082311461047957600080fd5b806339509351146103af5780633d1ddc5b146103c25780633f4ba83a146103d557806340c10f19146103dd57806342a47abc146103f05780634710362d1461040357600080fd5b806318160ddd1161025257806318160ddd146103465780631a7af3791461034e5780631fe56f7d146103615780631ffbb0641461037457806323b872dd14610387578063313ce5671461039a57600080fd5b806306fdde031461028f578063095ea7b3146102ad578063125c4a33146102d0578063134e18f4146102e5578063158b1a571461030f575b600080fd5b610297610660565b6040516102a49190612e09565b60405180910390f35b6102c06102bb366004612e38565b6106f2565b60405190151581526020016102a4565b6102e36102de366004612e38565b610709565b005b606e5461010090046001600160a01b03165b6040516001600160a01b0390911681526020016102a4565b61033861031d366004612e62565b6001600160a01b03166000908152606d602052604090205490565b6040519081526020016102a4565b606854610338565b6102e361035c366004612ec9565b610838565b6102e361036f366004612e38565b6108ad565b6102c0610382366004612e62565b6109d6565b6102c0610395366004612f35565b6109e3565b606b5460405160ff90911681526020016102a4565b6102c06103bd366004612e38565b610ced565b6102e36103d0366004612e62565b610d24565b6102e3610de2565b6102e36103eb366004612e38565b610e90565b6102e36103fe366004612f71565b6110ab565b6102e3610411366004612ec9565b611141565b6102e3610424366004612ec9565b6111a6565b604080518082019091526005815264342e302e3160d81b6020820152610297565b606e5460ff166102c0565b606f546001600160a01b03166102f7565b6102e3610474366004612ec9565b61120b565b610338610487366004612e62565b611270565b6102e361128b565b6102e361129f565b6102e36104aa366004612e62565b611324565b6102e36104bd366004612ec9565b611394565b6033546001600160a01b03166102f7565b6102c06104e136600461300b565b6113fa565b610297611769565b6102e36104fc366004612e62565b611778565b6102e361050f366004612e38565b6117e8565b6102c0610522366004612f35565b611993565b6102c0610535366004612e38565b611bc1565b6102c0610548366004612e38565b611bf8565b606b5461010090046001600160a01b03166102f7565b6102e361057136600461304e565b611e6f565b6102e361058436600461304e565b611f9b565b6102e36105973660046130ce565b612027565b6102e36105aa366004612e62565b6120a1565b6103386105bd366004613105565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b6102c06105f6366004612e62565b6001600160a01b03166000908152606c602052604090205460ff1690565b6102e3610622366004612e62565b6120fb565b6102e3610635366004612e62565b612174565b6102e36106483660046131db565b61228e565b6102e361065b366004612ec9565b612666565b60606069805461066f90613288565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90613288565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050905090565b60006106ff3384846126cb565b5060015b92915050565b610712336109d6565b6107375760405162461bcd60e51b815260040161072e906132c2565b60405180910390fd5b600061074283611270565b6001600160a01b0384166000908152606d6020526040902054909150610769908390613326565b8110156107b85760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206578636565647320617661696c61626c652062616c616e6365604482015260640161072e565b6001600160a01b0383166000908152606d60205260409020546107dc908390613326565b6001600160a01b0384166000818152606d6020526040908190209290925590517fa065e63c631c86f1b9f66a4a2f63f2093bf1c2168d23290259dbd969e0222a459061082b9085815260200190565b60405180910390a2505050565b60005b838110156108a65761089485858381811061085857610858613339565b905060200201602081019061086d9190612e62565b84848481811061087f5761087f613339565b9050602002016020810190610597919061334f565b8061089e8161336c565b91505061083b565b5050505050565b6108b6336109d6565b6108d25760405162461bcd60e51b815260040161072e906132c2565b6001600160a01b0382166000908152606d60205260409020548111156109575760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c64206265206c657373207468616e206f7220657160448201527375616c20746f2066726f7a656e20746f6b656e7360601b606482015260840161072e565b6001600160a01b0382166000908152606d602052604090205461097b908290613385565b6001600160a01b0383166000818152606d6020526040908190209290925590517f9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d6906109ca9084815260200190565b60405180910390a25050565b60006107036065836127f0565b606e5460009060ff1615610a095760405162461bcd60e51b815260040161072e90613398565b6001600160a01b0383166000908152606c602052604090205460ff16158015610a4b57506001600160a01b0384166000908152606c602052604090205460ff16155b610a8a5760405162461bcd60e51b815260206004820152601060248201526f3bb0b63632ba1034b990333937bd32b760811b604482015260640161072e565b6001600160a01b0384166000908152606d6020526040902054610aac85611270565b610ab69190613385565b821115610afc5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161072e565b606e5460405163b9209e3360e01b81526001600160a01b0385811660048301526101009092049091169063b9209e3390602401602060405180830381865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7091906133c2565b8015610bec5750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610bab908790879087906004016133df565b602060405180830381865afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bec91906133c2565b15610ca6576001600160a01b038416600090815260676020908152604080832033808552925290912054610c2c918691610c27908690613385565b6126cb565b610c37848484612873565b606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490610c6b908790879087906004016133df565b600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b5050505060019050610ce6565b60405162461bcd60e51b81526020600482015260156024820152745472616e73666572206e6f7420706f737369626c6560581b604482015260640161072e565b9392505050565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106ff918590610c27908690613326565b610d2c6129e1565b606b8054610100600160a81b0319166101006001600160a01b038481168202929092179283905560405192041690610d6690606a90613403565b60405180910390206069604051610d7d9190613403565b60408051918290038220606b5483830183526005845264342e302e3160d81b6020850152915190927f6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d192610dd79260ff9091169190613479565b60405180910390a450565b610deb336109d6565b610e075760405162461bcd60e51b815260040161072e906132c2565b606e5460ff16610e505760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161072e565b606e805460ff191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610e99336109d6565b610eb55760405162461bcd60e51b815260040161072e906132c2565b606e5460405163b9209e3360e01b81526001600160a01b0384811660048301526101009092049091169063b9209e3390602401602060405180830381865afa158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2991906133c2565b610f755760405162461bcd60e51b815260206004820152601960248201527f4964656e74697479206973206e6f742076657269666965642e00000000000000604482015260640161072e565b606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610faa90600090869086906004016133df565b602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb91906133c2565b6110375760405162461bcd60e51b815260206004820152601760248201527f436f6d706c69616e6365206e6f7420666f6c6c6f776564000000000000000000604482015260640161072e565b6110418282612a3b565b606f54604051635f8dead360e01b81526001600160a01b0384811660048301526024820184905290911690635f8dead390604401600060405180830381600087803b15801561108f57600080fd5b505af11580156110a3573d6000803e3d6000fd5b505050505050565b60005b85811015611138576111258787838181106110cb576110cb613339565b90506020020160208101906110e09190612e62565b8686848181106110f2576110f2613339565b90506020020160208101906111079190612e62565b85858581811061111957611119613339565b90506020020135611993565b50806111308161336c565b9150506110ae565b50505050505050565b60005b838110156108a65761119485858381811061116157611161613339565b90506020020160208101906111769190612e62565b84848481811061118857611188613339565b905060200201356108ad565b8061119e8161336c565b915050611144565b60005b838110156108a6576111f98585838181106111c6576111c6613339565b90506020020160208101906111db9190612e62565b8484848181106111ed576111ed613339565b905060200201356117e8565b806112038161336c565b9150506111a9565b60005b838110156108a65761125e85858381811061122b5761122b613339565b90506020020160208101906112409190612e62565b84848481811061125257611252613339565b90506020020135610e90565b806112688161336c565b91505061120e565b6001600160a01b031660009081526066602052604090205490565b6112936129e1565b61129d6000612b23565b565b6112a8336109d6565b6112c45760405162461bcd60e51b815260040161072e906132c2565b606e5460ff16156112e75760405162461bcd60e51b815260040161072e90613398565b606e805460ff191660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610e86565b61132c6129e1565b6001600160a01b0381166113525760405162461bcd60e51b815260040161072e9061349d565b61135d606582612b75565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b60005b838110156108a6576113e78585838181106113b4576113b4613339565b90506020020160208101906113c99190612e62565b8484848181106113db576113db613339565b90506020020135611bf8565b50806113f28161336c565b915050611397565b6000611405336109d6565b6114215760405162461bcd60e51b815260040161072e906132c2565b61142a84611270565b6000036114705760405162461bcd60e51b81526020600482015260146024820152733737903a37b5b2b739903a37903932b1b7bb32b960611b604482015260640161072e565b604080516001600160a01b038516602082015283916000910160408051808303601f1901815290829052805160209091012063d202158d60e01b8252600482018190526001602483015291506001600160a01b0383169063d202158d90604401602060405180830381865afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151191906133c2565b1561172957600061152187611270565b6001600160a01b038881166000818152606d60205260409081902054606e549151637e42683b60e01b8152600481019390935293945061010090049091169063454a03e090899087908490637e42683b90602401602060405180830381865afa158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b691906134d4565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b5050505061162c888884611993565b50801561163d5761163d8782610709565b6001600160a01b0388166000908152606c602052604090205460ff16151560010361166d5761166d876001612027565b606e5460405163a8d29d1d60e01b81526001600160a01b038a811660048301526101009092049091169063a8d29d1d90602401600060405180830381600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b0316896001600160a01b03167ff0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed060405160405180910390a46001945050505050610ce6565b60405162461bcd60e51b81526020600482015260156024820152745265636f76657279206e6f7420706f737369626c6560581b604482015260640161072e565b6060606a805461066f90613288565b6117806129e1565b6001600160a01b0381166117a65760405162461bcd60e51b815260040161072e9061349d565b6117b1606582612bf1565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6117f1336109d6565b61180d5760405162461bcd60e51b815260040161072e906132c2565b8061181783611270565b10156118655760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f74206275726e206d6f7265207468616e2062616c616e6365000000604482015260640161072e565b6001600160a01b0382166000908152606d602052604081205461188784611270565b6118919190613385565b9050808211156119275760006118a78284613385565b6001600160a01b0385166000908152606d60205260409020549091506118ce908290613385565b6001600160a01b0385166000818152606d6020526040908190209290925590517f9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d69061191d9084815260200190565b60405180910390a2505b6119318383612c73565b606f5460405163469753b960e11b81526001600160a01b0385811660048301526024820185905290911690638d2ea77290604401600060405180830381600087803b15801561197f57600080fd5b505af1158015611138573d6000803e3d6000fd5b600061199e336109d6565b6119ba5760405162461bcd60e51b815260040161072e906132c2565b816119c485611270565b1015611a0b5760405162461bcd60e51b815260206004820152601660248201527573656e6465722062616c616e636520746f6f206c6f7760501b604482015260640161072e565b6001600160a01b0384166000908152606d6020526040812054611a2d86611270565b611a379190613385565b905080831115611acd576000611a4d8285613385565b6001600160a01b0387166000908152606d6020526040902054909150611a74908290613385565b6001600160a01b0387166000818152606d6020526040908190209290925590517f9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d690611ac39084815260200190565b60405180910390a2505b606e5460405163b9209e3360e01b81526001600160a01b0386811660048301526101009092049091169063b9209e3390602401602060405180830381865afa158015611b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4191906133c2565b15610ca657611b51858585612873565b606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611b85908890889088906004016133df565b600060405180830381600087803b158015611b9f57600080fd5b505af1158015611bb3573d6000803e3d6000fd5b505050506001915050610ce6565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106ff918590610c27908690613385565b606e5460009060ff1615611c1e5760405162461bcd60e51b815260040161072e90613398565b6001600160a01b0383166000908152606c602052604090205460ff16158015611c575750336000908152606c602052604090205460ff16155b611c965760405162461bcd60e51b815260206004820152601060248201526f3bb0b63632ba1034b990333937bd32b760811b604482015260640161072e565b336000818152606d602052604090205490611cb090611270565b611cba9190613385565b821115611d005760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161072e565b606e5460405163b9209e3360e01b81526001600160a01b0385811660048301526101009092049091169063b9209e3390602401602060405180830381865afa158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906133c2565b8015611df05750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690611daf903390879087906004016133df565b602060405180830381865afa158015611dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df091906133c2565b15610ca657611e00338484612873565b606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611e34903390879087906004016133df565b600060405180830381600087803b158015611e4e57600080fd5b505af1158015611e62573d6000803e3d6000fd5b5050505060019050610703565b611e776129e1565b604051602001611e9290602080825260009082015260400190565b604051602081830303815290604052805190602001208282604051602001611ebb9291906134f8565b6040516020818303038152906040528051906020012003611eee5760405162461bcd60e51b815260040161072e90613527565b606a611efb8284836135a4565b50606b546040516101009091046001600160a01b031690611f1e90606a90613403565b60405180910390206069604051611f359190613403565b60408051918290038220606b5483830183526005845264342e302e3160d81b6020850152915190927f6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d192611f8f9260ff9091169190613479565b60405180910390a45050565b611fa36129e1565b604051602001611fbe90602080825260009082015260400190565b604051602081830303815290604052805190602001208282604051602001611fe79291906134f8565b604051602081830303815290604052805190602001200361201a5760405162461bcd60e51b815260040161072e90613527565b6069611efb8284836135a4565b612030336109d6565b61204c5760405162461bcd60e51b815260040161072e906132c2565b6001600160a01b0382166000818152606c6020526040808220805460ff19168515159081179091559051339391927f7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f43691a45050565b6120a96129e1565b606e8054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517fd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c90600090a250565b6121036129e1565b6001600160a01b0381166121685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072e565b61217181612b23565b50565b61217c6129e1565b606f546001600160a01b0316156121eb57606f5460405163040db3b560e41b81523060048201526001600160a01b03909116906340db3b5090602401600060405180830381600087803b1580156121d257600080fd5b505af11580156121e6573d6000803e3d6000fd5b505050505b606f80546001600160a01b0319166001600160a01b038316908117909155604051631ffad50160e11b8152306004820152633ff5aa0290602401600060405180830381600087803b15801561223f57600080fd5b505af1158015612253573d6000803e3d6000fd5b50506040516001600160a01b03841692507f7f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b69150600090a250565b600054610100900460ff16158080156122ae5750600054600160ff909116105b806122c85750303b1580156122c8575060005460ff166001145b61232b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161072e565b6000805460ff19166001179055801561234e576000805461ff0019166101001790555b60006123626033546001600160a01b031690565b6001600160a01b0316146123ae5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161072e565b6001600160a01b038716158015906123ce57506001600160a01b03861615155b6123ea5760405162461bcd60e51b815260040161072e9061349d565b60405160200161240590602080825260009082015260400190565b604051602081830303815290604052805190602001208560405160200161242c9190612e09565b60405160208183030381529060405280519060200120141580156124a6575060405160200161246690602080825260009082015260400190565b604051602081830303815290604052805190602001208460405160200161248d9190612e09565b6040516020818303038152906040528051906020012014155b6124c25760405162461bcd60e51b815260040161072e90613527565b60128360ff1611156125165760405162461bcd60e51b815260206004820152601960248201527f646563696d616c73206265747765656e203020616e6420313800000000000000604482015260640161072e565b61251e612d5f565b606961252a8682613664565b50606a6125378582613664565b50606b80546001600160a01b038416610100026001600160a81b031990911660ff861617179055606e805460ff19166001179055612574876120a1565b61257d86612174565b606b546040516101009091046001600160a01b03169061259f90606a90613403565b604051809103902060696040516125b69190613403565b60408051918290038220606b5483830183526005845264342e302e3160d81b6020850152915190927f6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1926126109260ff9091169190613479565b60405180910390a48015611138576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b60005b838110156108a6576126b985858381811061268657612686613339565b905060200201602081019061269b9190612e62565b8484848181106126ad576126ad613339565b90506020020135610709565b806126c38161336c565b915050612669565b6001600160a01b03831661272d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161072e565b6001600160a01b03821661278e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161072e565b6001600160a01b0383811660008181526067602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160a01b0382166128535760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161072e565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0383166128d75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161072e565b6001600160a01b0382166129395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161072e565b6001600160a01b03831660009081526066602052604090205461295d908290613385565b6001600160a01b03808516600090815260666020526040808220939093559084168152205461298d908290613326565b6001600160a01b0380841660008181526066602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127e39085815260200190565b6033546001600160a01b0316331461129d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161072e565b6001600160a01b038216612a915760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161072e565b80606854612a9f9190613326565b6068556001600160a01b038216600090815260666020526040902054612ac6908290613326565b6001600160a01b0383166000818152606660205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b179085815260200190565b60405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612b7f82826127f0565b15612bcc5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161072e565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b612bfb82826127f0565b612c515760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161072e565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038216612cd35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161072e565b6001600160a01b038216600090815260666020526040902054612cf7908290613385565b6001600160a01b038316600090815260666020526040902055606854612d1e908290613385565b6068556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612b17565b600054610100900460ff16612d865760405162461bcd60e51b815260040161072e90613724565b61129d612d93565b505050565b600054610100900460ff16612dba5760405162461bcd60e51b815260040161072e90613724565b61129d33612b23565b6000815180845260005b81811015612de957602081850181015186830182015201612dcd565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ce66020830184612dc3565b80356001600160a01b0381168114612e3357600080fd5b919050565b60008060408385031215612e4b57600080fd5b612e5483612e1c565b946020939093013593505050565b600060208284031215612e7457600080fd5b610ce682612e1c565b60008083601f840112612e8f57600080fd5b50813567ffffffffffffffff811115612ea757600080fd5b6020830191508360208260051b8501011115612ec257600080fd5b9250929050565b60008060008060408587031215612edf57600080fd5b843567ffffffffffffffff80821115612ef757600080fd5b612f0388838901612e7d565b90965094506020870135915080821115612f1c57600080fd5b50612f2987828801612e7d565b95989497509550505050565b600080600060608486031215612f4a57600080fd5b612f5384612e1c565b9250612f6160208501612e1c565b9150604084013590509250925092565b60008060008060008060608789031215612f8a57600080fd5b863567ffffffffffffffff80821115612fa257600080fd5b612fae8a838b01612e7d565b90985096506020890135915080821115612fc757600080fd5b612fd38a838b01612e7d565b90965094506040890135915080821115612fec57600080fd5b50612ff989828a01612e7d565b979a9699509497509295939492505050565b60008060006060848603121561302057600080fd5b61302984612e1c565b925061303760208501612e1c565b915061304560408501612e1c565b90509250925092565b6000806020838503121561306157600080fd5b823567ffffffffffffffff8082111561307957600080fd5b818501915085601f83011261308d57600080fd5b81358181111561309c57600080fd5b8660208285010111156130ae57600080fd5b60209290920196919550909350505050565b801515811461217157600080fd5b600080604083850312156130e157600080fd5b6130ea83612e1c565b915060208301356130fa816130c0565b809150509250929050565b6000806040838503121561311857600080fd5b61312183612e1c565b915061312f60208401612e1c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261315f57600080fd5b813567ffffffffffffffff8082111561317a5761317a613138565b604051601f8301601f19908116603f011681019082821181831017156131a2576131a2613138565b816040528381528660208588010111156131bb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060c087890312156131f457600080fd5b6131fd87612e1c565b955061320b60208801612e1c565b9450604087013567ffffffffffffffff8082111561322857600080fd5b6132348a838b0161314e565b9550606089013591508082111561324a57600080fd5b5061325789828a0161314e565b935050608087013560ff8116811461326e57600080fd5b915061327c60a08801612e1c565b90509295509295509295565b600181811c9082168061329c57607f821691505b6020821081036132bc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613310565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561336157600080fd5b8135610ce6816130c0565b60006001820161337e5761337e613310565b5060010190565b8181038181111561070357610703613310565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6000602082840312156133d457600080fd5b8151610ce6816130c0565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080835461341181613288565b60018281168015613429576001811461343e5761346d565b60ff198416875282151583028701945061346d565b8760005260208060002060005b858110156134645781548a82015290840190820161344b565b50505082870194505b50929695505050505050565b60ff831681526040602082015260006134956040830184612dc3565b949350505050565b6020808252601f908201527f696e76616c696420617267756d656e74202d207a65726f206164647265737300604082015260600190565b6000602082840312156134e657600080fd5b815161ffff81168114610ce657600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252601f908201527f696e76616c696420617267756d656e74202d20656d70747920737472696e6700604082015260600190565b601f821115612d8e57600081815260208120601f850160051c810160208610156135855750805b601f850160051c820191505b818110156110a357828155600101613591565b67ffffffffffffffff8311156135bc576135bc613138565b6135d0836135ca8354613288565b8361355e565b6000601f84116001811461360457600085156135ec5750838201355b600019600387901b1c1916600186901b1783556108a6565b600083815260209020601f19861690835b828110156136355786850135825560209485019460019092019101613615565b50868210156136525760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff81111561367e5761367e613138565b6136928161368c8454613288565b8461355e565b602080601f8311600181146136c757600084156136af5750858301515b600019600386901b1c1916600185901b1785556110a3565b600085815260208120601f198616915b828110156136f6578886015182559484019460019091019084016136d7565b50858210156137145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220725dbe32e5abe37e588fedc0938ebca945036089806cb1da96b4c2a5026fcffe64736f6c63430008110033