- Contract name:
- ArianeeIdentity
- Optimization enabled
- true
- Compiler version
- v0.5.6+commit.b259423e
- Verified at
- 2019-06-25T08:08:20.663280Z
Constructor Arguments
b5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb9651100000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe00000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe
Arg [0] (address) : 0x4bfb96a0f76d38b622c54ff2a0188be82fb96511
Arg [1] (address) : 0x86084777828cd820f41dc1f4fdb599d2cc43debe
Contract source code
// File: @0xcert/ethereum-utils-contracts/src/contracts/permission/ownable.sol pragma solidity 0.5.6; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string constant NOT_OWNER = "018001"; string constant ZERO_ADDRESS = "018002"; /** * @dev Address of the owner. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_OWNER); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership( address _newOwner ) public onlyOwner { require(_newOwner != address(0), ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/ArianeeIdentity.sol pragma solidity 0.5.6; contract ArianeeIdentity is Ownable { /** * @dev A descriptive name. */ string internal name; /** * @dev An abbreviated name. */ string internal symbol; /** * @dev Mapping from address to approvedList boolean */ mapping(address => bool) internal approvedList; /** * @dev Mapping from address to URI. */ mapping(address => string) internal addressToUri; /** * @dev Mapping from address to imprint. */ mapping(address => bytes32) internal addressToImprint; /** * @dev Mapping from address to URI. */ mapping(address => string) internal addressToWaitingUri; /** * @dev Mapping from address to imprint. */ mapping(address => bytes32) internal addressToWaitingImprint; /** * @dev Mapping from address to compromise date. */ mapping(address => uint256) internal compromiseDate; /** * @dev Mapping from addressId to address. */ mapping(bytes3=>address) internal addressListing; address public bouncerAddress; address public validatorAddress; /** * @dev This emits when a new address is approved. */ event AddressApprovedAdded(address _newIdentity, bytes3 _addressId); /** * @dev This emits when an address is removed from approvedList. */ event AddressApprovedRemoved(address _newIdentity); /** * @dev This emits when a new address is approved. */ event URIUpdated(address _identity, string _uri, bytes32 _imprint); /** * @dev This emits when an identity change its URI and Imprint. */ event URIValidate(address _identity, string _uri, bytes32 _imprint); /** * @dev This emits when an identity change is validated by the contract owner. */ event IdentityCompromised(address _identity, uint256 _compromiseDate); /** * @dev This emits when a new address is set. */ event SetAddress(string _addressType, address _newAddress); /** * @dev Initialize this contract. Acts as a constructor * @param _newBouncerAddress Address of the bouncer. * @param _newValidatorAddress Address of the validator. */ constructor(address _newBouncerAddress, address _newValidatorAddress) public { name = "Arianee Identity"; symbol = "AriaID"; updateBouncerAddress(_newBouncerAddress); updateValidatorAddress(_newValidatorAddress); } /** * @dev Add a new address to approvedList * @notice allow an address to create/update his URI and Imprint. * @notice Can only be called by the bouncer. * @param _newIdentity Address to authorize. * @return Id for address in bytes3. */ function addAddressToApprovedList(address _newIdentity) external returns (bytes3) { require(msg.sender == bouncerAddress); approvedList[_newIdentity] = true; bytes memory _bytesAddress = abi.encodePacked(_newIdentity); bytes3 _addressId = _convertBytesToBytes3(_bytesAddress); addressListing[_addressId] = _newIdentity; emit AddressApprovedAdded(_newIdentity, _addressId); return _addressId; } /** * @dev Remove an address from approvedList. * @notice Can only be called by the bouncer. * @param _identity to delete from the approvedList. */ function removeAddressFromApprovedList(address _identity) external { require(msg.sender == bouncerAddress); approvedList[_identity] = false; emit AddressApprovedRemoved(_identity); } /** * @dev Update URI and Imprint of an address. * @param _uri URI to update. * @param _imprint Imprint to update */ function updateInformations(string calldata _uri, bytes32 _imprint) external isApproved(msg.sender) { addressToWaitingUri[msg.sender] = _uri; addressToWaitingImprint[msg.sender] = _imprint; emit URIUpdated(msg.sender, _uri, _imprint); } /** * @dev Validate waiting informations provided by the identity. * @notice Can only be called by the validator. * @param _uriToValidate uri to be validated. * @param _identity address to be validated. */ function validateInformation(address _identity, string calldata _uriToValidate, bytes32 _imprintToValidate) external { require(msg.sender == validatorAddress); require(addressToWaitingImprint[_identity] == _imprintToValidate); require(keccak256(abi.encodePacked(addressToWaitingUri[_identity])) == keccak256(abi.encodePacked(_uriToValidate))); addressToUri[_identity] = addressToWaitingUri[_identity]; addressToImprint[_identity] = addressToWaitingImprint[_identity]; emit URIValidate(_identity, addressToWaitingUri[_identity], addressToWaitingImprint[_identity]); delete addressToWaitingUri[_identity]; delete addressToWaitingImprint[_identity]; } /** * @notice Add a compromise date to an identity. * @dev Can only be called by the bouncer. * @param _identity address compromise * @param _compromiseDate compromise date */ function updateCompromiseDate(address _identity, uint256 _compromiseDate) external { require(msg.sender == bouncerAddress); compromiseDate[_identity] = _compromiseDate; emit IdentityCompromised(_identity, _compromiseDate); } /** * @notice Check if an address is approved. * @param _identity address of the identity. * @return true if approved. */ function addressIsApproved(address _identity) external view returns (bool _isApproved) { _isApproved = approvedList[_identity]; } /** * @notice The uri of a given identity. * @param _identity address of the identity. * @return the uri. */ function addressURI(address _identity) external view returns (string memory _uri) { _uri = addressToUri[_identity]; } /** * @notice The imprint for a given identity. * @param _identity address of the identity. * @return true if approved. */ function addressImprint(address _identity) external view returns (bytes32 _imprint) { _imprint = addressToImprint[_identity]; } /** * @notice The waiting uri for a given identity. * @param _identity address of the identity. * @return the waiting Uri. */ function waitingURI(address _identity) external view returns(string memory _waitingUri) { _waitingUri = addressToWaitingUri[_identity]; } /** * @notice The waiting imprint for a given identity. * @param _identity address of the identity. * @return the waiting imprint. */ function waitingImprint(address _identity) external view returns(bytes32 _waitingImprint) { _waitingImprint = addressToWaitingImprint[_identity]; } /** * @notice The compromise date for a given identity. * @param _identity address of the identity. * @return the waiting Uri. */ function compromiseIdentityDate(address _identity) external view returns(uint256 _compromiseDate) { _compromiseDate = compromiseDate[_identity]; } /** * @notice The address for a given short id. * @param _id short id of the identity * @return the address of the identity. */ function addressFromId(bytes3 _id) external view returns(address _identity) { _identity = addressListing[_id]; } /** * @dev Change address of the bouncer. * @param _newBouncerAddress new address of the bouncer. */ function updateBouncerAddress(address _newBouncerAddress) public onlyOwner() { bouncerAddress = _newBouncerAddress; emit SetAddress("bouncerAddress", _newBouncerAddress); } /** * @dev Change address of the validator. * @param _newValidatorAddress new address of the validator. */ function updateValidatorAddress(address _newValidatorAddress) public onlyOwner() { validatorAddress = _newValidatorAddress; emit SetAddress("validatorAddress", _newValidatorAddress); } /** * @dev Check if an address is approved. * @param _identity The address to check. */ modifier isApproved(address _identity) { require(approvedList[_identity]); _; } /** * @dev Convert a bytes in bytes3. * @param _inBytes input bytes. * @return output bytes3. */ function _convertBytesToBytes3(bytes memory _inBytes) internal pure returns (bytes3 outBytes3) { if (_inBytes.length == 0) { return 0x0; } assembly { outBytes3 := mload(add(_inBytes, 32)) } } }
Contract ABI
[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"_waitingUri"}],"name":"waitingURI","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateValidatorAddress","inputs":[{"type":"address","name":"_newValidatorAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_compromiseDate"}],"name":"compromiseIdentityDate","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateBouncerAddress","inputs":[{"type":"address","name":"_newBouncerAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"_waitingImprint"}],"name":"waitingImprint","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"validatorAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"removeAddressFromApprovedList","inputs":[{"type":"address","name":"_identity"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"validateInformation","inputs":[{"type":"address","name":"_identity"},{"type":"string","name":"_uriToValidate"},{"type":"bytes32","name":"_imprintToValidate"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"_identity"}],"name":"addressFromId","inputs":[{"type":"bytes3","name":"_id"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"_uri"}],"name":"addressURI","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"_imprint"}],"name":"addressImprint","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateCompromiseDate","inputs":[{"type":"address","name":"_identity"},{"type":"uint256","name":"_compromiseDate"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"bouncerAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateInformations","inputs":[{"type":"string","name":"_uri"},{"type":"bytes32","name":"_imprint"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bytes3","name":""}],"name":"addAddressToApprovedList","inputs":[{"type":"address","name":"_newIdentity"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"_isApproved"}],"name":"addressIsApproved","inputs":[{"type":"address","name":"_identity"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_newBouncerAddress"},{"type":"address","name":"_newValidatorAddress"}]},{"type":"event","name":"AddressApprovedAdded","inputs":[{"type":"address","name":"_newIdentity","indexed":false},{"type":"bytes3","name":"_addressId","indexed":false}],"anonymous":false},{"type":"event","name":"AddressApprovedRemoved","inputs":[{"type":"address","name":"_newIdentity","indexed":false}],"anonymous":false},{"type":"event","name":"URIUpdated","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"string","name":"_uri","indexed":false},{"type":"bytes32","name":"_imprint","indexed":false}],"anonymous":false},{"type":"event","name":"URIValidate","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"string","name":"_uri","indexed":false},{"type":"bytes32","name":"_imprint","indexed":false}],"anonymous":false},{"type":"event","name":"IdentityCompromised","inputs":[{"type":"address","name":"_identity","indexed":false},{"type":"uint256","name":"_compromiseDate","indexed":false}],"anonymous":false},{"type":"event","name":"SetAddress","inputs":[{"type":"string","name":"_addressType","indexed":false},{"type":"address","name":"_newAddress","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
Contract Creation Code
0x60806040523480156200001157600080fd5b506040516040806200152c833981018060405260408110156200003357600080fd5b50805160209182015160008054600160a060020a031916331790556040805180820190915260108082527f417269616e6565204964656e7469747900000000000000000000000000000000919094019081529192909162000098916001919062000394565b506040805180820190915260068082527f41726961494400000000000000000000000000000000000000000000000000006020909201918252620000df9160029162000394565b50620000f48264010000000062000110810204565b620001088164010000000062000271810204565b505062000439565b60005460408051808201909152600681527f3031383030310000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314620001f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001bd578181015183820152602001620001a3565b50505050905090810190601f168015620001eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e828201527f626f756e636572416464726573730000000000000000000000000000000000006060830152516000805160206200150c8339815191529181900360800190a150565b60005460408051808201909152600681527f3031383030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146200031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315620001bd578181015183820152602001620001a3565b50600b8054600160a060020a038316600160a060020a031990911681179091556040805160208101929092528082526010828201527f76616c696461746f7241646472657373000000000000000000000000000000006060830152516000805160206200150c8339815191529181900360800190a150565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003d757805160ff191683800117855562000407565b8280016001018555821562000407579182015b8281111562000407578251825591602001919060010190620003ea565b506200041592915062000419565b5090565b6200043691905b8082111562000415576000815560010162000420565b90565b6110c380620004496000396000f3fe608060405234801561001057600080fd5b50600436106100e95760e060020a6000350463132ec4a181146100ee5780631a199a161461018957806327f51a72146101b15780632cd77b36146101e9578063374b87fd1461020f5780633fe4676e14610235578063561aec781461025957806357d4248f1461027f5780635b0d4711146102fd5780635c5ad9671461032457806367d9162b1461034a5780637458bbc1146103705780638da5cb5b1461039c5780638e6f1511146103a457806397a4d7b3146103ac57806398e14d1f1461041a578063b66ffbe71461045d578063f2fde38b14610497575b600080fd5b6101146004803603602081101561010457600080fd5b5035600160a060020a03166104bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101af6004803603602081101561019f57600080fd5b5035600160a060020a0316610568565b005b6101d7600480360360208110156101c757600080fd5b5035600160a060020a031661068f565b60408051918252519081900360200190f35b6101af600480360360208110156101ff57600080fd5b5035600160a060020a03166106aa565b6101d76004803603602081101561022557600080fd5b5035600160a060020a0316610792565b61023d6107ad565b60408051600160a060020a039092168252519081900360200190f35b6101af6004803603602081101561026f57600080fd5b5035600160a060020a03166107bc565b6101af6004803603606081101561029557600080fd5b600160a060020a038235169190810190604081016020820135602060020a8111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111602060020a831117156102f257600080fd5b91935091503561082b565b61023d6004803603602081101561031357600080fd5b5035600160e860020a031916610aa9565b6101146004803603602081101561033a57600080fd5b5035600160a060020a0316610ace565b6101d76004803603602081101561036057600080fd5b5035600160a060020a0316610b42565b6101af6004803603604081101561038657600080fd5b50600160a060020a038135169060200135610b5d565b61023d610bcd565b61023d610bdc565b6101af600480360360408110156103c257600080fd5b810190602081018135602060020a8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460018302840111602060020a8311171561040f57600080fd5b919350915035610beb565b6104406004803603602081101561043057600080fd5b5035600160a060020a0316610cad565b60408051600160e860020a03199092168252519081900360200190f35b6104836004803603602081101561047357600080fd5b5035600160a060020a0316610d94565b604080519115158252519081900360200190f35b6101af600480360360208110156104ad57600080fd5b5035600160a060020a0316610db2565b600160a060020a03811660009081526006602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b50505050509050919050565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146106225760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105e75781810151838201526020016105cf565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600b8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252601082820152608060020a6f76616c696461746f7241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146107275760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e82820152609060020a6d626f756e63657241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526007602052604090205490565b600b54600160a060020a031681565b600a54600160a060020a031633146107d357600080fd5b600160a060020a038116600081815260036020908152604091829020805460ff19169055815192835290517fd12e8945e9a5e91167be7fc9d4e953a018d48cba09b3838e57a7e0aff116c6989281900390910190a150565b600b54600160a060020a0316331461084257600080fd5b600160a060020a038416600090815260076020526040902054811461086657600080fd5b8282604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001206006600086600160a060020a0316600160a060020a0316815260200190815260200160002060405160200180828054600181600116156101000203166002900480156109195780601f106108f7576101008083540402835291820191610919565b820191906000526020600020905b815481529060010190602001808311610905575b5050915050604051602081830303815290604052805190602001201461093e57600080fd5b600160a060020a038416600090815260066020908152604080832060049092529091208154610980929060026000196101006001841615020190911604610f20565b50600160a060020a0384166000818152600760208181526040808420546005835281852081905560068352938190209282528051948552840183905260609084018181528254600260001961010060018416150201909116049185018290527fdfa2a30946e62abf37186dc9ff5268cef32b4abf868fd965c5a55b29141f634194899492909190608083019085908015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b505094505050505060405180910390a1600160a060020a0384166000908152600660205260408120610a8c91610fa5565b505050600160a060020a0316600090815260076020526040812055565b600160e860020a031916600090815260096020526040902054600160a060020a031690565b600160a060020a03811660009081526004602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b600160a060020a031660009081526005602052604090205490565b600a54600160a060020a03163314610b7457600080fd5b600160a060020a0382166000818152600860209081526040918290208490558151928352820183905280517f2e6aa017648c8f32add4cfb0bd3bfd3408c9d7013d328e084656fb1db353dbb19281900390910190a15050565b600054600160a060020a031681565b600a54600160a060020a031681565b3360008181526003602052604090205460ff16610c0757600080fd5b336000908152600660205260409020610c21908585610fec565b5033600081815260076020908152604091829020859055815183815291820185905260609082018181529082018690527f2d64b04fdb9bb57739881c5fd027d989ffd253cdc643f097258d3ed21631e132929187918791879160808201858580828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b600a54600090600160a060020a03163314610cc757600080fd5b600160a060020a0382166000818152600360209081526040808320805460ff191660011790558051606060020a909402918401919091528051808403601401815260349093019052610d1882610f04565b600160e860020a031981166000818152600960209081526040918290208054600160a060020a031916600160a060020a038a1690811790915582519081529081019290925280519293507fa31fdf99b4c3d07705b47b3201ab3a16914403acbeac6edc05896e76449e9ee292918290030190a19150505b919050565b600160a060020a031660009081526003602052604090205460ff1690565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a03163314610e2f5760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50604080518082019091526006815260d160020a6518189c181819026020820152600160a060020a038216610ea85760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000815160001415610f1857506000610d8f565b506020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f595780548555610f95565b82800160010185558215610f9557600052602060002091601f016020900482015b82811115610f95578254825591600101919060010190610f7a565b50610fa192915061105a565b5090565b50805460018160011615610100020316600290046000825580601f10610fcb5750610fe9565b601f016020900490600052602060002090810190610fe9919061105a565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102d5782800160ff19823516178555610f95565b82800160010185558215610f95579182015b82811115610f9557823582559160200191906001019061103f565b61107491905b80821115610fa15760008155600101611060565b9056feb5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb96511a165627a7a72305820257fb22bfa18ed9d310b44e873c84b89c746a4c01ec201bdbd9508c8c6b00c870029b5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb9651100000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe00000000000000000000000086084777828cd820f41dc1f4fdb599d2cc43debe
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100e95760e060020a6000350463132ec4a181146100ee5780631a199a161461018957806327f51a72146101b15780632cd77b36146101e9578063374b87fd1461020f5780633fe4676e14610235578063561aec781461025957806357d4248f1461027f5780635b0d4711146102fd5780635c5ad9671461032457806367d9162b1461034a5780637458bbc1146103705780638da5cb5b1461039c5780638e6f1511146103a457806397a4d7b3146103ac57806398e14d1f1461041a578063b66ffbe71461045d578063f2fde38b14610497575b600080fd5b6101146004803603602081101561010457600080fd5b5035600160a060020a03166104bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101af6004803603602081101561019f57600080fd5b5035600160a060020a0316610568565b005b6101d7600480360360208110156101c757600080fd5b5035600160a060020a031661068f565b60408051918252519081900360200190f35b6101af600480360360208110156101ff57600080fd5b5035600160a060020a03166106aa565b6101d76004803603602081101561022557600080fd5b5035600160a060020a0316610792565b61023d6107ad565b60408051600160a060020a039092168252519081900360200190f35b6101af6004803603602081101561026f57600080fd5b5035600160a060020a03166107bc565b6101af6004803603606081101561029557600080fd5b600160a060020a038235169190810190604081016020820135602060020a8111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460018302840111602060020a831117156102f257600080fd5b91935091503561082b565b61023d6004803603602081101561031357600080fd5b5035600160e860020a031916610aa9565b6101146004803603602081101561033a57600080fd5b5035600160a060020a0316610ace565b6101d76004803603602081101561036057600080fd5b5035600160a060020a0316610b42565b6101af6004803603604081101561038657600080fd5b50600160a060020a038135169060200135610b5d565b61023d610bcd565b61023d610bdc565b6101af600480360360408110156103c257600080fd5b810190602081018135602060020a8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460018302840111602060020a8311171561040f57600080fd5b919350915035610beb565b6104406004803603602081101561043057600080fd5b5035600160a060020a0316610cad565b60408051600160e860020a03199092168252519081900360200190f35b6104836004803603602081101561047357600080fd5b5035600160a060020a0316610d94565b604080519115158252519081900360200190f35b6101af600480360360208110156104ad57600080fd5b5035600160a060020a0316610db2565b600160a060020a03811660009081526006602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b50505050509050919050565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146106225760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105e75781810151838201526020016105cf565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600b8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252601082820152608060020a6f76616c696461746f7241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a031633146107275760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50600a8054600160a060020a038316600160a060020a03199091168117909155604080516020810192909252808252600e82820152609060020a6d626f756e63657241646472657373026060830152516000805160206110788339815191529181900360800190a150565b600160a060020a031660009081526007602052604090205490565b600b54600160a060020a031681565b600a54600160a060020a031633146107d357600080fd5b600160a060020a038116600081815260036020908152604091829020805460ff19169055815192835290517fd12e8945e9a5e91167be7fc9d4e953a018d48cba09b3838e57a7e0aff116c6989281900390910190a150565b600b54600160a060020a0316331461084257600080fd5b600160a060020a038416600090815260076020526040902054811461086657600080fd5b8282604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001206006600086600160a060020a0316600160a060020a0316815260200190815260200160002060405160200180828054600181600116156101000203166002900480156109195780601f106108f7576101008083540402835291820191610919565b820191906000526020600020905b815481529060010190602001808311610905575b5050915050604051602081830303815290604052805190602001201461093e57600080fd5b600160a060020a038416600090815260066020908152604080832060049092529091208154610980929060026000196101006001841615020190911604610f20565b50600160a060020a0384166000818152600760208181526040808420546005835281852081905560068352938190209282528051948552840183905260609084018181528254600260001961010060018416150201909116049185018290527fdfa2a30946e62abf37186dc9ff5268cef32b4abf868fd965c5a55b29141f634194899492909190608083019085908015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b505094505050505060405180910390a1600160a060020a0384166000908152600660205260408120610a8c91610fa5565b505050600160a060020a0316600090815260076020526040812055565b600160e860020a031916600090815260096020526040902054600160a060020a031690565b600160a060020a03811660009081526004602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561055c5780601f106105315761010080835404028352916020019161055c565b600160a060020a031660009081526005602052604090205490565b600a54600160a060020a03163314610b7457600080fd5b600160a060020a0382166000818152600860209081526040918290208490558151928352820183905280517f2e6aa017648c8f32add4cfb0bd3bfd3408c9d7013d328e084656fb1db353dbb19281900390910190a15050565b600054600160a060020a031681565b600a54600160a060020a031681565b3360008181526003602052604090205460ff16610c0757600080fd5b336000908152600660205260409020610c21908585610fec565b5033600081815260076020908152604091829020859055815183815291820185905260609082018181529082018690527f2d64b04fdb9bb57739881c5fd027d989ffd253cdc643f097258d3ed21631e132929187918791879160808201858580828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050565b600a54600090600160a060020a03163314610cc757600080fd5b600160a060020a0382166000818152600360209081526040808320805460ff191660011790558051606060020a909402918401919091528051808403601401815260349093019052610d1882610f04565b600160e860020a031981166000818152600960209081526040918290208054600160a060020a031916600160a060020a038a1690811790915582519081529081019290925280519293507fa31fdf99b4c3d07705b47b3201ab3a16914403acbeac6edc05896e76449e9ee292918290030190a19150505b919050565b600160a060020a031660009081526003602052604090205460ff1690565b600054604080518082019091526006815260d060020a6530313830303102602082015290600160a060020a03163314610e2f5760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b50604080518082019091526006815260d160020a6518189c181819026020820152600160a060020a038216610ea85760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156105e75781810151838201526020016105cf565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000815160001415610f1857506000610d8f565b506020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f595780548555610f95565b82800160010185558215610f9557600052602060002091601f016020900482015b82811115610f95578254825591600101919060010190610f7a565b50610fa192915061105a565b5090565b50805460018160011615610100020316600290046000825580601f10610fcb5750610fe9565b601f016020900490600052602060002090810190610fe9919061105a565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102d5782800160ff19823516178555610f95565b82800160010185558215610f95579182015b82811115610f9557823582559160200191906001019061103f565b61107491905b80821115610fa15760008155600101611060565b9056feb5fa77bd6bc3d862c73fa2474bfb96a0f76d38b622c54ff2a0188be82fb96511a165627a7a72305820257fb22bfa18ed9d310b44e873c84b89c746a4c01ec201bdbd9508c8c6b00c870029