Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- AUSD
- Optimization enabled
- true
- Compiler version
- v0.4.25+commit.59dbf8f1
- Optimization runs
- 200
- EVM Version
- byzantium
- Verified at
- 2026-04-02T06:22:51.720242Z
AUSD.sol
pragma solidity ^0.4.24;
/*
*
*
* _ _ _ ___ ___ _____ _
* /_\| | | / __| \ |_ _|__| |_____ _ _
* / _ \ |_| \__ \ |) | | |/ _ \ / / -_) ' \
* /_/ \_\___/|___/___/ |_|\___/_\_\___|_||_|
*
*
*
*/
// SafeMath methods
library SafeMath {
function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
uint256 c = _a + _b;
assert(c >= _a);
return c;
}
function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
assert(_a >= _b);
return _a - _b;
}
function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
uint256 c = _a * _b;
assert(_a == 0 || c / _a == _b);
return c;
}
}
// Contract must have an owner
contract Owned {
address public owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function setOwner(address _owner) onlyOwner public {
owner = _owner;
}
}
// Standard ERC20 Token Interface
interface ERC20Token {
function name() external view returns (string name_);
function symbol() external view returns (string symbol_);
function decimals() external view returns (uint8 decimals_);
function totalSupply() external view returns (uint256 totalSupply_);
function balanceOf(address _owner) external view returns (uint256 _balance);
function transfer(address _to, uint256 _value) external returns (bool _success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool _success);
function approve(address _spender, uint256 _value) external returns (bool _success);
function allowance(address _owner, address _spender) external view returns (uint256 _remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
// the main ERC20-compliant multi-timelock enabled contract
contract AUSD is Owned, ERC20Token {
using SafeMath for uint256;
string private constant standard = "201811113309";
string private constant version = "6.0663600";
string private name_ = "AUSD";
string private symbol_ = "AUSD";
uint8 private decimals_ = 18;
uint256 private totalSupply_ = uint256(20) * uint256(10)**uint256(8) * uint256(10)**uint256(decimals_);
mapping (address => uint256) private balanceP;
mapping (address => mapping (address => uint256)) private allowed;
mapping (address => uint256[]) private lockTime;
mapping (address => uint256[]) private lockValue;
mapping (address => uint256) private lockNum;
uint256 private later = 0;
uint256 private earlier = 0;
bool private mintable_ = true;
// burn token event
event Burn(address indexed _from, uint256 _value);
// mint token event
event Mint(address indexed _to, uint256 _value);
// timelock-related events
event TransferLocked(address indexed _from, address indexed _to, uint256 _time, uint256 _value);
event TokenUnlocked(address indexed _address, uint256 _value);
// safety method-related events
event WrongTokenEmptied(address indexed _token, address indexed _addr, uint256 _amount);
event WrongEtherEmptied(address indexed _addr, uint256 _amount);
// constructor for the ERC20 Token
constructor() public {
balanceP[msg.sender] = totalSupply_;
}
modifier validAddress(address _address) {
require(_address != 0x0);
_;
}
modifier isMintable() {
require(mintable_);
_;
}
// fast-forward the timelocks for all accounts
function setUnlockEarlier(uint256 _earlier) public onlyOwner {
earlier = earlier.add(_earlier);
}
// delay the timelocks for all accounts
function setUnlockLater(uint256 _later) public onlyOwner {
later = later.add(_later);
}
// owner may permanently disable minting
function disableMint() public onlyOwner isMintable {
mintable_ = false;
}
// show if the token is still mintable
function mintable() public view returns (bool) {
return mintable_;
}
// standard ERC20 name function
function name() public view returns (string) {
return name_;
}
// standard ERC20 symbol function
function symbol() public view returns (string) {
return symbol_;
}
// standard ERC20 decimals function
function decimals() public view returns (uint8) {
return decimals_;
}
// standard ERC20 totalSupply function
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
// standard ERC20 allowance function
function allowance(address _owner, address _spender) external view returns (uint256) {
return allowed[_owner][_spender];
}
// show unlocked balance of an account
function balanceUnlocked(address _address) public view returns (uint256 _balance) {
_balance = balanceP[_address];
uint256 i = 0;
while (i < lockNum[_address]) {
if (now.add(earlier) >= lockTime[_address][i].add(later)) _balance = _balance.add(lockValue[_address][i]);
i++;
}
return _balance;
}
// show timelocked balance of an account
function balanceLocked(address _address) public view returns (uint256 _balance) {
_balance = 0;
uint256 i = 0;
while (i < lockNum[_address]) {
if (now.add(earlier) < lockTime[_address][i].add(later)) _balance = _balance.add(lockValue[_address][i]);
i++;
}
return _balance;
}
// standard ERC20 balanceOf with timelock added
function balanceOf(address _address) public view returns (uint256 _balance) {
_balance = balanceP[_address];
uint256 i = 0;
while (i < lockNum[_address]) {
_balance = _balance.add(lockValue[_address][i]);
i++;
}
return _balance;
}
// show timelocks in an account
function showLockTimes(address _address) public view validAddress(_address) returns (uint256[] _times) {
uint i = 0;
uint256[] memory tempLockTime = new uint256[](lockNum[_address]);
while (i < lockNum[_address]) {
tempLockTime[i] = lockTime[_address][i].add(later).sub(earlier);
i++;
}
return tempLockTime;
}
// show values locked in an account's timelocks
function showLockValues(address _address) public view validAddress(_address) returns (uint256[] _values) {
return lockValue[_address];
}
function showLockNum(address _address) public view validAddress(_address) returns (uint256 _lockNum) {
return lockNum[_address];
}
// Calculate and process the timelock states of an account
function calcUnlock(address _address) private {
uint256 i = 0;
uint256 j = 0;
uint256[] memory currentLockTime;
uint256[] memory currentLockValue;
uint256[] memory newLockTime = new uint256[](lockNum[_address]);
uint256[] memory newLockValue = new uint256[](lockNum[_address]);
currentLockTime = lockTime[_address];
currentLockValue = lockValue[_address];
while (i < lockNum[_address]) {
if (now.add(earlier) >= currentLockTime[i].add(later)) {
balanceP[_address] = balanceP[_address].add(currentLockValue[i]);
emit TokenUnlocked(_address, currentLockValue[i]);
} else {
newLockTime[j] = currentLockTime[i];
newLockValue[j] = currentLockValue[i];
j++;
}
i++;
}
uint256[] memory trimLockTime = new uint256[](j);
uint256[] memory trimLockValue = new uint256[](j);
i = 0;
while (i < j) {
trimLockTime[i] = newLockTime[i];
trimLockValue[i] = newLockValue[i];
i++;
}
lockTime[_address] = trimLockTime;
lockValue[_address] = trimLockValue;
lockNum[_address] = j;
}
// standard ERC20 transfer
function transfer(address _to, uint256 _value) public validAddress(_to) returns (bool _success) {
if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
require(balanceP[msg.sender] >= _value && _value >= 0);
balanceP[msg.sender] = balanceP[msg.sender].sub(_value);
balanceP[_to] = balanceP[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
// transfer Token with timelocks
function transferLocked(address _to, uint256[] _time, uint256[] _value) public validAddress(_to) returns (bool _success) {
require(_value.length == _time.length);
if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
uint256 i = 0;
uint256 totalValue = 0;
while (i < _value.length) {
totalValue = totalValue.add(_value[i]);
i++;
}
require(balanceP[msg.sender] >= totalValue && totalValue >= 0);
require(lockNum[_to].add(_time.length) <= 42);
i = 0;
while (i < _time.length) {
if (_value[i] > 0) {
balanceP[msg.sender] = balanceP[msg.sender].sub(_value[i]);
lockTime[_to].length = lockNum[_to]+1;
lockValue[_to].length = lockNum[_to]+1;
lockTime[_to][lockNum[_to]] = now.add(_time[i]).add(earlier).sub(later);
lockValue[_to][lockNum[_to]] = _value[i];
lockNum[_to]++;
}
// emit custom TransferLocked event
emit TransferLocked(msg.sender, _to, _time[i], _value[i]);
// emit standard Transfer event for wallets
emit Transfer(msg.sender, _to, _value[i]);
i++;
}
return true;
}
// TransferFrom Token with timelocks
function transferLockedFrom(address _from, address _to, uint256[] _time, uint256[] _value) public
validAddress(_from) validAddress(_to) returns (bool success) {
require(_value.length == _time.length);
if (lockNum[_from] > 0) calcUnlock(_from);
uint256 i = 0;
uint256 totalValue = 0;
while (i < _value.length) {
totalValue = totalValue.add(_value[i]);
i++;
}
require(balanceP[_from] >= totalValue && totalValue >= 0 && allowed[_from][msg.sender] >= totalValue);
require(lockNum[_to].add(_time.length) <= 42);
i = 0;
while (i < _time.length) {
if (_value[i] > 0) {
balanceP[_from] = balanceP[_from].sub(_value[i]);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value[i]);
lockTime[_to].length = lockNum[_to]+1;
lockValue[_to].length = lockNum[_to]+1;
lockTime[_to][lockNum[_to]] = now.add(_time[i]).add(earlier).sub(later);
lockValue[_to][lockNum[_to]] = _value[i];
lockNum[_to]++;
}
// emit custom TransferLocked event
emit TransferLocked(_from, _to, _time[i], _value[i]);
// emit standard Transfer event for wallets
emit Transfer(_from, _to, _value[i]);
i++;
}
return true;
}
// standard ERC20 transferFrom
function transferFrom(address _from, address _to, uint256 _value) public validAddress(_from) validAddress(_to) returns (bool _success) {
if (lockNum[_from] > 0) calcUnlock(_from);
require(balanceP[_from] >= _value && _value >= 0 && allowed[_from][msg.sender] >= _value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
balanceP[_from] = balanceP[_from].sub(_value);
balanceP[_to] = balanceP[_to].add(_value);
emit Transfer(_from, _to, _value);
return true;
}
// should only be called when first setting an allowed
function approve(address _spender, uint256 _value) public validAddress(_spender) returns (bool _success) {
if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
// increase or decrease allowed
function increaseApproval(address _spender, uint _value) public validAddress(_spender) returns (bool _success) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_value);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
function decreaseApproval(address _spender, uint _value) public validAddress(_spender) returns (bool _success) {
if(_value >= allowed[msg.sender][_spender]) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].sub(_value);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
// owner may burn own token
function burn(uint256 _value) public onlyOwner returns (bool _success) {
if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
require(balanceP[msg.sender] >= _value && _value >= 0);
balanceP[msg.sender] = balanceP[msg.sender].sub(_value);
totalSupply_ = totalSupply_.sub(_value);
emit Burn(msg.sender, _value);
return true;
}
// owner may mint new token and increase total supply
function mint(uint256 _value) public onlyOwner isMintable returns (bool _success) {
balanceP[msg.sender] = balanceP[msg.sender].add(_value);
totalSupply_ = totalSupply_.add(_value);
emit Mint(msg.sender, _value);
return true;
}
// safety methods
function () public payable {
revert();
}
function emptyWrongToken(address _addr) onlyOwner public {
ERC20Token wrongToken = ERC20Token(_addr);
uint256 amount = wrongToken.balanceOf(address(this));
require(amount > 0);
require(wrongToken.transfer(msg.sender, amount));
emit WrongTokenEmptied(_addr, msg.sender, amount);
}
// shouldn't happen, just in case
function emptyWrongEther() onlyOwner public {
uint256 amount = address(this).balance;
require(amount > 0);
msg.sender.transfer(amount);
emit WrongEtherEmptied(msg.sender, amount);
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"byzantium","compilationTarget":{"AUSD.sol":"AUSD"}}
Contract ABI
[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceUnlocked","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"approve","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"transferLockedFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256[]","name":"_time"},{"type":"uint256[]","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setOwner","inputs":[{"type":"address","name":"_owner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"disableMint","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"burn","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"mintable","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceLocked","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"decreaseApproval","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceOf","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"mint","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transfer","inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transferLocked","inputs":[{"type":"address","name":"_to"},{"type":"uint256[]","name":"_time"},{"type":"uint256[]","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"_times"}],"name":"showLockTimes","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"_values"}],"name":"showLockValues","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setUnlockLater","inputs":[{"type":"uint256","name":"_later"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"emptyWrongToken","inputs":[{"type":"address","name":"_addr"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"increaseApproval","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"emptyWrongEther","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"allowance","inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setUnlockEarlier","inputs":[{"type":"uint256","name":"_earlier"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_lockNum"}],"name":"showLockNum","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"TransferLocked","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_time","indexed":false},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"TokenUnlocked","inputs":[{"type":"address","name":"_address","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"WrongTokenEmptied","inputs":[{"type":"address","name":"_token","indexed":true},{"type":"address","name":"_addr","indexed":true},{"type":"uint256","name":"_amount","indexed":false}],"anonymous":false},{"type":"event","name":"WrongEtherEmptied","inputs":[{"type":"address","name":"_addr","indexed":true},{"type":"uint256","name":"_amount","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false}]
Contract Creation Code
0x60c0604052600460808190527f415553440000000000000000000000000000000000000000000000000000000060a0908152620000409160019190620000fa565b506040805180820190915260048082527f415553440000000000000000000000000000000000000000000000000000000060209092019182526200008791600291620000fa565b5060038054601260ff19918216179182905560ff909116600a90810a637735940002600455600090819055600b55600c80549091166001179055348015620000ce57600080fd5b5060008054600160a060020a03191633908117825560045490825260056020526040909120556200019f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013d57805160ff19168380011785556200016d565b828001600101855582156200016d579182015b828111156200016d57825182559160200191906001019062000150565b506200017b9291506200017f565b5090565b6200019c91905b808211156200017b576000815560010162000186565b90565b61227580620001af6000396000f3006080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630451f520811461016e57806306fdde03146101a1578063095ea7b31461022b5780630fce887b1461026357806313af40351461030757806318160ddd1461032a57806323b872dd1461033f578063313ce5671461036957806334452f381461039457806342966c68146103a95780634bf365df146103c15780635fc3a312146103d657806366188463146103f757806370a082311461041b5780638da5cb5b1461043c57806395d89b411461046d578063a0712d6814610482578063a9059cbb1461049a578063b91aedab146104be578063b9c5416d1461055a578063c9e6bd34146105cb578063ca0cd7c0146105ec578063d729018114610604578063d73dd62314610625578063d80b205614610649578063dd62ed3e1461065e578063df51d46b14610685578063fb276fcf1461069d575b600080fd5b34801561017a57600080fd5b5061018f600160a060020a03600435166106be565b60408051918252519081900360200190f35b3480156101ad57600080fd5b506101b66107ac565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b5061024f600160a060020a0360043516602435610842565b604080519115158252519081900360200190f35b34801561026f57600080fd5b50604080516020600460443581810135838102808601850190965280855261024f958335600160a060020a039081169660248035909216963696956064959294930192829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108e19650505050505050565b34801561031357600080fd5b50610328600160a060020a0360043516610d61565b005b34801561033657600080fd5b5061018f610da7565b34801561034b57600080fd5b5061024f600160a060020a0360043581169060243516604435610dad565b34801561037557600080fd5b5061037e610f61565b6040805160ff9092168252519081900360200190f35b3480156103a057600080fd5b50610328610f6a565b3480156103b557600080fd5b5061024f600435610f9e565b3480156103cd57600080fd5b5061024f611084565b3480156103e257600080fd5b5061018f600160a060020a036004351661108d565b34801561040357600080fd5b5061024f600160a060020a036004351660243561112c565b34801561042757600080fd5b5061018f600160a060020a0360043516611256565b34801561044857600080fd5b506104516112c4565b60408051600160a060020a039092168252519081900360200190f35b34801561047957600080fd5b506101b66112d3565b34801561048e57600080fd5b5061024f600435611331565b3480156104a657600080fd5b5061024f600160a060020a03600435166024356113de565b3480156104ca57600080fd5b5060408051602060046024803582810135848102808701860190975280865261024f968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506114df9650505050505050565b34801561056657600080fd5b5061057b600160a060020a036004351661185d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b757818101518382015260200161059f565b505050509050019250505060405180910390f35b3480156105d757600080fd5b5061057b600160a060020a036004351661194f565b3480156105f857600080fd5b506103286004356119d2565b34801561061057600080fd5b50610328600160a060020a0360043516611a02565b34801561063157600080fd5b5061024f600160a060020a0360043516602435611b9f565b34801561065557600080fd5b50610328611beb565b34801561066a57600080fd5b5061018f600160a060020a0360043581169060243516611c7a565b34801561069157600080fd5b50610328600435611ca5565b3480156106a957600080fd5b5061018f600160a060020a0360043516611cd5565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a0384166000908152600760205260409020805461073f9291908490811061072657fe5b9060005260206000200154611d0a90919063ffffffff16565b600b5461075390429063ffffffff611d0a16565b1061079e57600160a060020a0383166000908152600860205260409020805461079b91908390811061078157fe5b906000526020600020015483611d0a90919063ffffffff16565b91505b6001016106d9565b50919050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505090505b90565b600082600160a060020a038116151561085a57600080fd5b3360009081526009602052604081205411156108795761087933611d20565b336000818152600660209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000808086600160a060020a03811615156108fb57600080fd5b86600160a060020a038116151561091157600080fd5b865186511461091f57600080fd5b600160a060020a03891660009081526009602052604081205411156109475761094789611d20565b60009350600092505b855184101561098e57610981868581518110151561096a57fe5b60209081029091010151849063ffffffff611d0a16565b6001909401939250610950565b600160a060020a03891660009081526005602052604090205483118015906109b7575060008310155b80156109e65750600160a060020a03891660009081526006602090815260408083203384529091529020548311155b15156109f157600080fd5b8651600160a060020a038916600090815260096020526040902054602a91610a1f919063ffffffff611d0a16565b1115610a2a57600080fd5b600093505b8651841015610d525760008685815181101515610a4857fe5b906020019060200201511115610c7d57610a9a8685815181101515610a6957fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff61218916565b600160a060020a038a166000908152600560205260409020558551610aff90879086908110610ac557fe5b6020908102909101810151600160a060020a038c16600090815260068352604080822033835290935291909120549063ffffffff61218916565b600160a060020a03808b166000908152600660209081526040808320338452825280832094909455918b1681526009825282812054600790925291909120600190910190610b4d908261219b565b50600160a060020a0388166000908152600960209081526040808320546008909252909120600190910190610b82908261219b565b50610bcf600a54610bc3600b54610bb78b89815181101515610ba057fe5b60209081029091010151429063ffffffff611d0a16565b9063ffffffff611d0a16565b9063ffffffff61218916565b600160a060020a038916600090815260076020908152604080832060099092529091205481548110610bfd57fe5b6000918252602090912001558551869085908110610c1757fe5b6020908102909101810151600160a060020a038a166000908152600883526040808220600990945290205482549192918110610c4f57fe5b6000918252602080832090910192909255600160a060020a038a168152600990915260409020805460010190555b87600160a060020a031689600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e8987815181101515610cc057fe5b906020019060200201518988815181101515610cd857fe5b602090810290910181015160408051938452918301528051918290030190a387600160a060020a031689600160a060020a031660008051602061222a8339815191528887815181101515610d2857fe5b906020019060200201516040518082815260200191505060405180910390a3600190930192610a2f565b50600198975050505050505050565b600054600160a060020a03163314610d7857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600083600160a060020a0381161515610dc557600080fd5b83600160a060020a0381161515610ddb57600080fd5b600160a060020a0386166000908152600960205260408120541115610e0357610e0386611d20565b600160a060020a0386166000908152600560205260409020548411801590610e2c575060008410155b8015610e5b5750600160a060020a03861660009081526006602090815260408083203384529091529020548411155b1515610e6657600080fd5b600160a060020a0386166000908152600660209081526040808320338452909152902054610e9a908563ffffffff61218916565b600160a060020a038716600081815260066020908152604080832033845282528083209490945591815260059091522054610edb908563ffffffff61218916565b600160a060020a038088166000908152600560205260408082209390935590871681522054610f10908563ffffffff611d0a16565b600160a060020a0380871660008181526005602090815260409182902094909455805188815290519193928a169260008051602061222a83398151915292918290030190a350600195945050505050565b60035460ff1690565b600054600160a060020a03163314610f8157600080fd5b600c5460ff161515610f9257600080fd5b600c805460ff19169055565b60008054600160a060020a03163314610fb657600080fd5b336000908152600960205260408120541115610fd557610fd533611d20565b336000908152600560205260409020548211801590610ff5575060008210155b151561100057600080fd5b33600090815260056020526040902054611020908363ffffffff61218916565b33600090815260056020526040902055600454611043908363ffffffff61218916565b60045560408051838152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2506001919050565b600c5460ff1690565b6000805b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a038416600090815260076020526040902080546110de9291908490811061072657fe5b600b546110f290429063ffffffff611d0a16565b101561112457600160a060020a0383166000908152600860205260409020805461112191908390811061078157fe5b91505b600101611091565b600082600160a060020a038116151561114457600080fd5b336000908152600660209081526040808320600160a060020a0388168452909152902054831061119757336000908152600660209081526040808320600160a060020a03881684529091528120556111f0565b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff61218916565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600160a060020a038316600090815260086020526040902080546112ba91908390811061078157fe5b9150600101611271565b600054600160a060020a031681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a060020a0316331461134957600080fd5b600c5460ff16151561135a57600080fd5b3360009081526005602052604090205461137a908363ffffffff611d0a16565b3360009081526005602052604090205560045461139d908363ffffffff611d0a16565b60045560408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001919050565b600082600160a060020a03811615156113f657600080fd5b3360009081526009602052604081205411156114155761141533611d20565b336000908152600560205260409020548311801590611435575060008310155b151561144057600080fd5b33600090815260056020526040902054611460908463ffffffff61218916565b3360009081526005602052604080822092909255600160a060020a03861681522054611492908463ffffffff611d0a16565b600160a060020a03851660008181526005602090815260409182902093909355805186815290519192339260008051602061222a8339815191529281900390910190a35060019392505050565b6000808085600160a060020a03811615156114f957600080fd5b855185511461150757600080fd5b3360009081526009602052604081205411156115265761152633611d20565b60009250600091505b845183101561156d57611560858481518110151561154957fe5b60209081029091010151839063ffffffff611d0a16565b600190930192915061152f565b33600090815260056020526040902054821180159061158d575060008210155b151561159857600080fd5b8551600160a060020a038816600090815260096020526040902054602a916115c6919063ffffffff611d0a16565b11156115d157600080fd5b600092505b855183101561185057600085848151811015156115ef57fe5b90602001906020020151111561177b57611638858481518110151561161057fe5b602090810290910181015133600090815260059092526040909120549063ffffffff61218916565b33600090815260056020908152604080832093909355600160a060020a038a1682526009815282822054600790915291902060019091019061167a908261219b565b50600160a060020a03871660009081526009602090815260408083205460089092529091206001909101906116af908261219b565b506116cd600a54610bc3600b54610bb78a88815181101515610ba057fe5b600160a060020a0388166000908152600760209081526040808320600990925290912054815481106116fb57fe5b600091825260209091200155845185908490811061171557fe5b6020908102909101810151600160a060020a038916600090815260088352604080822060099094529020548254919291811061174d57fe5b6000918252602080832090910192909255600160a060020a0389168152600990915260409020805460010190555b86600160a060020a031633600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e88868151811015156117be57fe5b9060200190602002015188878151811015156117d657fe5b602090810290910181015160408051938452918301528051918290030190a386600160a060020a031633600160a060020a031660008051602061222a833981519152878681518110151561182657fe5b906020019060200201516040518082815260200191505060405180910390a36001909201916115d6565b5060019695505050505050565b606060008183600160a060020a038116151561187857600080fd5b600092506009600086600160a060020a0316600160a060020a03168152602001908152602001600020546040519080825280602002602001820160405280156118cb578160200160208202803883390190505b5091505b600160a060020a03851660009081526009602052604090205483101561194757600b54600a54600160a060020a038716600090815260076020526040902080546119249392610bc39290918890811061072657fe5b828481518110151561193257fe5b602090810290910101526001909201916118cf565b509392505050565b606081600160a060020a038116151561196757600080fd5b600160a060020a038316600090815260086020908152604091829020805483518184028101840190945280845290918301828280156119c557602002820191906000526020600020905b8154815260200190600101908083116119b1575b5050505050915050919050565b600054600160a060020a031633146119e957600080fd5b600a546119fc908263ffffffff611d0a16565b600a5550565b600080548190600160a060020a03163314611a1c57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5051905060008111611abb57600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50511515611b5a57600080fd5b6040805182815290513391600160a060020a038616917f5d8daa04d680e083e2ab17a35494ba9f290f554edf76a78f0103a8a599b5c4249181900360200190a3505050565b600082600160a060020a0381161515611bb757600080fd5b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff611d0a16565b60008054600160a060020a03163314611c0357600080fd5b50303160008111611c1357600080fd5b604051339082156108fc029083906000818181858888f19350505050158015611c40573d6000803e3d6000fd5b5060408051828152905133917faea7a96dc17068a25e51e08f8ed45b86bd34b10af65af8e757af57b7e7b9e55d919081900360200190a250565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b600054600160a060020a03163314611cbc57600080fd5b600b54611ccf908263ffffffff611d0a16565b600b5550565b600081600160a060020a0381161515611ced57600080fd5b5050600160a060020a031660009081526009602052604090205490565b600082820183811015611d1957fe5b9392505050565b6000806060806060806060806000975060009650600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611d83578160200160208202803883390190505b509350600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611dd5578160200160208202803883390190505b50600160a060020a038a166000908152600760209081526040918290208054835181840281018401909452808452939650919290830182828015611e3857602002820191906000526020600020905b815481526020019060010190808311611e24575b50505050509550600860008a600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611eae57602002820191906000526020600020905b815481526020019060010190808311611e9a575b505050505094505b600160a060020a03891660009081526009602052604090205488101561203d57611f00600a54878a815181101515611eea57fe5b602090810290910101519063ffffffff611d0a16565b600b54611f1490429063ffffffff611d0a16565b10611fcb57611f5b8589815181101515611f2a57fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff611d0a16565b600160a060020a038a1660008181526005602052604090209190915585517f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e39087908b908110611fa757fe5b906020019060200201516040518082815260200191505060405180910390a2612032565b8588815181101515611fd957fe5b906020019060200201518488815181101515611ff157fe5b60209081029091010152845185908990811061200957fe5b90602001906020020151838881518110151561202157fe5b602090810290910101526001909601955b600190970196611eb6565b86604051908082528060200260200182016040528015612067578160200160208202803883390190505b50915086604051908082528060200260200182016040528015612094578160200160208202803883390190505b509050600097505b8688101561210f5783888151811015156120b257fe5b9060200190602002015182898151811015156120ca57fe5b6020908102909101015282518390899081106120e257fe5b9060200190602002015181898151811015156120fa57fe5b6020908102909101015260019097019661209c565b600160a060020a03891660009081526007602090815260409091208351612138928501906121c4565b50600160a060020a03891660009081526008602090815260409091208251612162928401906121c4565b505050600160a060020a039096166000908152600960205260409020939093555050505050565b60008183101561219557fe5b50900390565b8154818355818111156121bf576000838152602090206121bf91810190830161220f565b505050565b8280548282559060005260206000209081019282156121ff579160200282015b828111156121ff5782518255916020019190600101906121e4565b5061220b92915061220f565b5090565b61083f91905b8082111561220b57600081556001016122155600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582004e327a4db376800f1cf8fb357f9a1addb8dd7b973f7aca43d086a8e69281caa0029
Deployed ByteCode
0x6080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630451f520811461016e57806306fdde03146101a1578063095ea7b31461022b5780630fce887b1461026357806313af40351461030757806318160ddd1461032a57806323b872dd1461033f578063313ce5671461036957806334452f381461039457806342966c68146103a95780634bf365df146103c15780635fc3a312146103d657806366188463146103f757806370a082311461041b5780638da5cb5b1461043c57806395d89b411461046d578063a0712d6814610482578063a9059cbb1461049a578063b91aedab146104be578063b9c5416d1461055a578063c9e6bd34146105cb578063ca0cd7c0146105ec578063d729018114610604578063d73dd62314610625578063d80b205614610649578063dd62ed3e1461065e578063df51d46b14610685578063fb276fcf1461069d575b600080fd5b34801561017a57600080fd5b5061018f600160a060020a03600435166106be565b60408051918252519081900360200190f35b3480156101ad57600080fd5b506101b66107ac565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b5061024f600160a060020a0360043516602435610842565b604080519115158252519081900360200190f35b34801561026f57600080fd5b50604080516020600460443581810135838102808601850190965280855261024f958335600160a060020a039081169660248035909216963696956064959294930192829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108e19650505050505050565b34801561031357600080fd5b50610328600160a060020a0360043516610d61565b005b34801561033657600080fd5b5061018f610da7565b34801561034b57600080fd5b5061024f600160a060020a0360043581169060243516604435610dad565b34801561037557600080fd5b5061037e610f61565b6040805160ff9092168252519081900360200190f35b3480156103a057600080fd5b50610328610f6a565b3480156103b557600080fd5b5061024f600435610f9e565b3480156103cd57600080fd5b5061024f611084565b3480156103e257600080fd5b5061018f600160a060020a036004351661108d565b34801561040357600080fd5b5061024f600160a060020a036004351660243561112c565b34801561042757600080fd5b5061018f600160a060020a0360043516611256565b34801561044857600080fd5b506104516112c4565b60408051600160a060020a039092168252519081900360200190f35b34801561047957600080fd5b506101b66112d3565b34801561048e57600080fd5b5061024f600435611331565b3480156104a657600080fd5b5061024f600160a060020a03600435166024356113de565b3480156104ca57600080fd5b5060408051602060046024803582810135848102808701860190975280865261024f968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506114df9650505050505050565b34801561056657600080fd5b5061057b600160a060020a036004351661185d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b757818101518382015260200161059f565b505050509050019250505060405180910390f35b3480156105d757600080fd5b5061057b600160a060020a036004351661194f565b3480156105f857600080fd5b506103286004356119d2565b34801561061057600080fd5b50610328600160a060020a0360043516611a02565b34801561063157600080fd5b5061024f600160a060020a0360043516602435611b9f565b34801561065557600080fd5b50610328611beb565b34801561066a57600080fd5b5061018f600160a060020a0360043581169060243516611c7a565b34801561069157600080fd5b50610328600435611ca5565b3480156106a957600080fd5b5061018f600160a060020a0360043516611cd5565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a0384166000908152600760205260409020805461073f9291908490811061072657fe5b9060005260206000200154611d0a90919063ffffffff16565b600b5461075390429063ffffffff611d0a16565b1061079e57600160a060020a0383166000908152600860205260409020805461079b91908390811061078157fe5b906000526020600020015483611d0a90919063ffffffff16565b91505b6001016106d9565b50919050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505090505b90565b600082600160a060020a038116151561085a57600080fd5b3360009081526009602052604081205411156108795761087933611d20565b336000818152600660209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000808086600160a060020a03811615156108fb57600080fd5b86600160a060020a038116151561091157600080fd5b865186511461091f57600080fd5b600160a060020a03891660009081526009602052604081205411156109475761094789611d20565b60009350600092505b855184101561098e57610981868581518110151561096a57fe5b60209081029091010151849063ffffffff611d0a16565b6001909401939250610950565b600160a060020a03891660009081526005602052604090205483118015906109b7575060008310155b80156109e65750600160a060020a03891660009081526006602090815260408083203384529091529020548311155b15156109f157600080fd5b8651600160a060020a038916600090815260096020526040902054602a91610a1f919063ffffffff611d0a16565b1115610a2a57600080fd5b600093505b8651841015610d525760008685815181101515610a4857fe5b906020019060200201511115610c7d57610a9a8685815181101515610a6957fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff61218916565b600160a060020a038a166000908152600560205260409020558551610aff90879086908110610ac557fe5b6020908102909101810151600160a060020a038c16600090815260068352604080822033835290935291909120549063ffffffff61218916565b600160a060020a03808b166000908152600660209081526040808320338452825280832094909455918b1681526009825282812054600790925291909120600190910190610b4d908261219b565b50600160a060020a0388166000908152600960209081526040808320546008909252909120600190910190610b82908261219b565b50610bcf600a54610bc3600b54610bb78b89815181101515610ba057fe5b60209081029091010151429063ffffffff611d0a16565b9063ffffffff611d0a16565b9063ffffffff61218916565b600160a060020a038916600090815260076020908152604080832060099092529091205481548110610bfd57fe5b6000918252602090912001558551869085908110610c1757fe5b6020908102909101810151600160a060020a038a166000908152600883526040808220600990945290205482549192918110610c4f57fe5b6000918252602080832090910192909255600160a060020a038a168152600990915260409020805460010190555b87600160a060020a031689600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e8987815181101515610cc057fe5b906020019060200201518988815181101515610cd857fe5b602090810290910181015160408051938452918301528051918290030190a387600160a060020a031689600160a060020a031660008051602061222a8339815191528887815181101515610d2857fe5b906020019060200201516040518082815260200191505060405180910390a3600190930192610a2f565b50600198975050505050505050565b600054600160a060020a03163314610d7857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600083600160a060020a0381161515610dc557600080fd5b83600160a060020a0381161515610ddb57600080fd5b600160a060020a0386166000908152600960205260408120541115610e0357610e0386611d20565b600160a060020a0386166000908152600560205260409020548411801590610e2c575060008410155b8015610e5b5750600160a060020a03861660009081526006602090815260408083203384529091529020548411155b1515610e6657600080fd5b600160a060020a0386166000908152600660209081526040808320338452909152902054610e9a908563ffffffff61218916565b600160a060020a038716600081815260066020908152604080832033845282528083209490945591815260059091522054610edb908563ffffffff61218916565b600160a060020a038088166000908152600560205260408082209390935590871681522054610f10908563ffffffff611d0a16565b600160a060020a0380871660008181526005602090815260409182902094909455805188815290519193928a169260008051602061222a83398151915292918290030190a350600195945050505050565b60035460ff1690565b600054600160a060020a03163314610f8157600080fd5b600c5460ff161515610f9257600080fd5b600c805460ff19169055565b60008054600160a060020a03163314610fb657600080fd5b336000908152600960205260408120541115610fd557610fd533611d20565b336000908152600560205260409020548211801590610ff5575060008210155b151561100057600080fd5b33600090815260056020526040902054611020908363ffffffff61218916565b33600090815260056020526040902055600454611043908363ffffffff61218916565b60045560408051838152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2506001919050565b600c5460ff1690565b6000805b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a038416600090815260076020526040902080546110de9291908490811061072657fe5b600b546110f290429063ffffffff611d0a16565b101561112457600160a060020a0383166000908152600860205260409020805461112191908390811061078157fe5b91505b600101611091565b600082600160a060020a038116151561114457600080fd5b336000908152600660209081526040808320600160a060020a0388168452909152902054831061119757336000908152600660209081526040808320600160a060020a03881684529091528120556111f0565b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff61218916565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600160a060020a038316600090815260086020526040902080546112ba91908390811061078157fe5b9150600101611271565b600054600160a060020a031681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a060020a0316331461134957600080fd5b600c5460ff16151561135a57600080fd5b3360009081526005602052604090205461137a908363ffffffff611d0a16565b3360009081526005602052604090205560045461139d908363ffffffff611d0a16565b60045560408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001919050565b600082600160a060020a03811615156113f657600080fd5b3360009081526009602052604081205411156114155761141533611d20565b336000908152600560205260409020548311801590611435575060008310155b151561144057600080fd5b33600090815260056020526040902054611460908463ffffffff61218916565b3360009081526005602052604080822092909255600160a060020a03861681522054611492908463ffffffff611d0a16565b600160a060020a03851660008181526005602090815260409182902093909355805186815290519192339260008051602061222a8339815191529281900390910190a35060019392505050565b6000808085600160a060020a03811615156114f957600080fd5b855185511461150757600080fd5b3360009081526009602052604081205411156115265761152633611d20565b60009250600091505b845183101561156d57611560858481518110151561154957fe5b60209081029091010151839063ffffffff611d0a16565b600190930192915061152f565b33600090815260056020526040902054821180159061158d575060008210155b151561159857600080fd5b8551600160a060020a038816600090815260096020526040902054602a916115c6919063ffffffff611d0a16565b11156115d157600080fd5b600092505b855183101561185057600085848151811015156115ef57fe5b90602001906020020151111561177b57611638858481518110151561161057fe5b602090810290910181015133600090815260059092526040909120549063ffffffff61218916565b33600090815260056020908152604080832093909355600160a060020a038a1682526009815282822054600790915291902060019091019061167a908261219b565b50600160a060020a03871660009081526009602090815260408083205460089092529091206001909101906116af908261219b565b506116cd600a54610bc3600b54610bb78a88815181101515610ba057fe5b600160a060020a0388166000908152600760209081526040808320600990925290912054815481106116fb57fe5b600091825260209091200155845185908490811061171557fe5b6020908102909101810151600160a060020a038916600090815260088352604080822060099094529020548254919291811061174d57fe5b6000918252602080832090910192909255600160a060020a0389168152600990915260409020805460010190555b86600160a060020a031633600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e88868151811015156117be57fe5b9060200190602002015188878151811015156117d657fe5b602090810290910181015160408051938452918301528051918290030190a386600160a060020a031633600160a060020a031660008051602061222a833981519152878681518110151561182657fe5b906020019060200201516040518082815260200191505060405180910390a36001909201916115d6565b5060019695505050505050565b606060008183600160a060020a038116151561187857600080fd5b600092506009600086600160a060020a0316600160a060020a03168152602001908152602001600020546040519080825280602002602001820160405280156118cb578160200160208202803883390190505b5091505b600160a060020a03851660009081526009602052604090205483101561194757600b54600a54600160a060020a038716600090815260076020526040902080546119249392610bc39290918890811061072657fe5b828481518110151561193257fe5b602090810290910101526001909201916118cf565b509392505050565b606081600160a060020a038116151561196757600080fd5b600160a060020a038316600090815260086020908152604091829020805483518184028101840190945280845290918301828280156119c557602002820191906000526020600020905b8154815260200190600101908083116119b1575b5050505050915050919050565b600054600160a060020a031633146119e957600080fd5b600a546119fc908263ffffffff611d0a16565b600a5550565b600080548190600160a060020a03163314611a1c57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5051905060008111611abb57600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50511515611b5a57600080fd5b6040805182815290513391600160a060020a038616917f5d8daa04d680e083e2ab17a35494ba9f290f554edf76a78f0103a8a599b5c4249181900360200190a3505050565b600082600160a060020a0381161515611bb757600080fd5b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff611d0a16565b60008054600160a060020a03163314611c0357600080fd5b50303160008111611c1357600080fd5b604051339082156108fc029083906000818181858888f19350505050158015611c40573d6000803e3d6000fd5b5060408051828152905133917faea7a96dc17068a25e51e08f8ed45b86bd34b10af65af8e757af57b7e7b9e55d919081900360200190a250565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b600054600160a060020a03163314611cbc57600080fd5b600b54611ccf908263ffffffff611d0a16565b600b5550565b600081600160a060020a0381161515611ced57600080fd5b5050600160a060020a031660009081526009602052604090205490565b600082820183811015611d1957fe5b9392505050565b6000806060806060806060806000975060009650600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611d83578160200160208202803883390190505b509350600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611dd5578160200160208202803883390190505b50600160a060020a038a166000908152600760209081526040918290208054835181840281018401909452808452939650919290830182828015611e3857602002820191906000526020600020905b815481526020019060010190808311611e24575b50505050509550600860008a600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611eae57602002820191906000526020600020905b815481526020019060010190808311611e9a575b505050505094505b600160a060020a03891660009081526009602052604090205488101561203d57611f00600a54878a815181101515611eea57fe5b602090810290910101519063ffffffff611d0a16565b600b54611f1490429063ffffffff611d0a16565b10611fcb57611f5b8589815181101515611f2a57fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff611d0a16565b600160a060020a038a1660008181526005602052604090209190915585517f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e39087908b908110611fa757fe5b906020019060200201516040518082815260200191505060405180910390a2612032565b8588815181101515611fd957fe5b906020019060200201518488815181101515611ff157fe5b60209081029091010152845185908990811061200957fe5b90602001906020020151838881518110151561202157fe5b602090810290910101526001909601955b600190970196611eb6565b86604051908082528060200260200182016040528015612067578160200160208202803883390190505b50915086604051908082528060200260200182016040528015612094578160200160208202803883390190505b509050600097505b8688101561210f5783888151811015156120b257fe5b9060200190602002015182898151811015156120ca57fe5b6020908102909101015282518390899081106120e257fe5b9060200190602002015181898151811015156120fa57fe5b6020908102909101015260019097019661209c565b600160a060020a03891660009081526007602090815260409091208351612138928501906121c4565b50600160a060020a03891660009081526008602090815260409091208251612162928401906121c4565b505050600160a060020a039096166000908152600960205260409020939093555050505050565b60008183101561219557fe5b50900390565b8154818355818111156121bf576000838152602090206121bf91810190830161220f565b505050565b8280548282559060005260206000209081019282156121ff579160200282015b828111156121ff5782518255916020019190600101906121e4565b5061220b92915061220f565b5090565b61083f91905b8082111561220b57600081556001016122155600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582004e327a4db376800f1cf8fb357f9a1addb8dd7b973f7aca43d086a8e69281caa0029