Address Details

0xc6677E014D7e2F45fB44E8036C014B916C0492a1

Deprecated

KDAI Last Balance Update: Block # 7865429
Created by 0xc124–1571c5 at 0xed32–905484

Balance

0 KUB

(@ /KUB)

Fetching tokens...

Contract name:
KDAI




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-29 10:35:27.413026Z
*/
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);
event Paused(address _addr);
event Unpaused(address _addr);
event AddBlacklist(address indexed _blacklistAddr, address indexed _caller);
event RevokeBlacklist(address indexed _blacklistAddr, address indexed _caller);
function totalSupply() external view returns (uint256);
function paused() external view returns (bool);
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 adminTransfer(address _from, address _to, uint256 _value) external returns (bool success);
function pause() external;
function unpause() external;
function addBlacklist(address _addr) external;
function revokeBlacklist(address _addr) external;
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
}
contract KDAI is IKAP20 {
using SafeMath for uint256;
string public name = "Bitkub-Peg DAI";
string public symbol = "KDAI";
uint8 public decimals = 18;
uint256 public override totalSupply;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed tokenOwner, address indexed spender, uint256 value);
event Paused(address account);
event Unpaused(address account);
event AddBlacklist(address indexed _blacklistAddr, address indexed _caller);
event RevokeBlacklist(address indexed _blacklistAddr, address indexed _caller);
mapping (address => uint) balances;
mapping (address => mapping (address => uint)) allowed;
mapping (address => bool) public blacklist;
IAdminAsset public admin;
IKYC public kyc;
bool public isActivatedOnlyKycAddress;
bool public override 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");
_;
}
modifier notInBlacklist(address _addr) {
require(!blacklist[_addr], "Address is in the blacklist");
_;
}
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);
}
function mint(address _toAddr, uint256 _amount) external onlySuperAdmin returns (bool) {
require(_toAddr != address(0), "KAP20: mint to zero address");
totalSupply = totalSupply.add(_amount);
balances[_toAddr] = balances[_toAddr].add(_amount);
emit Transfer(address(0), _toAddr, _amount);
return true;
}
function burn(address _fromAddr, uint256 _amount) external onlySuperAdmin returns (bool) {
require(_fromAddr != address(0), "KAP20: burn from zero address");
require(balances[_fromAddr] >= _amount, "KAP20: burn amount exceeds balance");
totalSupply = totalSupply.sub(_amount);
balances[_fromAddr] = balances[_fromAddr].sub(_amount);
emit Transfer(_fromAddr, address(0), _amount);
return true;
}
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 notInBlacklist(msg.sender) returns (bool) {
_approve(msg.sender, _spender, _value);
return true;
}
function increaseAllowance(address _spender, uint256 _addedValue) public whenNotPaused notInBlacklist(msg.sender) returns (bool) {
_approve(msg.sender, _spender, allowed[msg.sender][_spender].add(_addedValue));
return true;
}
function decreaseAllowance(address _spender, uint256 _subtractedValue) public whenNotPaused notInBlacklist(msg.sender) returns (bool) {
_approve(msg.sender, _spender, allowed[msg.sender][_spender].sub(_subtractedValue, "KAP20: decreased allowance below zero"));
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(_to != address(0), "KAP20: transfer to zero address");
require(blacklist[msg.sender] == false && blacklist[_to] == false, "Address is in the blacklist");
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_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(_to != address(0), "KAP20: transfer to zero address");
require(blacklist[_from] == false && blacklist[_to] == false, "Address is in the blacklist");
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
function adminTransfer(
address _from,
address _to,
uint256 _value
) external override onlySuperAdmin returns (bool) {
if (isActivatedOnlyKycAddress) {
require(kyc.kycsLevel(_from) > 1 && kyc.kycsLevel(_to) > 1, "Admin can control only KYC Address");
}
require(balances[_from] >= _value, "KAP20: transfer amount exceed balance");
require(_to != address(0), "KAP20: transfer to zero address");
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(_from, _to, _value);
return true;
}
function pause() external override onlySuperAdmin whenNotPaused {
paused = true;
emit Paused(msg.sender);
}
function unpause() external override onlySuperAdmin whenPaused {
paused = false;
emit Unpaused(msg.sender);
}
function addBlacklist(address _addr) external override onlySuperAdmin {
blacklist[_addr] = true;
emit AddBlacklist(_addr, msg.sender);
}
function revokeBlacklist(address _addr) external override onlySuperAdmin {
blacklist[_addr] = false;
emit RevokeBlacklist(_addr, msg.sender);
}
}

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_admin","internalType":"address"},{"type":"address","name":"_kyc","internalType":"address"}]},{"type":"event","name":"AddBlacklist","inputs":[{"type":"address","name":"_blacklistAddr","internalType":"address","indexed":true},{"type":"address","name":"_caller","internalType":"address","indexed":true}],"anonymous":false},{"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":"Paused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"RevokeBlacklist","inputs":[{"type":"address","name":"_blacklistAddr","internalType":"address","indexed":true},{"type":"address","name":"_caller","internalType":"address","indexed":true}],"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":"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":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"blacklist","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burn","inputs":[{"type":"address","name":"_fromAddr","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_addedValue","internalType":"uint256"}]},{"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":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"address","name":"_toAddr","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"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":[]}]
            

Contract Byte Code

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638e39103c116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146104be578063de9c2a6b146104ec578063f851a440146104f4578063f9f92be4146104fc5761018e565b8063a457c2d714610430578063a9059cbb1461045c578063da72c1e8146104885761018e565b80638e39103c146103a057806390d6b45f146103c657806395d89b41146103ce5780639cfe42da146103d65780639dc29fac146103fc578063a1d5ec4b146104285761018e565b80633f4ba83a1161014b5780635c975abb116101255780635c975abb1461034657806370a082311461034e5780638456cb5914610374578063893d20e81461037c5761018e565b80633f4ba83a146102ea57806340c10f19146102f4578063483a83df146103205761018e565b806306fdde0314610193578063095ea7b31461021057806318160ddd1461025057806323b872dd1461026a578063313ce567146102a057806339509351146102be575b600080fd5b61019b610522565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d55781810151838201526020016101bd565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023c6004803603604081101561022657600080fd5b506001600160a01b0381351690602001356105b0565b604080519115158252519081900360200190f35b61025861066d565b60408051918252519081900360200190f35b61023c6004803603606081101561028057600080fd5b506001600160a01b03813581169160208101359091169060400135610673565b6102a86108f4565b6040805160ff9092168252519081900360200190f35b61023c600480360360408110156102d457600080fd5b506001600160a01b0381351690602001356108fd565b6102f26109e5565b005b61023c6004803603604081101561030a57600080fd5b506001600160a01b038135169060200135610bad565b6102f26004803603602081101561033657600080fd5b50356001600160a01b0316610dc6565b61023c610f19565b6102586004803603602081101561036457600080fd5b50356001600160a01b0316610f29565b6102f2610f44565b61038461110f565b604080516001600160a01b039092168252519081900360200190f35b6102f2600480360360208110156103b657600080fd5b50356001600160a01b031661111e565b61038461129a565b61019b6112a9565b6102f2600480360360208110156103ec57600080fd5b50356001600160a01b0316611303565b61023c6004803603604081101561041257600080fd5b506001600160a01b038135169060200135611482565b6102f26116f1565b61023c6004803603604081101561044657600080fd5b506001600160a01b038135169060200135611837565b61023c6004803603604081101561047257600080fd5b506001600160a01b038135169060200135611932565b61023c6004803603606081101561049e57600080fd5b506001600160a01b03813581169160208101359091169060400135611b53565b610258600480360360408110156104d457600080fd5b506001600160a01b0381358116916020013516611f37565b61023c611f62565b610384611f72565b61023c6004803603602081101561051257600080fd5b50356001600160a01b0316611f81565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105a85780601f1061057d576101008083540402835291602001916105a8565b820191906000526020600020905b81548152906001019060200180831161058b57829003601f168201915b505050505081565b600854600090600160a81b900460ff1615610605576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360008181526006602052604090205460ff1615610658576040805162461bcd60e51b815260206004820152601b602482015260008051602061225e833981519152604482015290519081900360640190fd5b610663338585611f96565b5060019392505050565b60035481565b600854600090600160a81b900460ff16156106c8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600460205260409020548211156106ed57600080fd5b6001600160a01b038416600090815260056020908152604080832033845290915290205482111561071d57600080fd5b6001600160a01b038316610778576040805162461bcd60e51b815260206004820152601f60248201527f4b415032303a207472616e7366657220746f207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b03841660009081526006602052604090205460ff161580156107ba57506001600160a01b03831660009081526006602052604090205460ff16155b6107f9576040805162461bcd60e51b815260206004820152601b602482015260008051602061225e833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260046020526040902054610822908363ffffffff61208216565b6001600160a01b038086166000908152600460205260408082209390935590851681522054610857908363ffffffff6120df16565b6001600160a01b03808516600090815260046020908152604080832094909455918716815260058252828120338252909152205461089b908363ffffffff61208216565b6001600160a01b03808616600081815260056020908152604080832033845282529182902094909455805186815290519287169391926000805160206122c7833981519152929181900390910190a35060019392505050565b60025460ff1681565b600854600090600160a81b900460ff1615610952576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360008181526006602052604090205460ff16156109a5576040805162461bcd60e51b815260206004820152601b602482015260008051602061225e833981519152604482015290519081900360640190fd5b3360008181526005602090815260408083206001600160a01b0389168452909152902054610663919086906109e0908763ffffffff6120df16565b611f96565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf09593949193916064019084908015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050935050505060206040518083038186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b5051610b16576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b600854600160a81b900460ff16610b6b576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6008805460ff60a81b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526000966001600160a01b031695632b98ccf095929392909160649091019084908015610c575780601f10610c2c57610100808354040283529160200191610c57565b820191906000526020600020905b815481529060010190602001808311610c3a57829003601f168201915b5050935050505060206040518083038186803b158015610c7657600080fd5b505afa158015610c8a573d6000803e3d6000fd5b505050506040513d6020811015610ca057600080fd5b5051610ce1576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b6001600160a01b038316610d3c576040805162461bcd60e51b815260206004820152601b60248201527f4b415032303a206d696e7420746f207a65726f20616464726573730000000000604482015290519081900360640190fd5b600354610d4f908363ffffffff6120df16565b6003556001600160a01b038316600090815260046020526040902054610d7b908363ffffffff6120df16565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391926000805160206122c78339815191529281900390910190a350600192915050565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf09593949193916064019084908015610e6d5780601f10610e4257610100808354040283529160200191610e6d565b820191906000526020600020905b815481529060010190602001808311610e5057829003601f168201915b5050935050505060206040518083038186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b5051610ef7576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600854600160a81b900460ff1681565b6001600160a01b031660009081526004602052604090205490565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf09593949193916064019084908015610feb5780601f10610fc057610100808354040283529160200191610feb565b820191906000526020600020905b815481529060010190602001808311610fce57829003601f168201915b5050935050505060206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b5051611075576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b600854600160a81b900460ff16156110c7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6008805460ff60a81b1916600160a81b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6007546001600160a01b031690565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156111c55780601f1061119a576101008083540402835291602001916111c5565b820191906000526020600020905b8154815290600101906020018083116111a857829003601f168201915b5050935050505060206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d602081101561120e57600080fd5b505161124f576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260066020526040808220805460ff19169055513392917f6690dc53a3b1d37db94233f7c004408862ea909761dc5760b0e925276754f87591a350565b6008546001600160a01b031681565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105a85780601f1061057d576101008083540402835291602001916105a8565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156113aa5780601f1061137f576101008083540402835291602001916113aa565b820191906000526020600020905b81548152906001019060200180831161138d57829003601f168201915b5050935050505060206040518083038186803b1580156113c957600080fd5b505afa1580156113dd573d6000803e3d6000fd5b505050506040513d60208110156113f357600080fd5b5051611434576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260066020526040808220805460ff19166001179055513392917fef674dcdab521405fef2bf4b5d2c6a6434e3ab02bc5a94fb89dd035704b83b0991a350565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526000966001600160a01b031695632b98ccf09592939290916064909101908490801561152c5780601f106115015761010080835404028352916020019161152c565b820191906000526020600020905b81548152906001019060200180831161150f57829003601f168201915b5050935050505060206040518083038186803b15801561154b57600080fd5b505afa15801561155f573d6000803e3d6000fd5b505050506040513d602081101561157557600080fd5b50516115b6576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b6001600160a01b038316611611576040805162461bcd60e51b815260206004820152601d60248201527f4b415032303a206275726e2066726f6d207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460205260409020548211156116685760405162461bcd60e51b81526004018080602001828103825260228152602001806121f86022913960400191505060405180910390fd5b60035461167b908363ffffffff61208216565b6003556001600160a01b0383166000908152600460205260409020546116a7908363ffffffff61208216565b6001600160a01b0384166000818152600460209081526040808320949094558351868152935191936000805160206122c7833981519152929081900390910190a350600192915050565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526001600160a01b0390961695632b98ccf095939491939160640190849080156117985780601f1061176d57610100808354040283529160200191611798565b820191906000526020600020905b81548152906001019060200180831161177b57829003601f168201915b5050935050505060206040518083038186803b1580156117b757600080fd5b505afa1580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b5051611822576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b6008805460ff60a01b1916600160a01b179055565b600854600090600160a81b900460ff161561188c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360008181526006602052604090205460ff16156118df576040805162461bcd60e51b815260206004820152601b602482015260008051602061225e833981519152604482015290519081900360640190fd5b61066333856109e08660405180606001604052806025815260200161227e602591393360009081526005602090815260408083206001600160a01b038e168452909152902054919063ffffffff61214016565b600854600090600160a81b900460ff1615611987576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b336000908152600460205260409020548211156119e2576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b6001600160a01b038316611a3d576040805162461bcd60e51b815260206004820152601f60248201527f4b415032303a207472616e7366657220746f207a65726f206164647265737300604482015290519081900360640190fd5b3360009081526006602052604090205460ff16158015611a7657506001600160a01b03831660009081526006602052604090205460ff16155b611ab5576040805162461bcd60e51b815260206004820152601b602482015260008051602061225e833981519152604482015290519081900360640190fd5b33600090815260046020526040902054611ad5908363ffffffff61208216565b33600090815260046020526040808220929092556001600160a01b03851681522054611b07908363ffffffff6120df16565b6001600160a01b0384166000818152600460209081526040918290209390935580518581529051919233926000805160206122c78339815191529281900390910190a350600192915050565b600754604080516302b98ccf60e41b815233600482018181526024830193845260018054600260001982841615610100020190911604604485018190526000966001600160a01b031695632b98ccf095929392909160649091019084908015611bfd5780601f10611bd257610100808354040283529160200191611bfd565b820191906000526020600020905b815481529060010190602001808311611be057829003601f168201915b5050935050505060206040518083038186803b158015611c1c57600080fd5b505afa158015611c30573d6000803e3d6000fd5b505050506040513d6020811015611c4657600080fd5b5051611c87576040805162461bcd60e51b815260206004820152601b60248201526000805160206121d8833981519152604482015290519081900360640190fd5b600854600160a01b900460ff1615611dd857600854604080516306f19a8d60e21b81526001600160a01b03878116600483015291516001939290921691631bc66a3491602480820192602092909190829003018186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d6020811015611d1457600080fd5b5051118015611d9d5750600854604080516306f19a8d60e21b81526001600160a01b03868116600483015291516001939290921691631bc66a3491602480820192602092909190829003018186803b158015611d6f57600080fd5b505afa158015611d83573d6000803e3d6000fd5b505050506040513d6020811015611d9957600080fd5b5051115b611dd85760405162461bcd60e51b815260040180806020018281038252602281526020018061223c6022913960400191505060405180910390fd5b6001600160a01b038416600090815260046020526040902054821115611e2f5760405162461bcd60e51b81526004018080602001828103825260258152602001806122e76025913960400191505060405180910390fd5b6001600160a01b038316611e8a576040805162461bcd60e51b815260206004820152601f60248201527f4b415032303a207472616e7366657220746f207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b038416600090815260046020526040902054611eb3908363ffffffff61208216565b6001600160a01b038086166000908152600460205260408082209390935590851681522054611ee8908363ffffffff6120df16565b6001600160a01b0380851660008181526004602090815260409182902094909455805186815290519193928816926000805160206122c783398151915292918290030190a35060019392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b600854600160a01b900460ff1681565b6007546001600160a01b031681565b60066020526000908152604090205460ff1681565b6001600160a01b038316611fdb5760405162461bcd60e51b81526004018080602001828103825260248152602001806122a36024913960400191505060405180910390fd5b6001600160a01b0382166120205760405162461bcd60e51b815260040180806020018281038252602281526020018061221a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828211156120d9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015612139576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600081848411156121cf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561219457818101518382015260200161217c565b50505050905090810190601f1680156121c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe52657374726963746564206f6e6c792073757065722061646d696e00000000004b415032303a206275726e20616d6f756e7420657863656564732062616c616e63654b415032303a20617070726f766520746f20746865207a65726f206164647265737341646d696e2063616e20636f6e74726f6c206f6e6c79204b594320416464726573734164647265737320697320696e2074686520626c61636b6c69737400000000004b415032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4b415032303a20617070726f76652066726f6d20746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4b415032303a207472616e7366657220616d6f756e74206578636565642062616c616e6365a2646970667358221220ff0c98e8533cda36cc83b135a664967c1d1384db63b14254cda5d1dbbc2f0ea264736f6c63430006060033