Address Details

0x12a5A2f27bc1eA474518f41A829B60b945585c97

Deprecated

KKUB Wrapped KUB (KKUB) Last Balance Update: Block # 7867266
Created by 0xc124–1571c5 at 0x72b2–8dae6c

Balance

31.253538092784110253 KUB

(@ /KUB)

Fetching tokens...

Contract name:
KKUB




Optimization enabled
true
Compiler version
v0.6.6+commit.6c089d02




Optimization runs
200
EVM Version
default

Constructor Arguments

00000000000000000000000002d93caa46b27bf23c7f38fa22995eb7bb4cc713000000000000000000000000c7fbada38196361a24b9854f59eed294aea7d354

Arg [0] (address) : 0x02d93caa46b27bf23c7f38fa22995eb7bb4cc713
Arg [1] (address) : 0xc7fbada38196361a24b9854f59eed294aea7d354

              

Contract source code

/**
* Submitted for verification at blockscout.com on 2021-05-26 11:26:23.172197Z
*/
pragma solidity 0.6.6;
interface IAdminAsset {
function isSuperAdmin(address _addr, string calldata _token) external view returns (bool);
}
interface IKYC {
function kycsLevel(address _addr) external view returns (uint256);
}
interface IKAP20 {
event Transfer(address indexed from, address indexed to, uint256 tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
function totalSupply() external view returns (uint256);
function balanceOf(address tokenOwner) external view returns (uint256 balance);
function allowance(address tokenOwner, address spender) external view returns (uint256 remaining);
function transfer(address to, uint256 tokens) external returns (bool success);
function approve(address spender, uint256 tokens) external returns (bool success);
function transferFrom(address from, address to, uint256 tokens) external returns (bool success);
function getOwner() external view returns (address);
function batchTransfer(address[] calldata _from, address[] calldata _to, uint256[] calldata _value) external returns (bool success);
function adminTransfer(address _from, address _to, uint256 _value) external returns (bool success);
}
contract KKUB is IKAP20 {
string public name = "Wrapped KUB";
string public symbol = "KKUB";
uint8 public decimals = 18;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed tokenOwner, address indexed spender, uint256 value);
event Deposit(address indexed dst, uint256 value);
event Withdrawal(address indexed src, uint256 value);
event Paused(address account);
event Unpaused(address account);
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
mapping (address => bool) public blacklist;
IAdminAsset public admin;
IKYC public kyc;
bool public isActivatedOnlyKycAddress;
bool public paused;
modifier onlySuperAdmin() {
require(admin.isSuperAdmin(msg.sender, symbol), "Restricted only super admin");
_;
}
modifier whenNotPaused() {
require(!paused, "Pausable: paused");
_;
}
modifier whenPaused() {
require(paused, "Pausable: not paused");
_;
}
constructor(address _admin, address _kyc) public {
admin = IAdminAsset(_admin);
kyc = IKYC(_kyc);
}
function setKYC(address _kyc) external onlySuperAdmin {
kyc = IKYC(_kyc);
}
function activateOnlyKycAddress() external onlySuperAdmin {
isActivatedOnlyKycAddress = true;
}
function getOwner() external view override returns (address) {
return address(admin);
}
fallback() external payable {
deposit();
}
receive() external payable {
deposit();
}
function deposit() public whenNotPaused payable {
balances[msg.sender] += msg.value;
emit Deposit(msg.sender, msg.value);
emit Transfer(address(0), msg.sender, msg.value);
}
function withdraw(uint256 _value) public whenNotPaused {
require(!blacklist[msg.sender], "Address is in the blacklist");
_withdraw(_value, msg.sender);
}
function withdrawAdmin(uint256 _value, address _addr) public onlySuperAdmin {
_withdraw(_value, _addr);
}
function _withdraw(uint256 _value, address _addr) internal {
require(balances[_addr] >= _value);
balances[_addr] -= _value;
payable(_addr).transfer(_value);
emit Withdrawal(_addr, _value);
emit Transfer(_addr, address(0), _value);
}
function totalSupply() public view override returns (uint256) {
return address(this).balance;
}
function balanceOf(address _addr) public view override returns (uint256) {
return balances[_addr];
}
function allowance(address _owner, address _spender) public view override returns (uint256) {
return allowed[_owner][_spender];
}
function approve(address _spender, uint256 _value) public override whenNotPaused returns (bool) {
require(!blacklist[msg.sender], "Address is in the blacklist");
_approve(msg.sender, _spender, _value);
return true;
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "KAP20: approve from the zero address");
require(spender != address(0), "KAP20: approve to the zero address");
allowed[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function transfer(address _to, uint256 _value) public override whenNotPaused returns (bool) {
require(_value <= balances[msg.sender], "Insufficient Balance");
require(blacklist[msg.sender] == false && blacklist[_to] == false, "Address is in the blacklist");
balances[msg.sender] -= _value;
balances[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(
address _from,
address _to,
uint256 _value
) public override whenNotPaused returns (bool) {
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
require(blacklist[_from] == false && blacklist[_to] == false, "Address is in the blacklist");
balances[_from] -= _value;
balances[_to] += _value;
allowed[_from][msg.sender] -= _value;
emit Transfer(_from, _to, _value);
return true;
}
function batchTransfer(
address[] calldata _from,
address[] calldata _to,
uint256[] calldata _value
) external override onlySuperAdmin returns (bool) {
require(_from.length == _to.length && _to.length == _value.length, "Need all input in same length");
for (uint256 i = 0; i < _from.length; i++) {
if (isActivatedOnlyKycAddress == true) {
if (kyc.kycsLevel(_from[i]) <= 1 || kyc.kycsLevel(_to[i]) <= 1) {
continue;
}
}
if(blacklist[_from[i]] == true || blacklist[_to[i]] == true){
continue;
}
if (balances[_from[i]] >= _value[i]) {
balances[_from[i]] -= _value[i];
balances[_to[i]] += _value[i];
emit Transfer(_from[i], _to[i], _value[i]);
}
}
return true;
}
function adminTransfer(
address _from,
address _to,
uint256 _value
) external override onlySuperAdmin returns (bool) {
if (isActivatedOnlyKycAddress == true) {
require(kyc.kycsLevel(_from) > 1 && kyc.kycsLevel(_to) > 1, "only kyc address admin can control");
}
require(balances[_from] >= _value);
balances[_from] -= _value;
balances[_to] += _value;
emit Transfer(_from, _to, _value);
return true;
}
function pause() external onlySuperAdmin whenNotPaused {
paused = true;
emit Paused(msg.sender);
}
function unpause() external onlySuperAdmin whenPaused {
paused = false;
emit Unpaused(msg.sender);
}
function addBlacklist(address _addr) external onlySuperAdmin {
blacklist[_addr] = true;
}
function revokeBlacklist(address _addr) external onlySuperAdmin {
blacklist[_addr] = false;
}
}

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_admin","internalType":"address"},{"type":"address","name":"_kyc","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"tokenOwner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"activateOnlyKycAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addBlacklist","inputs":[{"type":"address","name":"_addr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IAdminAsset"}],"name":"admin","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"adminTransfer","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"batchTransfer","inputs":[{"type":"address[]","name":"_from","internalType":"address[]"},{"type":"address[]","name":"_to","internalType":"address[]"},{"type":"uint256[]","name":"_value","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"blacklist","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"deposit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isActivatedOnlyKycAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IKYC"}],"name":"kyc","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pause","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeBlacklist","inputs":[{"type":"address","name":"_addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setKYC","inputs":[{"type":"address","name":"_kyc","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpause","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawAdmin","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"address","name":"_addr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
            

Contract Byte Code

0x6080604052600436106101855760003560e01c8063893d20e8116100d1578063a9059cbb1161008a578063dd62ed3e11610064578063dd62ed3e14610683578063de9c2a6b146106be578063f851a440146106d3578063f9f92be4146106e857610194565b8063a9059cbb14610607578063d0e30db014610194578063da72c1e81461064057610194565b8063893d20e8146105315780638e39103c1461056257806390d6b45f1461059557806395d89b41146105aa5780639cfe42da146105bf578063a1d5ec4b146105f257610194565b80632e1a7d4d1161013e578063483a83df11610118578063483a83df146104a15780635c975abb146104d457806370a08231146104e95780638456cb591461051c57610194565b80632e1a7d4d14610437578063313ce567146104615780633f4ba83a1461048c57610194565b806306fdde031461019c578063095ea7b31461022657806313d06a4c1461027357806318160ddd146103945780631e7835d3146103bb57806323b872dd146103f457610194565b366101945761019261071b565b005b61019261071b565b3480156101a857600080fd5b506101b16107e2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101eb5781810151838201526020016101d3565b50505050905090810190601f1680156102185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023257600080fd5b5061025f6004803603604081101561024957600080fd5b506001600160a01b038135169060200135610870565b604080519115158252519081900360200190f35b34801561027f57600080fd5b5061025f6004803603606081101561029657600080fd5b8101906020810181356401000000008111156102b157600080fd5b8201836020820111156102c357600080fd5b803590602001918460208302840111640100000000831117156102e557600080fd5b91939092909160208101903564010000000081111561030357600080fd5b82018360208201111561031557600080fd5b8035906020019184602083028401116401000000008311171561033757600080fd5b91939092909160208101903564010000000081111561035557600080fd5b82018360208201111561036757600080fd5b8035906020019184602083028401116401000000008311171561038957600080fd5b50909250905061092c565b3480156103a057600080fd5b506103a9610e63565b60408051918252519081900360200190f35b3480156103c757600080fd5b50610192600480360360408110156103de57600080fd5b50803590602001356001600160a01b0316610e67565b34801561040057600080fd5b5061025f6004803603606081101561041757600080fd5b506001600160a01b03813581169160208101359091169060400135610fa6565b34801561044357600080fd5b506101926004803603602081101561045a57600080fd5b5035611149565b34801561046d57600080fd5b506104766111fb565b6040805160ff9092168252519081900360200190f35b34801561049857600080fd5b50610192611204565b3480156104ad57600080fd5b50610192600480360360208110156104c457600080fd5b50356001600160a01b03166113cc565b3480156104e057600080fd5b5061025f61151f565b3480156104f557600080fd5b506103a96004803603602081101561050c57600080fd5b50356001600160a01b031661152f565b34801561052857600080fd5b5061019261154a565b34801561053d57600080fd5b50610546611715565b604080516001600160a01b039092168252519081900360200190f35b34801561056e57600080fd5b506101926004803603602081101561058557600080fd5b50356001600160a01b0316611724565b3480156105a157600080fd5b50610546611876565b3480156105b657600080fd5b506101b1611885565b3480156105cb57600080fd5b50610192600480360360208110156105e257600080fd5b50356001600160a01b03166118df565b3480156105fe57600080fd5b50610192611a34565b34801561061357600080fd5b5061025f6004803603604081101561062a57600080fd5b506001600160a01b038135169060200135611b7a565b34801561064c57600080fd5b5061025f6004803603606081101561066357600080fd5b506001600160a01b03813581169160208101359091169060400135611cfe565b34801561068f57600080fd5b506103a9600480360360408110156106a657600080fd5b506001600160a01b038135811691602001351661200c565b3480156106ca57600080fd5b5061025f612037565b3480156106df57600080fd5b50610546612047565b3480156106f457600080fd5b5061025f6004803603602081101561070b57600080fd5b50356001600160a01b0316612056565b600754600160a81b900460ff161561076d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a260408051348152905133916000916000805160206122e08339815191529181900360200190a3565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108685780601f1061083d57610100808354040283529160200191610868565b820191906000526020600020905b81548152906001019060200180831161084b57829003601f168201915b505050505081565b600754600090600160a81b900460ff16156108c5576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526005602052604090205460ff1615610918576040805162461bcd60e51b815260206004820152601b602482015260008051602061227a833981519152604482015290519081900360640190fd5b61092333848461206b565b50600192915050565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526000966001600160a01b031695632b98ccf0959293929091606490910190849080156109d65780601f106109ab576101008083540402835291602001916109d6565b820191906000526020600020905b8154815290600101906020018083116109b957829003601f168201915b5050935050505060206040518083038186803b1580156109f557600080fd5b505afa158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051610a60576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b8584148015610a6e57508382145b610abf576040805162461bcd60e51b815260206004820152601d60248201527f4e65656420616c6c20696e70757420696e2073616d65206c656e677468000000604482015290519081900360640190fd5b60005b86811015610e5557600754600160a01b900460ff16151560011415610c3a576007546001906001600160a01b0316631bc66a348a8a85818110610b0157fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b5757600080fd5b505afa158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b5051111580610c3057506007546001906001600160a01b0316631bc66a34888885818110610bab57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610c0157600080fd5b505afa158015610c15573d6000803e3d6000fd5b505050506040513d6020811015610c2b57600080fd5b505111155b15610c3a57610e4d565b60056000898984818110610c4a57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054600160ff90911615151480610cbb575060056000878784818110610c8d57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054600160ff9091161515145b15610cc557610e4d565b838382818110610cd157fe5b90506020020135600360008a8a85818110610ce857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205410610e4d57838382818110610d2a57fe5b90506020020135600360008a8a85818110610d4157fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008282540392505081905550838382818110610d8a57fe5b9050602002013560036000888885818110610da157fe5b602090810292909201356001600160a01b03168352508101919091526040016000208054919091019055858582818110610dd757fe5b905060200201356001600160a01b03166001600160a01b0316888883818110610dfc57fe5b905060200201356001600160a01b03166001600160a01b03166000805160206122e0833981519152868685818110610e3057fe5b905060200201356040518082815260200191505060405180910390a35b600101610ac2565b506001979650505050505050565b4790565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf09593949193916064019084908015610f0e5780601f10610ee357610100808354040283529160200191610f0e565b820191906000526020600020905b815481529060010190602001808311610ef157829003601f168201915b5050935050505060206040518083038186803b158015610f2d57600080fd5b505afa158015610f41573d6000803e3d6000fd5b505050506040513d6020811015610f5757600080fd5b5051610f98576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b610fa28282612157565b5050565b600754600090600160a81b900460ff1615610ffb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205482111561102057600080fd5b6001600160a01b038416600090815260046020908152604080832033845290915290205482111561105057600080fd5b6001600160a01b03841660009081526005602052604090205460ff1615801561109257506001600160a01b03831660009081526005602052604090205460ff16155b6110d1576040805162461bcd60e51b815260206004820152601b602482015260008051602061227a833981519152604482015290519081900360640190fd5b6001600160a01b0380851660008181526003602090815260408083208054889003905593871680835284832080548801905583835260048252848320338452825291849020805487900390558351868152935191936000805160206122e0833981519152929081900390910190a35060019392505050565b600754600160a81b900460ff161561119b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526005602052604090205460ff16156111ee576040805162461bcd60e51b815260206004820152601b602482015260008051602061227a833981519152604482015290519081900360640190fd5b6111f88133612157565b50565b60025460ff1681565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156112ab5780601f10611280576101008083540402835291602001916112ab565b820191906000526020600020905b81548152906001019060200180831161128e57829003601f168201915b5050935050505060206040518083038186803b1580156112ca57600080fd5b505afa1580156112de573d6000803e3d6000fd5b505050506040513d60208110156112f457600080fd5b5051611335576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b600754600160a81b900460ff1661138a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6007805460ff60a81b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156114735780601f1061144857610100808354040283529160200191611473565b820191906000526020600020905b81548152906001019060200180831161145657829003601f168201915b5050935050505060206040518083038186803b15801561149257600080fd5b505afa1580156114a6573d6000803e3d6000fd5b505050506040513d60208110156114bc57600080fd5b50516114fd576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600754600160a81b900460ff1681565b6001600160a01b031660009081526003602052604090205490565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156115f15780601f106115c6576101008083540402835291602001916115f1565b820191906000526020600020905b8154815290600101906020018083116115d457829003601f168201915b5050935050505060206040518083038186803b15801561161057600080fd5b505afa158015611624573d6000803e3d6000fd5b505050506040513d602081101561163a57600080fd5b505161167b576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b600754600160a81b900460ff16156116cd576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6007805460ff60a81b1916600160a81b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6006546001600160a01b031690565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156117cb5780601f106117a0576101008083540402835291602001916117cb565b820191906000526020600020905b8154815290600101906020018083116117ae57829003601f168201915b5050935050505060206040518083038186803b1580156117ea57600080fd5b505afa1580156117fe573d6000803e3d6000fd5b505050506040513d602081101561181457600080fd5b5051611855576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6007546001600160a01b031681565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108685780601f1061083d57610100808354040283529160200191610868565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156119865780601f1061195b57610100808354040283529160200191611986565b820191906000526020600020905b81548152906001019060200180831161196957829003601f168201915b5050935050505060206040518083038186803b1580156119a557600080fd5b505afa1580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b5051611a10576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf09593949193916064019084908015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050935050505060206040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d6020811015611b2457600080fd5b5051611b65576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b6007805460ff60a01b1916600160a01b179055565b600754600090600160a81b900460ff1615611bcf576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b33600090815260036020526040902054821115611c2a576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b3360009081526005602052604090205460ff16158015611c6357506001600160a01b03831660009081526005602052604090205460ff16155b611ca2576040805162461bcd60e51b815260206004820152601b602482015260008051602061227a833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320805487900390556001600160a01b03871680845292819020805487019055805186815290519293926000805160206122e0833981519152929181900390910190a350600192915050565b600654604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526000966001600160a01b031695632b98ccf095929392909160649091019084908015611da85780601f10611d7d57610100808354040283529160200191611da8565b820191906000526020600020905b815481529060010190602001808311611d8b57829003601f168201915b5050935050505060206040518083038186803b158015611dc757600080fd5b505afa158015611ddb573d6000803e3d6000fd5b505050506040513d6020811015611df157600080fd5b5051611e32576040805162461bcd60e51b815260206004820152601b6024820152600080516020612238833981519152604482015290519081900360640190fd5b600754600160a01b900460ff16151560011415611f8857600754604080516306f19a8d60e21b81526001600160a01b03878116600483015291516001939290921691631bc66a3491602480820192602092909190829003018186803b158015611e9a57600080fd5b505afa158015611eae573d6000803e3d6000fd5b505050506040513d6020811015611ec457600080fd5b5051118015611f4d5750600754604080516306f19a8d60e21b81526001600160a01b03868116600483015291516001939290921691631bc66a3491602480820192602092909190829003018186803b158015611f1f57600080fd5b505afa158015611f33573d6000803e3d6000fd5b505050506040513d6020811015611f4957600080fd5b5051115b611f885760405162461bcd60e51b815260040180806020018281038252602281526020018061229a6022913960400191505060405180910390fd5b6001600160a01b038416600090815260036020526040902054821115611fad57600080fd5b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191936000805160206122e0833981519152929081900390910190a35060019392505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600754600160a01b900460ff1681565b6006546001600160a01b031681565b60056020526000908152604090205460ff1681565b6001600160a01b0383166120b05760405162461bcd60e51b81526004018080602001828103825260248152602001806122bc6024913960400191505060405180910390fd5b6001600160a01b0382166120f55760405162461bcd60e51b81526004018080602001828103825260228152602001806122586022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03811660009081526003602052604090205482111561217c57600080fd5b6001600160a01b038116600081815260036020526040808220805486900390555184156108fc0291859190818181858888f193505050501580156121c4573d6000803e3d6000fd5b506040805183815290516001600160a01b038316917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a26040805183815290516000916001600160a01b038416916000805160206122e08339815191529181900360200190a3505056fe52657374726963746564206f6e6c792073757065722061646d696e00000000004b415032303a20617070726f766520746f20746865207a65726f20616464726573734164647265737320697320696e2074686520626c61636b6c69737400000000006f6e6c79206b796320616464726573732061646d696e2063616e20636f6e74726f6c4b415032303a20617070726f76652066726f6d20746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209f7c43d9051d78cba3370d800679ba059dfb032ac5571179044553f379a931f864736f6c63430006060033