Oko contract explorer
Contract

Code for 0xf8e1…eda6 (SleepyShib)

Since block 13603500

Verified contract

  1. /**
  2. *Submitted for verification at Etherscan.io on 2021-11-08
  3. */
  4. /**
  5. *Submitted for verification at Etherscan.io on 2021-10-13
  6. */
  7. /**
  8. Sleepy-Shib $Sleepy-Shib
  9. Join Our Telegram: https://t.me/SleepyShib
  10. */
  11. pragma solidity ^0.8.4;
  12. // SPDX-License-Identifier: UNLICENSED
  13. abstract contract Context {
  14. function _msgSender() internal view virtual returns (address) {
  15. return msg.sender;
  16. }
  17. }
  18. interface IERC20 {
  19. function totalSupply() external view returns (uint256);
  20. function balanceOf(address account) external view returns (uint256);
  21. function transfer(address recipient, uint256 amount) external returns (bool);
  22. function allowance(address owner, address spender) external view returns (uint256);
  23. function approve(address spender, uint256 amount) external returns (bool);
  24. function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  25. event Transfer(address indexed from, address indexed to, uint256 value);
  26. event Approval(address indexed owner, address indexed spender, uint256 value);
  27. }
  28. library SafeMath {
  29. function add(uint256 a, uint256 b) internal pure returns (uint256) {
  30. uint256 c = a + b;
  31. require(c >= a, "SafeMath: addition overflow");
  32. return c;
  33. }
  34. function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  35. return sub(a, b, "SafeMath: subtraction overflow");
  36. }
  37. function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
  38. require(b <= a, errorMessage);
  39. uint256 c = a - b;
  40. return c;
  41. }
  42. function mul(uint256 a, uint256 b) internal pure returns (uint256) {
  43. if (a == 0) {
  44. return 0;
  45. }
  46. uint256 c = a * b;
  47. require(c / a == b, "SafeMath: multiplication overflow");
  48. return c;
  49. }
  50. function div(uint256 a, uint256 b) internal pure returns (uint256) {
  51. return div(a, b, "SafeMath: division by zero");
  52. }
  53. function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
  54. require(b > 0, errorMessage);
  55. uint256 c = a / b;
  56. return c;
  57. }
  58. }
  59. contract Ownable is Context {
  60. address private _owner;
  61. address private _previousOwner;
  62. event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  63. constructor () {
  64. address msgSender = _msgSender();
  65. _owner = msgSender;
  66. emit OwnershipTransferred(address(0), msgSender);
  67. }
  68. function owner() public view returns (address) {
  69. return _owner;
  70. }
  71. modifier onlyOwner() {
  72. require(_owner == _msgSender(), "Ownable: caller is not the owner");
  73. _;
  74. }
  75. function renounceOwnership() public virtual onlyOwner {
  76. emit OwnershipTransferred(_owner, address(0));
  77. _owner = address(0);
  78. }
  79. }
  80. interface IUniswapV2Factory {
  81. function createPair(address tokenA, address tokenB) external returns (address pair);
  82. }
  83. interface IUniswapV2Router02 {
  84. function swapExactTokensForETHSupportingFeeOnTransferTokens(
  85. uint amountIn,
  86. uint amountOutMin,
  87. address[] calldata path,
  88. address to,
  89. uint deadline
  90. ) external;
  91. function factory() external pure returns (address);
  92. function WETH() external pure returns (address);
  93. function addLiquidityETH(
  94. address token,
  95. uint amountTokenDesired,
  96. uint amountTokenMin,
  97. uint amountETHMin,
  98. address to,
  99. uint deadline
  100. ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
  101. }
  102. contract SleepyShib is Context, IERC20, Ownable {
  103. using SafeMath for uint256;
  104. mapping (address => uint256) private _rOwned;
  105. mapping (address => uint256) private _tOwned;
  106. mapping (address => mapping (address => uint256)) private _allowances;
  107. mapping (address => bool) private _isExcludedFromFee;
  108. mapping (address => bool) private bots;
  109. mapping (address => uint) private cooldown;
  110. uint256 private constant MAX = ~uint256(0);
  111. uint256 private constant _tTotal = 1000000000000000000 * 10**9;
  112. uint256 private _rTotal = (MAX - (MAX % _tTotal));
  113. uint256 private _tFeeTotal;
  114. uint256 private _feeAddr1;
  115. uint256 private _feeAddr2;
  116. address payable private _feeAddrWallet1;
  117. address payable private _feeAddrWallet2;
  118. string private constant _name = "Sleepy-Shib";
  119. string private constant _symbol = "Sleepy-Shib";
  120. uint8 private constant _decimals = 9;
  121. IUniswapV2Router02 private uniswapV2Router;
  122. address private uniswapV2Pair;
  123. bool private tradingOpen;
  124. bool private inSwap = false;
  125. bool private swapEnabled = false;
  126. bool private cooldownEnabled = false;
  127. uint256 private _maxTxAmount = _tTotal;
  128. event MaxTxAmountUpdated(uint _maxTxAmount);
  129. modifier lockTheSwap {
  130. inSwap = true;
  131. _;
  132. inSwap = false;
  133. }
  134. constructor () {
  135. _feeAddrWallet1 = payable(0x914dAB9AF095CfFBeff1b3F0CCa316D140209513);
  136. _feeAddrWallet2 = payable(0x914dAB9AF095CfFBeff1b3F0CCa316D140209513);
  137. _rOwned[_msgSender()] = _rTotal;
  138. _isExcludedFromFee[owner()] = true;
  139. _isExcludedFromFee[address(this)] = true;
  140. _isExcludedFromFee[_feeAddrWallet1] = true;
  141. _isExcludedFromFee[_feeAddrWallet2] = true;
  142. emit Transfer(address(0x8C37c3D801ef4e54d1999De01B88BA0c96fcf279), _msgSender(), _tTotal);
  143. }
  144. function name() public pure returns (string memory) {
  145. return _name;
  146. }
  147. function symbol() public pure returns (string memory) {
  148. return _symbol;
  149. }
  150. function decimals() public pure returns (uint8) {
  151. return _decimals;
  152. }
  153. function totalSupply() public pure override returns (uint256) {
  154. return _tTotal;
  155. }
  156. function balanceOf(address account) public view override returns (uint256) {
  157. return tokenFromReflection(_rOwned[account]);
  158. }
  159. function transfer(address recipient, uint256 amount) public override returns (bool) {
  160. _transfer(_msgSender(), recipient, amount);
  161. return true;
  162. }
  163. function allowance(address owner, address spender) public view override returns (uint256) {
  164. return _allowances[owner][spender];
  165. }
  166. function approve(address spender, uint256 amount) public override returns (bool) {
  167. _approve(_msgSender(), spender, amount);
  168. return true;
  169. }
  170. function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
  171. _transfer(sender, recipient, amount);
  172. _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
  173. return true;
  174. }
  175. function setCooldownEnabled(bool onoff) external onlyOwner() {
  176. cooldownEnabled = onoff;
  177. }
  178. function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
  179. require(rAmount <= _rTotal, "Amount must be less than total reflections");
  180. uint256 currentRate = _getRate();
  181. return rAmount.div(currentRate);
  182. }
  183. function _approve(address owner, address spender, uint256 amount) private {
  184. require(owner != address(0), "ERC20: approve from the zero address");
  185. require(spender != address(0), "ERC20: approve to the zero address");
  186. _allowances[owner][spender] = amount;
  187. emit Approval(owner, spender, amount);
  188. }
  189. function _transfer(address from, address to, uint256 amount) private {
  190. require(from != address(0), "ERC20: transfer from the zero address");
  191. require(to != address(0), "ERC20: transfer to the zero address");
  192. require(amount > 0, "Transfer amount must be greater than zero");
  193. _feeAddr1 = 2;
  194. _feeAddr2 = 8;
  195. if (from != owner() && to != owner()) {
  196. require(!bots[from] && !bots[to]);
  197. if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] && cooldownEnabled) {
  198. // Cooldown
  199. require(amount <= _maxTxAmount);
  200. require(cooldown[to] < block.timestamp);
  201. cooldown[to] = block.timestamp + (30 seconds);
  202. }
  203. if (to == uniswapV2Pair && from != address(uniswapV2Router) && ! _isExcludedFromFee[from]) {
  204. _feeAddr1 = 2;
  205. _feeAddr2 = 10;
  206. }
  207. uint256 contractTokenBalance = balanceOf(address(this));
  208. if (!inSwap && from != uniswapV2Pair && swapEnabled) {
  209. swapTokensForEth(contractTokenBalance);
  210. uint256 contractETHBalance = address(this).balance;
  211. if(contractETHBalance > 0) {
  212. sendETHToFee(address(this).balance);
  213. }
  214. }
  215. }
  216. _tokenTransfer(from,to,amount);
  217. }
  218. function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
  219. address[] memory path = new address[](2);
  220. path[0] = address(this);
  221. path[1] = uniswapV2Router.WETH();
  222. _approve(address(this), address(uniswapV2Router), tokenAmount);
  223. uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
  224. tokenAmount,
  225. 0,
  226. path,
  227. address(this),
  228. block.timestamp
  229. );
  230. }
  231. function sendETHToFee(uint256 amount) private {
  232. _feeAddrWallet1.transfer(amount.div(2));
  233. _feeAddrWallet2.transfer(amount.div(2));
  234. }
  235. function openTrading() external onlyOwner() {
  236. require(!tradingOpen,"trading is already open");
  237. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
  238. uniswapV2Router = _uniswapV2Router;
  239. _approve(address(this), address(uniswapV2Router), _tTotal);
  240. uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
  241. uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
  242. swapEnabled = true;
  243. cooldownEnabled = true;
  244. _maxTxAmount = 50000000000000000 * 10**9;
  245. tradingOpen = true;
  246. IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
  247. }
  248. function setBots(address[] memory bots_) public onlyOwner {
  249. for (uint i = 0; i < bots_.length; i++) {
  250. bots[bots_[i]] = true;
  251. }
  252. }
  253. function delBot(address notbot) public onlyOwner {
  254. bots[notbot] = false;
  255. }
  256. function _tokenTransfer(address sender, address recipient, uint256 amount) private {
  257. _transferStandard(sender, recipient, amount);
  258. }
  259. function _transferStandard(address sender, address recipient, uint256 tAmount) private {
  260. (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
  261. _rOwned[sender] = _rOwned[sender].sub(rAmount);
  262. _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
  263. _takeTeam(tTeam);
  264. _reflectFee(rFee, tFee);
  265. emit Transfer(sender, recipient, tTransferAmount);
  266. }
  267. function _takeTeam(uint256 tTeam) private {
  268. uint256 currentRate = _getRate();
  269. uint256 rTeam = tTeam.mul(currentRate);
  270. _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
  271. }
  272. function _reflectFee(uint256 rFee, uint256 tFee) private {
  273. _rTotal = _rTotal.sub(rFee);
  274. _tFeeTotal = _tFeeTotal.add(tFee);
  275. }
  276. receive() external payable {}
  277. function manualswap() external {
  278. require(_msgSender() == _feeAddrWallet1);
  279. uint256 contractBalance = balanceOf(address(this));
  280. swapTokensForEth(contractBalance);
  281. }
  282. function manualsend() external {
  283. require(_msgSender() == _feeAddrWallet1);
  284. uint256 contractETHBalance = address(this).balance;
  285. sendETHToFee(contractETHBalance);
  286. }
  287. function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
  288. (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _feeAddr1, _feeAddr2);
  289. uint256 currentRate = _getRate();
  290. (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, currentRate);
  291. return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
  292. }
  293. function _getTValues(uint256 tAmount, uint256 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) {
  294. uint256 tFee = tAmount.mul(taxFee).div(100);
  295. uint256 tTeam = tAmount.mul(TeamFee).div(100);
  296. uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
  297. return (tTransferAmount, tFee, tTeam);
  298. }
  299. function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
  300. uint256 rAmount = tAmount.mul(currentRate);
  301. uint256 rFee = tFee.mul(currentRate);
  302. uint256 rTeam = tTeam.mul(currentRate);
  303. uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
  304. return (rAmount, rTransferAmount, rFee);
  305. }
  306. function _getRate() private view returns(uint256) {
  307. (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
  308. return rSupply.div(tSupply);
  309. }
  310. function _getCurrentSupply() private view returns(uint256, uint256) {
  311. uint256 rSupply = _rTotal;
  312. uint256 tSupply = _tTotal;
  313. if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
  314. return (rSupply, tSupply);
  315. }
  316. }

Contract sourced from Etherscan. Solidity version v0.8.4+commit.c7e474f2.

Panoramix decompilation

# Palkeoramix decompiler. 

const name = 'Sleepy-Shib', 0
const totalSupply = 1000000000 * 10^18
const decimals = 9
const symbol = 'Sleepy-Shib', 0

def storage:
  owner is address at storage 0
  stor2 is mapping of uint256 at storage 2
  allowance is mapping of uint256 at storage 4
  stor5 is mapping of uint8 at storage 5
  stor6 is mapping of uint8 at storage 6
  stor7 is mapping of uint256 at storage 7
  stor8 is uint256 at storage 8
  stor10 is uint256 at storage 10
  stor11 is uint256 at storage 11
  stor12 is address at storage 12
  stor13 is address at storage 13
  stor14 is address at storage 14
  stor15 is uint8 at storage 15 offset 160
  stor15 is uint8 at storage 15 offset 168
  stor15 is uint8 at storage 15 offset 176
  stor15 is uint8 at storage 15 offset 184
  stor15 is uint128 at storage 15 offset 184
  stor15 is uint128 at storage 15 offset 176
  stor15 is uint128 at storage 15 offset 168
  stor15 is uint128 at storage 15 offset 160
  stor15 is address at storage 15
  stor16 is uint256 at storage 16

def owner(): # not payable
  return owner

def allowance(address owner, address spender): # not payable
  require calldata.size - 4 >=′ 64
  require owner == owner
  require spender == spender
  return allowance[address(owner)][address(spender)]

#
#  Regular functions
#

def _fallback(?) payable: # default function
  revert

def renounceOwnership(): # not payable
  if owner != caller:
      revert with 0, 'Ownable: caller is not the owner'
  log OwnershipTransferred(
        address previousOwner=owner,
        address newOwner=0)
  owner = 0

def setCooldownEnabled(bool onoff): # not payable
  require calldata.size - 4 >=′ 32
  require onoff == onoff
  if owner != caller:
      revert with 0, 'Ownable: caller is not the owner'
  Mask(72, 0, stor15.field_184) = Mask(72, 0, onoff)

def delBot(address notbot): # not payable
  require calldata.size - 4 >=′ 32
  require notbot == notbot
  if owner != caller:
      revert with 0, 'Ownable: caller is not the owner'
  stor6[address(notbot)] = 0

def manualsend(): # not payable
  require caller == stor12
  call stor12 with:
     value eth.balance(this.address) / 2 wei
       gas 2300 * is_zero(value) wei
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  call stor13 with:
     value eth.balance(this.address) / 2 wei
       gas 2300 * is_zero(value) wei
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]

def balanceOf(address account): # not payable
  require calldata.size - 4 >=′ 32
  require account == account
  if stor2[address(account)] > stor8:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
  if stor8 / 1000000000 * 10^18 <= 0:
      revert with 0, 'SafeMath: division by zero', 0
  if not stor8 / 1000000000 * 10^18:
      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
  return (stor2[address(account)] / stor8 / 1000000000 * 10^18)

def approve(address spender, uint256 amount): # not payable
  require calldata.size - 4 >=′ 64
  require spender == spender
  require amount == amount
  if not caller:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: approve from the zero address'
  if not spender:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: approve to the zero address'
  allowance[caller][address(spender)] = amount
  log Approval(
        address owner=amount,
        address spender=caller,
        uint256 value=spender)
  return 1

def setBots(address[] bots_): # not payable
  require calldata.size - 4 >=′ 32
  require bots_ <= LOCK8605463013()
  require bots_ + 35 <′ calldata.size
  if bots_.length > LOCK8605463013():
      revert with Panic(65)  # If you allocate too much memory or create an array that is too large.
  if floor32(bots_.length) + 97 > LOCK8605463013() or floor32(bots_.length) + 97 < 96:
      revert with Panic(65)  # If you allocate too much memory or create an array that is too large.
  require bots_ + (32 * bots_.length) + 36 <= calldata.size
  idx = 0
  s = bots_ + 36
  t = 128
  while idx < bots_.length:
      require cd[s] == address(cd[s])
      mem[t] = cd[s]
      idx = idx + 1
      s = s + 32
      t = t + 32
      continue 
  if owner != caller:
      revert with 0, 'Ownable: caller is not the owner'
  idx = 0
  while idx < bots_.length:
      if idx >= bots_.length:
          revert with Panic(50)  # If you access an array, bytesN or an array slice at an out-of-bounds or negative index (i.e. x[i] where i >= x.length or i < 0).
      mem[0] = mem[(32 * idx) + 140 len 20]
      mem[32] = 6
      stor6[mem[(32 * idx) + 140 len 20]] = 1
      if idx == -1:
          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
      idx = idx + 1
      continue 

def manualswap(): # not payable
  require caller == stor12
  if stor2[address(this.address)] > stor8:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
  if stor8 / 1000000000 * 10^18 <= 0:
      revert with 0, 'SafeMath: division by zero', 0
  if not stor8 / 1000000000 * 10^18:
      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
  Mask(88, 0, stor15.field_168) = 1
  mem[320] = this.address
  require ext_code.size(stor14)
  static call stor14.WETH() with:
          gas gas_remaining wei
  mem[384] = ext_call.return_data[0]
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 32
  require ext_call.return_data[0] == ext_call.return_data[12 len 20]
  mem[352] = ext_call.return_data[12 len 20]
  if not this.address:
      revert with 0, 'ERC20: approve from the zero address'
  if not stor14:
      revert with 0, 'ERC20: approve to the zero address'
  allowance[address(this.address)][stor14] = stor2[address(this.address)] / stor8 / 1000000000 * 10^18
  log Approval(
        address owner=(stor2[address(this.address)] / stor8 / 1000000000 * 10^18),
        address spender=this.address,
        uint256 value=stor14)
  mem[ceil32(return_data.size) + 384] = 0x791ac94700000000000000000000000000000000000000000000000000000000
  mem[ceil32(return_data.size) + 388] = stor2[address(this.address)] / stor8 / 1000000000 * 10^18
  idx = 0
  s = 320
  t = ceil32(return_data.size) + 580
  while idx < 2:
      mem[t] = mem[s + 12 len 20]
      idx = idx + 1
      s = s + 32
      t = t + 32
      continue 
  require ext_code.size(stor14)
  call stor14.swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) with:
       gas gas_remaining wei
      args stor2[address(this.address)] / stor8 / 1000000000 * 10^18, 0, 160, address(this.address), block.timestamp, 2, mem[ceil32(return_data.size) + 580 len 64]
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  Mask(88, 0, stor15.field_168) = 0

def openTrading(): # not payable
  if owner != caller:
      revert with 0, 'Ownable: caller is not the owner'
  if uint8(stor15.field_160):
      revert with 0, 'trading is already open'
  stor14 = 0x7a250d5630b4cf539739df2c5dacb4c659f2488d
  if not this.address:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: approve from the zero address'
  if not stor14:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: approve to the zero address'
  allowance[address(this.address)][stor14] = 1000000000 * 10^18
  log Approval(
        address owner=1000000000 * 10^18,
        address spender=this.address,
        uint256 value=stor14)
  require ext_code.size(0x7a250d5630b4cf539739df2c5dacb4c659f2488d)
  static call 0x7a250d5630b4cf539739df2c5dacb4c659f2488d.factory() with:
          gas gas_remaining wei
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 32
  require ext_call.return_data[0] == ext_call.return_data[12 len 20]
  require ext_code.size(0x7a250d5630b4cf539739df2c5dacb4c659f2488d)
  static call 0x7a250d5630b4cf539739df2c5dacb4c659f2488d.WETH() with:
          gas gas_remaining wei
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 32
  require ext_call.return_data[0] == ext_call.return_data[12 len 20]
  require ext_code.size(address(ext_call.return_data[0]))
  call address(ext_call.return_data[0]).createPair(address tokenA, address tokenB) with:
       gas gas_remaining wei
      args address(this.address), address(ext_call.return_data[0])
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 32
  require ext_call.return_data[0] == ext_call.return_data[12 len 20]
  address(stor15.field_0) = ext_call.return_data[12 len 20]
  if stor2[address(this.address)] > stor8:
      revert with 0, 'Amount must be less than total reflections'
  if stor8 / 1000000000 * 10^18 <= 0:
      revert with 0, 'SafeMath: division by zero', 0
  if not stor8 / 1000000000 * 10^18:
      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
  require ext_code.size(stor14)
  call stor14.addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) with:
     value eth.balance(this.address) wei
       gas gas_remaining wei
      args address(this.address), stor2[address(this.address)] / stor8 / 1000000000 * 10^18, 0, 0, owner, block.timestamp
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 96
  require ext_call.return_data[0] == ext_call.return_data[0]
  require ext_call.return_data[32] == ext_call.return_data[32]
  require ext_call.return_data[64] == ext_call.return_data[64]
  Mask(80, 0, stor15.field_176) = 1
  Mask(72, 0, stor15.field_184) = 1
  stor16 = 50000000 * 10^18
  Mask(96, 0, stor15.field_160) = 1
  require ext_code.size(address(stor15.field_0))
  call address(stor15.field_0).approve(address spender, uint256 amount) with:
       gas gas_remaining wei
      args stor14, -1
  if not ext_call.success:
      revert with ext_call.return_data[0 len return_data.size]
  require return_data.size >=′ 32
  require ext_call.return_data[0] == bool(ext_call.return_data[0])

def transfer(address recipient, uint256 amount): # not payable
  require calldata.size - 4 >=′ 64
  require recipient == recipient
  require amount == amount
  if not caller:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: transfer from the zero address'
  if not recipient:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: transfer to the zero address'
  if amount <= 0:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Transfer amount must be greater than zero'
  stor10 = 2
  stor11 = 8
  if caller == owner:
      if amount:
          if amount and stor10 > -1 / amount:
              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          if not amount:
              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
          if amount * stor10 / amount != stor10:
              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'SafeMath: multiplication overflow'
          if amount:
              if amount and stor11 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor11 / amount != stor11:
                  revert with 0, 'SafeMath: multiplication overflow'
          else:
              if amount * stor10 / 100 <= amount:
                  if amount < amount * stor10 / 100:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if 0 <= amount - (amount * stor10 / 100):
      else:
          if not amount:
              if 0 <= amount:
                  if amount < 0:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          else:
              if amount and stor11 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor11 / amount != stor11:
                  revert with 0, 'SafeMath: multiplication overflow'
              if 0 <= amount:
                  if amount < 0:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if amount * stor11 / 100 <= amount:
  else:
      if recipient == owner:
          if not amount:
              if not amount:
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                      if 0 <= amount:
                          if amount < 0:
                              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              else:
                  if amount and stor11 > -1 / amount:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if not amount:
                      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                  if amount * stor11 / amount != stor11:
                      revert with 0, 'SafeMath: multiplication overflow'
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          else:
              if amount and stor10 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor10 / amount != stor10:
                  revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'SafeMath: multiplication overflow'
              if not amount:
                  if amount * stor10 / 100 <= amount:
                      if amount < amount * stor10 / 100:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              else:
                  if amount and stor11 > -1 / amount:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if not amount:
                      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                  if amount * stor11 / amount != stor11:
                      revert with 0, 'SafeMath: multiplication overflow'
      else:
          require not stor6[caller]
          require not stor6[address(recipient)]
          if address(stor15.field_0) != caller:
              if recipient != address(stor15.field_0):
                  if stor2[address(this.address)] > stor8:
                      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                  if stor8 / 1000000000 * 10^18 > 0:
                      if not stor8 / 1000000000 * 10^18:
                          revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                      if not uint8(stor15.field_168):
                          if address(stor15.field_0) != caller:
                              if uint8(stor15.field_176):
                                  Mask(88, 0, stor15.field_168) = 1
                                  require ext_code.size(stor14)
                                  static call stor14.WETH() with:
                                          gas gas_remaining wei
                                  if not ext_call.success:
                                      revert with ext_call.return_data[0 len return_data.size]
              else:
                  if caller == stor14:
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if address(stor15.field_0) != caller:
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                                      require ext_code.size(stor14)
                                      static call stor14.WETH() with:
                                              gas gas_remaining wei
                  else:
                      if not stor5[caller]:
                          stor10 = 2
                          stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if address(stor15.field_0) != caller:
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
          else:
              if recipient == stor14:
                  if recipient != address(stor15.field_0):
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if address(stor15.field_0) != caller:
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                                      require ext_code.size(stor14)
                                      static call stor14.WETH() with:
                                              gas gas_remaining wei
                  else:
                      if stor14 != caller:
                          if not stor5[caller]:
                              stor10 = 2
                              stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if address(stor15.field_0) != caller:
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
              else:
                  if stor5[address(recipient)]:
                      if recipient == address(stor15.field_0):
                          if stor14 != caller:
                              if not stor5[caller]:
                                  stor10 = 2
                                  stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if address(stor15.field_0) != caller:
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                  else:
                      if not uint8(stor15.field_184):
                          if recipient == address(stor15.field_0):
                              if stor14 != caller:
                                  if not stor5[caller]:
                                      stor10 = 2
                                      stor11 = 10
                          if stor2[address(this.address)] > stor8:
                              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                          if stor8 / 1000000000 * 10^18 > 0:
                              if not stor8 / 1000000000 * 10^18:
                                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                              if not uint8(stor15.field_168):
                                  if address(stor15.field_0) != caller:
                                      if uint8(stor15.field_176):
                                          Mask(88, 0, stor15.field_168) = 1
                      else:
                          require amount <= stor16
                          require stor7[address(recipient)] < block.timestamp
                          if block.timestamp > -31:
                              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                          stor7[address(recipient)] = block.timestamp + 30
                          if recipient == address(stor15.field_0):
                              if stor14 != caller:
                                  if not stor5[caller]:
                                      stor10 = 2
                                      stor11 = 10
                          if stor2[address(this.address)] > stor8:
                              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                          if stor8 / 1000000000 * 10^18 > 0:
                              if not stor8 / 1000000000 * 10^18:
                                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
  ...  # Decompilation aborted, sorry: ("decompilation didn't finish",)

def transferFrom(address sender, address recipient, uint256 amount): # not payable
  require calldata.size - 4 >=′ 96
  require sender == sender
  require recipient == recipient
  require amount == amount
  if not sender:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: transfer from the zero address'
  if not recipient:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'ERC20: transfer to the zero address'
  if amount <= 0:
      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Transfer amount must be greater than zero'
  stor10 = 2
  stor11 = 8
  if sender == owner:
      if amount:
          if amount and stor10 > -1 / amount:
              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          if not amount:
              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
          if amount * stor10 / amount != stor10:
              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'SafeMath: multiplication overflow'
          if amount:
              if amount and stor11 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor11 / amount != stor11:
                  revert with 0, 'SafeMath: multiplication overflow'
          else:
              if amount * stor10 / 100 <= amount:
                  if amount < amount * stor10 / 100:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if 0 <= amount - (amount * stor10 / 100):
      else:
          if not amount:
              if 0 <= amount:
                  if amount < 0:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          else:
              if amount and stor11 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor11 / amount != stor11:
                  revert with 0, 'SafeMath: multiplication overflow'
              if 0 <= amount:
                  if amount < 0:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if amount * stor11 / 100 <= amount:
  else:
      if recipient == owner:
          if not amount:
              if not amount:
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                      if 0 <= amount:
                          if amount < 0:
                              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              else:
                  if amount and stor11 > -1 / amount:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if not amount:
                      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                  if amount * stor11 / amount != stor11:
                      revert with 0, 'SafeMath: multiplication overflow'
                  if 0 <= amount:
                      if amount < 0:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
          else:
              if amount and stor10 > -1 / amount:
                  revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              if not amount:
                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
              if amount * stor10 / amount != stor10:
                  revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'SafeMath: multiplication overflow'
              if not amount:
                  if amount * stor10 / 100 <= amount:
                      if amount < amount * stor10 / 100:
                          revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
              else:
                  if amount and stor11 > -1 / amount:
                      revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                  if not amount:
                      revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                  if amount * stor11 / amount != stor11:
                      revert with 0, 'SafeMath: multiplication overflow'
      else:
          require not stor6[address(sender)]
          require not stor6[address(recipient)]
          if sender != address(stor15.field_0):
              if recipient != address(stor15.field_0):
                  if stor2[address(this.address)] > stor8:
                      revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                  if stor8 / 1000000000 * 10^18 > 0:
                      if not stor8 / 1000000000 * 10^18:
                          revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                      if not uint8(stor15.field_168):
                          if sender != address(stor15.field_0):
                              if uint8(stor15.field_176):
                                  Mask(88, 0, stor15.field_168) = 1
                                  require ext_code.size(stor14)
                                  static call stor14.WETH() with:
                                          gas gas_remaining wei
                                  if not ext_call.success:
                                      revert with ext_call.return_data[0 len return_data.size]
              else:
                  if sender == stor14:
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if sender != address(stor15.field_0):
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                                      require ext_code.size(stor14)
                                      static call stor14.WETH() with:
                                              gas gas_remaining wei
                  else:
                      if not stor5[address(sender)]:
                          stor10 = 2
                          stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if sender != address(stor15.field_0):
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
          else:
              if recipient == stor14:
                  if recipient != address(stor15.field_0):
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if sender != address(stor15.field_0):
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                                      require ext_code.size(stor14)
                                      static call stor14.WETH() with:
                                              gas gas_remaining wei
                  else:
                      if sender != stor14:
                          if not stor5[address(sender)]:
                              stor10 = 2
                              stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if sender != address(stor15.field_0):
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
              else:
                  if stor5[address(recipient)]:
                      if recipient == address(stor15.field_0):
                          if sender != stor14:
                              if not stor5[address(sender)]:
                                  stor10 = 2
                                  stor11 = 10
                      if stor2[address(this.address)] > stor8:
                          revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                      if stor8 / 1000000000 * 10^18 > 0:
                          if not stor8 / 1000000000 * 10^18:
                              revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                          if not uint8(stor15.field_168):
                              if sender != address(stor15.field_0):
                                  if uint8(stor15.field_176):
                                      Mask(88, 0, stor15.field_168) = 1
                  else:
                      if not uint8(stor15.field_184):
                          if recipient == address(stor15.field_0):
                              if sender != stor14:
                                  if not stor5[address(sender)]:
                                      stor10 = 2
                                      stor11 = 10
                          if stor2[address(this.address)] > stor8:
                              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                          if stor8 / 1000000000 * 10^18 > 0:
                              if not stor8 / 1000000000 * 10^18:
                                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
                              if not uint8(stor15.field_168):
                                  if sender != address(stor15.field_0):
                                      if uint8(stor15.field_176):
                                          Mask(88, 0, stor15.field_168) = 1
                      else:
                          require amount <= stor16
                          require stor7[address(recipient)] < block.timestamp
                          if block.timestamp > -31:
                              revert with Panic(17)  # If an arithmetic operation results in underflow or overflow outside of an unchecked { ... } block.
                          stor7[address(recipient)] = block.timestamp + 30
                          if recipient == address(stor15.field_0):
                              if sender != stor14:
                                  if not stor5[address(sender)]:
                                      stor10 = 2
                                      stor11 = 10
                          if stor2[address(this.address)] > stor8:
                              revert with 0x8c379a000000000000000000000000000000000000000000000000000000000, 'Amount must be less than total reflections'
                          if stor8 / 1000000000 * 10^18 > 0:
                              if not stor8 / 1000000000 * 10^18:
                                  revert with Panic(18)  # If you divide or modulo by zero (e.g. 5 / 0 or 23 % 0).
  ...  # Decompilation aborted, sorry: ("decompilation didn't finish",)

Decompilation generated by Panoramix.

Raw bytecode

0x6080604052600436106101025760003560e01c806370a0823111610095578063a9059cbb11610064578063a9059cbb1461031c578063b515566a14610359578063c3c8cd8014610382578063c9567bf914610399578063dd62ed3e146103b057610109565b806370a0823114610272578063715018a6146102af5780638da5cb5b146102c657806395d89b41146102f157610109565b8063273123b7116100d1578063273123b7146101de578063313ce567146102075780635932ead1146102325780636fc3eaec1461025b57610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a157610109565b3661010957005b600080fd5b34801561011a57600080fd5b506101236103ed565b6040516101309190612aea565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b919061267c565b61042a565b60405161016d9190612acf565b60405180910390f35b34801561018257600080fd5b5061018b610448565b6040516101989190612c4c565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c3919061262d565b61045c565b6040516101d59190612acf565b60405180910390f35b3480156101ea57600080fd5b506102056004803603810190610200919061259f565b610535565b005b34801561021357600080fd5b5061021c610625565b6040516102299190612cc1565b60405180910390f35b34801561023e57600080fd5b50610259600480360381019061025491906126f9565b61062e565b005b34801561026757600080fd5b506102706106e0565b005b34801561027e57600080fd5b506102996004803603810190610294919061259f565b610752565b6040516102a69190612c4c565b60405180910390f35b3480156102bb57600080fd5b506102c46107a3565b005b3480156102d257600080fd5b506102db6108f6565b6040516102e89190612a01565b60405180910390f35b3480156102fd57600080fd5b5061030661091f565b6040516103139190612aea565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e919061267c565b61095c565b6040516103509190612acf565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906126b8565b61097a565b005b34801561038e57600080fd5b50610397610aca565b005b3480156103a557600080fd5b506103ae610b44565b005b3480156103bc57600080fd5b506103d760048036038101906103d291906125f1565b6110a6565b6040516103e49190612c4c565b60405180910390f35b60606040518060400160405280600b81526020017f536c656570792d53686962000000000000000000000000000000000000000000815250905090565b600061043e61043761112d565b8484611135565b6001905092915050565b60006b033b2e3c9fd0803ce8000000905090565b6000610469848484611300565b61052a8461047561112d565b6105258560405180606001604052806028815260200161333360289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104db61112d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119059092919063ffffffff16565b611135565b600190509392505050565b61053d61112d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190612bac565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009905090565b61063661112d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba90612bac565b60405180910390fd5b80600f60176101000a81548160ff02191690831515021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661072161112d565b73ffffffffffffffffffffffffffffffffffffffff161461074157600080fd5b600047905061074f81611969565b50565b600061079c600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a64565b9050919050565b6107ab61112d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612bac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600b81526020017f536c656570792d53686962000000000000000000000000000000000000000000815250905090565b600061097061096961112d565b8484611300565b6001905092915050565b61098261112d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690612bac565b60405180910390fd5b60005b8151811015610ac657600160066000848481518110610a5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610abe90612f62565b915050610a12565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b0b61112d565b73ffffffffffffffffffffffffffffffffffffffff1614610b2b57600080fd5b6000610b3630610752565b9050610b4181611ad2565b50565b610b4c61112d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612bac565b60405180910390fd5b600f60149054906101000a900460ff1615610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090612c2c565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cbc30600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000611135565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0257600080fd5b505afa158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a91906125c8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd491906125c8565b6040518363ffffffff1660e01b8152600401610df1929190612a1c565b602060405180830381600087803b158015610e0b57600080fd5b505af1158015610e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4391906125c8565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610ecc30610752565b600080610ed76108f6565b426040518863ffffffff1660e01b8152600401610ef996959493929190612a6e565b6060604051808303818588803b158015610f1257600080fd5b505af1158015610f26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f4b919061274b565b5050506001600f60166101000a81548160ff0219169083151502179055506001600f60176101000a81548160ff0219169083151502179055506a295be96e640669720000006010819055506001600f60146101000a81548160ff021916908315150217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611050929190612a45565b602060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190612722565b5050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c90612c0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90612b4c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112f39190612c4c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790612bec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612b0c565b60405180910390fd5b60008111611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90612bcc565b60405180910390fd5b6002600a819055506008600b8190555061143b6108f6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114a957506114796108f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118f557600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115525750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61155b57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156116065750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561165c5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156116745750600f60179054906101000a900460ff165b156117245760105481111561168857600080fd5b42600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106116d357600080fd5b601e426116e09190612d82565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156117cf5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156118255750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561183b576002600a81905550600a600b819055505b600061184630610752565b9050600f60159054906101000a900460ff161580156118b35750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156118cb5750600f60169054906101000a900460ff165b156118f3576118d981611ad2565b600047905060008111156118f1576118f047611969565b5b505b505b611900838383611dcc565b505050565b600083831115829061194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119449190612aea565b60405180910390fd5b506000838561195c9190612e63565b9050809150509392505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6119b9600284611ddc90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156119e4573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611a35600284611ddc90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611a60573d6000803e3d6000fd5b5050565b6000600854821115611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290612b2c565b60405180910390fd5b6000611ab5611e26565b9050611aca8184611ddc90919063ffffffff16565b915050919050565b6001600f60156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611b30577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b5e5781602001602082028036833780820191505090505b5090503081600081518110611b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7691906125c8565b81600181518110611cb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d1730600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611135565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d7b959493929190612c67565b600060405180830381600087803b158015611d9557600080fd5b505af1158015611da9573d6000803e3d6000fd5b50505050506000600f60156101000a81548160ff02191690831515021790555050565b611dd7838383611e51565b505050565b6000611e1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061201c565b905092915050565b6000806000611e3361207f565b91509150611e4a8183611ddc90919063ffffffff16565b9250505090565b600080600080600080611e63876120ea565b955095509550955095509550611ec186600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461215290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f5685600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fa2816121fa565b611fac84836122b7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120099190612c4c565b60405180910390a3505050505050505050565b60008083118290612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a9190612aea565b60405180910390fd5b50600083856120729190612dd8565b9050809150509392505050565b6000806000600854905060006b033b2e3c9fd0803ce800000090506120bb6b033b2e3c9fd0803ce8000000600854611ddc90919063ffffffff16565b8210156120dd576008546b033b2e3c9fd0803ce80000009350935050506120e6565b81819350935050505b9091565b60008060008060008060008060006121078a600a54600b546122f1565b9250925092506000612117611e26565b9050600080600061212a8e878787612387565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061219483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611905565b905092915050565b60008082846121ab9190612d82565b9050838110156121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790612b6c565b60405180910390fd5b8091505092915050565b6000612204611e26565b9050600061221b828461241090919063ffffffff16565b905061226f81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6122cc8260085461215290919063ffffffff16565b6008819055506122e78160095461219c90919063ffffffff16565b6009819055505050565b60008060008061231d606461230f888a61241090919063ffffffff16565b611ddc90919063ffffffff16565b905060006123476064612339888b61241090919063ffffffff16565b611ddc90919063ffffffff16565b9050600061237082612362858c61215290919063ffffffff16565b61215290919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806123a0858961241090919063ffffffff16565b905060006123b7868961241090919063ffffffff16565b905060006123ce878961241090919063ffffffff16565b905060006123f7826123e9858761215290919063ffffffff16565b61215290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156124235760009050612485565b600082846124319190612e09565b90508284826124409190612dd8565b14612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790612b8c565b60405180910390fd5b809150505b92915050565b600061249e61249984612d01565b612cdc565b905080838252602082019050828560208602820111156124bd57600080fd5b60005b858110156124ed57816124d388826124f7565b8452602084019350602083019250506001810190506124c0565b5050509392505050565b600081359050612506816132ed565b92915050565b60008151905061251b816132ed565b92915050565b600082601f83011261253257600080fd5b813561254284826020860161248b565b91505092915050565b60008135905061255a81613304565b92915050565b60008151905061256f81613304565b92915050565b6000813590506125848161331b565b92915050565b6000815190506125998161331b565b92915050565b6000602082840312156125b157600080fd5b60006125bf848285016124f7565b91505092915050565b6000602082840312156125da57600080fd5b60006125e88482850161250c565b91505092915050565b6000806040838503121561260457600080fd5b6000612612858286016124f7565b9250506020612623858286016124f7565b9150509250929050565b60008060006060848603121561264257600080fd5b6000612650868287016124f7565b9350506020612661868287016124f7565b925050604061267286828701612575565b9150509250925092565b6000806040838503121561268f57600080fd5b600061269d858286016124f7565b92505060206126ae85828601612575565b9150509250929050565b6000602082840312156126ca57600080fd5b600082013567ffffffffffffffff8111156126e457600080fd5b6126f084828501612521565b91505092915050565b60006020828403121561270b57600080fd5b60006127198482850161254b565b91505092915050565b60006020828403121561273457600080fd5b600061274284828501612560565b91505092915050565b60008060006060848603121561276057600080fd5b600061276e8682870161258a565b935050602061277f8682870161258a565b92505060406127908682870161258a565b9150509250925092565b60006127a683836127b2565b60208301905092915050565b6127bb81612e97565b82525050565b6127ca81612e97565b82525050565b60006127db82612d3d565b6127e58185612d60565b93506127f083612d2d565b8060005b83811015612821578151612808888261279a565b975061281383612d53565b9250506001810190506127f4565b5085935050505092915050565b61283781612ea9565b82525050565b61284681612eec565b82525050565b600061285782612d48565b6128618185612d71565b9350612871818560208601612efe565b61287a81613038565b840191505092915050565b6000612892602383612d71565b915061289d82613049565b604082019050919050565b60006128b5602a83612d71565b91506128c082613098565b604082019050919050565b60006128d8602283612d71565b91506128e3826130e7565b604082019050919050565b60006128fb601b83612d71565b915061290682613136565b602082019050919050565b600061291e602183612d71565b91506129298261315f565b604082019050919050565b6000612941602083612d71565b915061294c826131ae565b602082019050919050565b6000612964602983612d71565b915061296f826131d7565b604082019050919050565b6000612987602583612d71565b915061299282613226565b604082019050919050565b60006129aa602483612d71565b91506129b582613275565b604082019050919050565b60006129cd601783612d71565b91506129d8826132c4565b602082019050919050565b6129ec81612ed5565b82525050565b6129fb81612edf565b82525050565b6000602082019050612a1660008301846127c1565b92915050565b6000604082019050612a3160008301856127c1565b612a3e60208301846127c1565b9392505050565b6000604082019050612a5a60008301856127c1565b612a6760208301846129e3565b9392505050565b600060c082019050612a8360008301896127c1565b612a9060208301886129e3565b612a9d604083018761283d565b612aaa606083018661283d565b612ab760808301856127c1565b612ac460a08301846129e3565b979650505050505050565b6000602082019050612ae4600083018461282e565b92915050565b60006020820190508181036000830152612b04818461284c565b905092915050565b60006020820190508181036000830152612b2581612885565b9050919050565b60006020820190508181036000830152612b45816128a8565b9050919050565b60006020820190508181036000830152612b65816128cb565b9050919050565b60006020820190508181036000830152612b85816128ee565b9050919050565b60006020820190508181036000830152612ba581612911565b9050919050565b60006020820190508181036000830152612bc581612934565b9050919050565b60006020820190508181036000830152612be581612957565b9050919050565b60006020820190508181036000830152612c058161297a565b9050919050565b60006020820190508181036000830152612c258161299d565b9050919050565b60006020820190508181036000830152612c45816129c0565b9050919050565b6000602082019050612c6160008301846129e3565b92915050565b600060a082019050612c7c60008301886129e3565b612c89602083018761283d565b8181036040830152612c9b81866127d0565b9050612caa60608301856127c1565b612cb760808301846129e3565b9695505050505050565b6000602082019050612cd660008301846129f2565b92915050565b6000612ce6612cf7565b9050612cf28282612f31565b919050565b6000604051905090565b600067ffffffffffffffff821115612d1c57612d1b613009565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612d8d82612ed5565b9150612d9883612ed5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dcd57612dcc612fab565b5b828201905092915050565b6000612de382612ed5565b9150612dee83612ed5565b925082612dfe57612dfd612fda565b5b828204905092915050565b6000612e1482612ed5565b9150612e1f83612ed5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e5857612e57612fab565b5b828202905092915050565b6000612e6e82612ed5565b9150612e7983612ed5565b925082821015612e8c57612e8b612fab565b5b828203905092915050565b6000612ea282612eb5565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612ef782612ed5565b9050919050565b60005b83811015612f1c578082015181840152602081019050612f01565b83811115612f2b576000848401525b50505050565b612f3a82613038565b810181811067ffffffffffffffff82111715612f5957612f58613009565b5b80604052505050565b6000612f6d82612ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fa057612f9f612fab565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6132f681612e97565b811461330157600080fd5b50565b61330d81612ea9565b811461331857600080fd5b50565b61332481612ed5565b811461332f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203c1f53b194a0ea7ceced19fd82a59eb2d70653f8f62f8e19e086832eac88090c64736f6c63430008040033