ETH Price: $1,594.66 (-1.62%)
Gas: 1.19 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
Age
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
Age
From
To
-138192232021-12-16 23:51:261216 days ago1639698686
Gearbox Protocol: Account Factory
0 ETH
-138192222021-12-16 23:50:201216 days ago1639698620
Gearbox Protocol: Account Factory
0 ETH
-138192222021-12-16 23:50:201216 days ago1639698620
Gearbox Protocol: Account Factory
0 ETH
-138192212021-12-16 23:50:061216 days ago1639698606
Gearbox Protocol: Account Factory
0 ETH
-138192202021-12-16 23:49:441216 days ago1639698584
Gearbox Protocol: Account Factory
0 ETH
-138192172021-12-16 23:48:561216 days ago1639698536
Gearbox Protocol: Account Factory
0 ETH
-138192162021-12-16 23:48:491216 days ago1639698529
Gearbox Protocol: Account Factory
0 ETH
-138192152021-12-16 23:48:331216 days ago1639698513
Gearbox Protocol: Account Factory
0 ETH
-138192152021-12-16 23:48:331216 days ago1639698513
Gearbox Protocol: Account Factory
0 ETH
-138192152021-12-16 23:48:331216 days ago1639698513
Gearbox Protocol: Account Factory
0 ETH
-138192152021-12-16 23:48:331216 days ago1639698513
Gearbox Protocol: Account Factory
0 ETH
-138192142021-12-16 23:48:161216 days ago1639698496
Gearbox Protocol: Account Factory
0 ETH
-138192142021-12-16 23:48:161216 days ago1639698496
Gearbox Protocol: Account Factory
0 ETH
-138192142021-12-16 23:48:161216 days ago1639698496
Gearbox Protocol: Account Factory
0 ETH
-138192122021-12-16 23:47:591216 days ago1639698479
Gearbox Protocol: Account Factory
0 ETH
-138192092021-12-16 23:47:481216 days ago1639698468
Gearbox Protocol: Account Factory
0 ETH
-138192092021-12-16 23:47:481216 days ago1639698468
Gearbox Protocol: Account Factory
0 ETH
-138192092021-12-16 23:47:481216 days ago1639698468
Gearbox Protocol: Account Factory
0 ETH
-138192092021-12-16 23:47:481216 days ago1639698468
Gearbox Protocol: Account Factory
0 ETH
-138192072021-12-16 23:47:441216 days ago1639698464
Gearbox Protocol: Account Factory
0 ETH
-138192062021-12-16 23:47:031216 days ago1639698423
Gearbox Protocol: Account Factory
0 ETH
-138192062021-12-16 23:47:031216 days ago1639698423
Gearbox Protocol: Account Factory
0 ETH
-138192052021-12-16 23:46:191216 days ago1639698379
Gearbox Protocol: Account Factory
0 ETH
-138192032021-12-16 23:46:021216 days ago1639698362
Gearbox Protocol: Account Factory
0 ETH
-138192032021-12-16 23:46:021216 days ago1639698362
Gearbox Protocol: Account Factory
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AccountFactory

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 28 : AccountFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
pragma abicoder v2;
import {EnumerableSet} from "@openzeppelin/contracts/utils/EnumerableSet.sol";
import {SafeMath} from "@openzeppelin/contracts/math/SafeMath.sol";
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {IAccountFactory} from "../interfaces/IAccountFactory.sol";
import {IAccountMiner} from "../interfaces/IAccountMiner.sol";
import {ICreditAccount} from "../interfaces/ICreditAccount.sol";
import {ICreditManager} from "../interfaces/ICreditManager.sol";
import {AddressProvider} from "./AddressProvider.sol";
import {ContractsRegister} from "./ContractsRegister.sol";
import {CreditAccount} from "../credit/CreditAccount.sol";
import {ACLTrait} from "./ACLTrait.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {DataTypes} from "../libraries/data/Types.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
/// @title Abstract reusable credit accounts factory
/// @notice Creates, holds & lend credit accounts to pool contract
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 28 : EnumerableSet.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 28 : SafeMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 28 : Clones.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
* deploying minimal proxy contracts, also known as "clones".
*
* > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
* > a minimal bytecode implementation that delegates all calls to a known, fixed address.
*
* The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
* (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
* deterministic method.
*
* _Available since v3.4._
*/
library Clones {
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `master`.
*
* This function uses the create opcode, which should never revert.
*/
function clone(address master) internal returns (address instance) {
// solhint-disable-next-line no-inline-assembly
assembly {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 28 : IAccountFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
pragma abicoder v2;
import {DataTypes} from "../libraries/data/Types.sol";
interface IAccountFactory {
// emits if new account miner was changed
event AccountMinerChanged(address indexed miner);
// emits each time when creditManager takes credit account
event NewCreditAccount(address indexed account);
// emits each time when creditManager takes credit account
event InitializeCreditAccount(
address indexed account,
address indexed creditManager
);
// emits each time when pool returns credit account
event ReturnCreditAccount(address indexed account);
// emits each time when DAO takes account from account factory forever
event TakeForever(address indexed creditAccount, address indexed to);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 28 : IAccountMiner.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
interface IAccountMiner {
/// @dev Pays gas compensation for user
function mineAccount(address payable user) external;
/// @dev Returns account miner type
function kind() external pure returns (bytes32);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 28 : ICreditAccount.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
/// @title Reusable Credit Account interface
/// @notice Implements general credit account:
/// - Keeps token balances
/// - Keeps token balances
/// - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized
/// - Approves tokens for 3rd party contracts
/// - Transfers assets
/// - Execute financial orders
///
/// More: https://dev.gearbox.fi/developers/creditManager/vanillacreditAccount
interface ICreditAccount {
/// @dev Initializes clone contract
function initialize() external;
/// @dev Connects credit account to credit manager
/// @param _creditManager Credit manager address
function connectTo(
address _creditManager,
uint256 _borrowedAmount,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 28 : ICreditManager.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
pragma abicoder v2;
import {ICreditFilter} from "../interfaces/ICreditFilter.sol";
import {IAppCreditManager} from "./app/IAppCreditManager.sol";
import {DataTypes} from "../libraries/data/Types.sol";
/// @title Credit Manager interface
/// @notice It encapsulates business logic for managing credit accounts
///
/// More info: https://dev.gearbox.fi/developers/credit/credit_manager
interface ICreditManager is IAppCreditManager {
// Emits each time when the credit account is opened
event OpenCreditAccount(
address indexed sender,
address indexed onBehalfOf,
address indexed creditAccount,
uint256 amount,
uint256 borrowAmount,
uint256 referralCode
);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 28 : AddressProvider.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {IAppAddressProvider} from "../interfaces/app/IAppAddressProvider.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
/// @title AddressRepository
/// @notice Stores addresses of deployed contracts
contract AddressProvider is Ownable, IAppAddressProvider {
// Mapping which keeps all addresses
mapping(bytes32 => address) public addresses;
// Emits each time when new address is set
event AddressSet(bytes32 indexed service, address indexed newAddress);
// This event is triggered when a call to ClaimTokens succeeds.
event Claimed(uint256 user_id, address account, uint256 amount, bytes32 leaf);
// Repositories & services
bytes32 public constant CONTRACTS_REGISTER = "CONTRACTS_REGISTER";
bytes32 public constant ACL = "ACL";
bytes32 public constant PRICE_ORACLE = "PRICE_ORACLE";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 28 : ContractsRegister.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {Errors} from "../libraries/helpers/Errors.sol";
import {ACLTrait} from "./ACLTrait.sol";
/// @title Pools & Contract managers registry
/// @notice Keeps pools & contract manager addresses
contract ContractsRegister is ACLTrait {
// Pools list
address[] public pools;
mapping(address => bool) public isPool;
// Credit Managers list
address[] public creditManagers;
mapping(address => bool) public isCreditManager;
// Contract version
uint256 public constant version = 1;
// emits each time when new pool was added to register
event NewPoolAdded(address indexed pool);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 28 : CreditAccount.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {Initializable} from "@openzeppelin/contracts/proxy/Initializable.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
import {ICreditAccount} from "../interfaces/ICreditAccount.sol";
import {Constants} from "../libraries/helpers/Constants.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
/// @title Credit Account
/// @notice Implements generic credit account logic:
/// - Keeps token balances
/// - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized
/// - Approves tokens for 3rd party contracts
/// - Transfers assets
/// - Execute financial orders
///
/// More: https://dev.gearbox.fi/developers/credit/credit_account
contract CreditAccount is ICreditAccount, Initializable {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 28 : ACLTrait.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {AddressProvider} from "./AddressProvider.sol";
import {ACL} from "./ACL.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
/// @title ACL Trait
/// @notice Trait which adds acl functions to contract
abstract contract ACLTrait is Pausable {
// ACL contract to check rights
ACL private _acl;
/// @dev constructor
/// @param addressProvider Address of address repository
constructor(address addressProvider) {
require(
addressProvider != address(0),
Errors.ZERO_ADDRESS_IS_NOT_ALLOWED
);
_acl = ACL(AddressProvider(addressProvider).getACL());
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 28 : ReentrancyGuard.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 28 : Types.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
/// @title DataType library
/// @notice Contains data types used in data compressor.
library DataTypes {
struct Exchange {
address[] path;
uint256 amountOutMin;
}
struct TokenBalance {
address token;
uint256 balance;
bool isAllowed;
}
struct ContractAdapter {
address allowedContract;
address adapter;
}
struct CreditAccountData {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 28 : Errors.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
/// @title Errors library
library Errors {
//
// COMMON
//
string public constant ZERO_ADDRESS_IS_NOT_ALLOWED = "Z0";
string public constant NOT_IMPLEMENTED = "NI";
string public constant INCORRECT_PATH_LENGTH = "PL";
string public constant INCORRECT_ARRAY_LENGTH = "CR";
string public constant REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY = "CP";
string public constant REGISTERED_POOLS_ONLY = "RP";
string public constant INCORRECT_PARAMETER = "IP";
//
// MATH
//
string public constant MATH_MULTIPLICATION_OVERFLOW = "M1";
string public constant MATH_ADDITION_OVERFLOW = "M2";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 28 : ICreditFilter.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
interface ICreditFilter {
// Emits each time token is allowed or liquidtion threshold changed
event TokenAllowed(address indexed token, uint256 liquidityThreshold);
// Emits each time token is allowed or liquidtion threshold changed
event TokenForbidden(address indexed token);
// Emits each time contract is allowed or adapter changed
event ContractAllowed(address indexed protocol, address indexed adapter);
// Emits each time contract is forbidden
event ContractForbidden(address indexed protocol);
// Emits each time when fast check parameters are updated
event NewFastCheckParameters(uint256 chiThreshold, uint256 fastCheckDelay);
event TransferAccountAllowed(
address indexed from,
address indexed to,
bool state
);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 28 : IAppCreditManager.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
pragma abicoder v2;
import {DataTypes} from "../../libraries/data/Types.sol";
/// @title Optimised for front-end credit Manager interface
/// @notice It's optimised for light-weight abi
interface IAppCreditManager {
function openCreditAccount(
uint256 amount,
address onBehalfOf,
uint256 leverageFactor,
uint256 referralCode
) external;
function closeCreditAccount(address to, DataTypes.Exchange[] calldata paths)
external;
function repayCreditAccount(address to) external;
function increaseBorrowedAmount(uint256 amount) external;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 28 : IAppAddressProvider.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
/// @title Optimised for front-end Address Provider interface
interface IAppAddressProvider {
function getDataCompressor() external view returns (address);
function getGearToken() external view returns (address);
function getWethToken() external view returns (address);
function getWETHGateway() external view returns (address);
function getPriceOracle() external view returns (address);
function getLeveragedActions() external view returns (address);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 28 : Ownable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 28 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 28 : Pausable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "./Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 28 : ACL.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
/// @title ACL keeps admins addresses
/// More info: https://dev.gearbox.fi/security/roles
contract ACL is Ownable {
mapping(address => bool) public pausableAdminSet;
mapping(address => bool) public unpausableAdminSet;
// Contract version
uint256 public constant version = 1;
// emits each time when new pausable admin added
event PausableAdminAdded(address indexed newAdmin);
// emits each time when pausable admin removed
event PausableAdminRemoved(address indexed admin);
// emits each time when new unpausable admin added
event UnpausableAdminAdded(address indexed newAdmin);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 28 : Initializable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// solhint-disable-next-line compiler-version
pragma solidity >=0.4.24 <0.8.0;
import "../utils/Address.sol";
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*/
abstract contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
*/
bool private _initialized;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 28 : Address.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 28 : IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 28 : SafeERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "./IERC20.sol";
import "../../math/SafeMath.sol";
import "../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 28 : Constants.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-2.0-or-later
// Gearbox Protocol. Generalized leverage for DeFi protocols
// (c) Gearbox Holdings, 2021
pragma solidity ^0.7.4;
import {PercentageMath} from "../math/PercentageMath.sol";
library Constants {
uint256 constant MAX_INT =
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
// 25% of MAX_INT
uint256 constant MAX_INT_4 =
0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
// REWARD FOR LEAN DEPLOYMENT MINING
uint256 constant ACCOUNT_CREATION_REWARD = 1e5;
uint256 constant DEPLOYMENT_COST = 1e17;
// FEE = 10%
uint256 constant FEE_INTEREST = 1000; // 10%
// FEE + LIQUIDATION_FEE 2%
uint256 constant FEE_LIQUIDATION = 200;
// Liquidation premium 5%
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 28 : PercentageMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.7.4;
import {Errors} from "../helpers/Errors.sol";
/**
* @title PercentageMath library
* @author Aave
* @notice Provides functions to perform percentage calculations
* @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR
* @dev Operations are rounded half up
**/
library PercentageMath {
uint256 constant PERCENTAGE_FACTOR = 1e4; //percentage plus two decimals
uint256 constant HALF_PERCENT = PERCENTAGE_FACTOR / 2;
/**
* @dev Executes a percentage multiplication
* @param value The value of which the percentage needs to be calculated
* @param percentage The percentage of the value to be calculated
* @return The percentage of value
**/
function percentMul(uint256 value, uint256 percentage)
internal
pure
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"addressProvider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"}],"name":"AccountMinerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"creditManager","type":"address"}],"name":"InitializeCreditAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"NewCreditAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ReturnCreditAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creditAccount","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"TakeForever","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_contractsRegister","outputs":[{"internalType":"contract ContractsRegister","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addCreditAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"swapContract","type":"address"}],"internalType":"struct DataTypes.MiningApproval[]","name":"_miningApprovals","type":"tuple[]"}],"name":"addMiningApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"targetContract","type":"address"}],"name":"cancelAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countCreditAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countCreditAccountsInStock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"creditAccounts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creditAccount","type":"address"}],"name":"getNext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"head","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isCreditAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMiningFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterCreditAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mineCreditAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"miningApprovals","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"swapContract","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usedAccount","type":"address"}],"name":"returnCreditAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tail","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_borrowedAmount","type":"uint256"},{"internalType":"uint256","name":"_cumulativeIndexAtOpen","type":"uint256"}],"name":"takeCreditAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prev","type":"address"},{"internalType":"address","name":"creditAccount","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"takeOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620053423803806200534283398181016040528101906200003791906200096b565b8060008060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001275780820151818401526020810190506200010a565b50505050905090810190601f168015620001555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d6020811015620001d757600080fd5b8101908080519060200190929190505050600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060018081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090620002db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d29190620009d8565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032357600080fd5b505afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200096b565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003ac9062000946565b604051809103906000f080158015620003c9573d6000803e3d6000fd5b50600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506200049e6200058760201b60201c565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000aad565b6000620005c1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200076860201b620025c01760201c565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200060c57600080fd5b505af115801562000621573d6000803e3d6000fd5b505050508060026000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007218160066200087160201b620026c81790919060201c565b508073ffffffffffffffffffffffffffffffffffffffff167f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc360405160405180910390a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f455243313136373a20637265617465206661696c65640000000000000000000081525060200191505060405180910390fd5b919050565b6000620008a1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620008a960201b60201c565b905092915050565b6000620008bd83836200092360201b60201c565b620009185782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200091d565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6116638062003cdf83390190565b600081519050620009658162000a93565b92915050565b6000602082840312156200097e57600080fd5b60006200098e8482850162000954565b91505092915050565b6000620009a482620009fc565b620009b0818562000a07565b9350620009c281856020860162000a4c565b620009cd8162000a82565b840191505092915050565b60006020820190508181036000830152620009f4818462000997565b905092915050565b600081519050919050565b600082825260208201905092915050565b600062000a258262000a2c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000a6c57808201518184015260208101905062000a4f565b8381111562000a7c576000848401525b50505050565b6000601f19601f8301169050919050565b62000a9e8162000a18565b811462000aaa57600080fd5b50565b6132228062000abd6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638456cb59116100c3578063b014352f1161007c578063b014352f14610343578063b19397631461034d578063b60e85181461036b578063d82ecc4814610389578063e3ba9ace146103b9578063f23953ab146103e95761014d565b80638456cb591461029457806388f64c541461029e57806389b77b3e146102bc5780638f7dcfa3146102d85780639c650789146102f6578063a904aab6146103275761014d565b80633b9c4867116101155780633b9c4867146101e45780633f4ba83a1461020057806354fd4d501461020a5780635c975abb146102285780635da33c5b14610246578063765e0159146102645761014d565b806313d8c8401461015257806321d184561461017057806323428dbd146101a05780632932472f146101be5780633a1ed19a146101da575b600080fd5b61015a6103f3565b6040516101679190612ee8565b60405180910390f35b61018a60048036038101906101859190612e0a565b610419565b6040516101979190612ee8565b60405180910390f35b6101a8610781565b6040516101b59190612fec565b60405180910390f35b6101d860048036038101906101d39190612cfb565b610794565b005b6101e2610ee0565b005b6101fe60048036038101906101f99190612d4a565b61109e565b005b610208611558565b005b610212611703565b60405161021f9190613044565b60405180910390f35b610230611708565b60405161023d9190612fec565b60405180910390f35b61024e61171e565b60405161025b9190612ee8565b60405180910390f35b61027e60048036038101906102799190612cd2565b611744565b60405161028b9190612ee8565b60405180910390f35b61029c6117ad565b005b6102a6611958565b6040516102b39190613007565b60405180910390f35b6102d660048036038101906102d19190612cd2565b61197e565b005b6102e0611d4d565b6040516102ed9190612ee8565b60405180910390f35b610310600480360381019061030b9190612db8565b611d73565b60405161031e929190612f55565b60405180910390f35b610341600480360381019061033c9190612cfb565b611de7565b005b61034b611ffa565b005b6103556122d0565b6040516103629190613044565b60405180910390f35b6103736123aa565b6040516103809190613044565b60405180910390f35b6103a3600480360381019061039e9190612cd2565b6123bb565b6040516103b09190612fec565b60405180910390f35b6103d360048036038101906103ce9190612db8565b6123d8565b6040516103e09190612ee8565b60405180910390f35b6103f16123f5565b005b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b336040518263ffffffff1660e01b81526004016104769190612f03565b60206040518083038186803b15801561048e57600080fd5b505afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190612d8f565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061053d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105349190613022565b60405180910390fd5b506105466126f8565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c75b5a713386866040518463ffffffff1660e01b81526004016106eb93929190612f1e565b600060405180830381600087803b15801561070557600080fd5b505af1158015610719573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10360405160405180910390a38091505092915050565b600960149054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561081d57600080fd5b505afa158015610831573d6000803e3d6000fd5b505050506040513d602081101561084757600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090610934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108f95780820151818401526020810190506108de565b50505050905090810190601f1680156109265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061093d6126f8565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b01576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610dfc565b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f414633000000000000000000000000000000000000000000000000000000000081525090610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd9190613022565b60405180910390fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c9f5782600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff1663c75b5a71826000806040518463ffffffff1660e01b8152600401610e3a93929190612f7e565b600060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b50505050610e808260066127b990919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6957600080fd5b505afa158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090611080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561104557808201518184015260208101905061102a565b50505050905090810190601f1680156110725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506001600960146101000a81548160ff021916908315150217905550565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c32000000000000000000000000000000000000000000000000000000008152509061123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112035780820151818401526020810190506111e8565b50505050905090810190601f1680156112305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600960149054906101000a900460ff16156040518060400160405280600381526020017f4146320000000000000000000000000000000000000000000000000000000000815250906112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be9190613022565b60405180910390fd5b5060005b8282905081101561155357600073ffffffffffffffffffffffffffffffffffffffff168383838181106112fa57fe5b90506040020160000160208101906113129190612cd2565b73ffffffffffffffffffffffffffffffffffffffff16141580156113865750600073ffffffffffffffffffffffffffffffffffffffff1683838381811061135557fe5b905060400201602001602081019061136d9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a30000000000000000000000000000000000000000000000000000000000000815250906113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49190613022565b60405180910390fd5b506000604051806040016040528085858581811061141757fe5b905060400201600001602081019061142f9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff16815260200185858581811061145657fe5b905060400201602001602081019061146e9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff168152509050600881908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505080806001019150506112cb565b505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4eb5db0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d602081101561160b57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3100000000000000000000000000000000000000000000000000000000815250906116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116bd5780820151818401526020810190506116a2565b50505050905090810190601f1680156116ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506117016127e9565b565b600181565b60008060009054906101000a900460ff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a41ec64336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561183657600080fd5b505afa15801561184a573d6000803e3d6000fd5b505050506040513d602081101561186057600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c31000000000000000000000000000000000000000000000000000000008152509061194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119125780820151818401526020810190506118f7565b50505050905090810190601f16801561193f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506119566128d3565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b336040518263ffffffff1660e01b81526004016119d99190612f03565b60206040518083038186803b1580156119f157600080fd5b505afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612d8f565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979190613022565b60405180910390fd5b50611ab58160066129be90919063ffffffff16565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239190613022565b60405180910390fd5b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7457600080fd5b505afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac9190612de1565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c9190613022565b60405180910390fd5b508060026000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5660405160405180910390a250565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088181548110611d8357600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e7057600080fd5b505afa158015611e84573d6000803e3d6000fd5b505050506040513d6020811015611e9a57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090611f87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4c578082015181840152602081019050611f31565b50505050905090810190601f168015611f795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508273ffffffffffffffffffffffffffffffffffffffff166319a1603983836040518363ffffffff1660e01b8152600401611fc3929190612f55565b600060405180830381600087803b158015611fdd57600080fd5b505af1158015611ff1573d6000803e3d6000fd5b50505050505050565b60026001541415612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600960149054906101000a900460ff16156040518060400160405280600381526020017f414632000000000000000000000000000000000000000000000000000000000081525090612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa9190613022565b60405180910390fd5b5061210c6123f5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c75b5a71306001806040518463ffffffff1660e01b815260040161216c93929190612fb5565b600060405180830381600087803b15801561218657600080fd5b505af115801561219a573d6000803e3d6000fd5b5050505060005b6008805490508110156122c657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166303105b04600883815481106121f957fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008848154811061223857fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612287929190612f55565b600060405180830381600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b5050505080806001019150506121a1565b5060018081905550565b600080600090506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123a257600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506122ff565b819250505090565b60006123b660066129ee565b905090565b60006123d18260066129be90919063ffffffff16565b9050919050565b60006123ee826006612a0390919063ffffffff16565b9050919050565b6000612422600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166125c0565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050508060026000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125798160066126c890919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc360405160405180910390a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f455243313136373a20637265617465206661696c65640000000000000000000081525060200191505060405180910390fd5b919050565b60006126f0836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff1660026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127b7576127b66123f5565b5b565b60006127e1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a8d565b905092915050565b6127f1611708565b612863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128a6612b75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6128db611708565b1561294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612991612b75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006129e6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b7d565b905092915050565b60006129fc82600001612ba0565b9050919050565b6000612a128360000183612bb1565b60001c905092915050565b6000612a298383612b7d565b612a82578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612a87565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114612b695760006001820390506000600186600001805490500390506000866000018281548110612ad857fe5b9060005260206000200154905080876000018481548110612af557fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480612b2d57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612b6f565b60009150505b92915050565b600033905090565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b600081836000018054905011612c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131cb6022913960400191505060405180910390fd5b826000018281548110612c2157fe5b9060005260206000200154905092915050565b600081359050612c4381613185565b92915050565b60008083601f840112612c5b57600080fd5b8235905067ffffffffffffffff811115612c7457600080fd5b602083019150836040820283011115612c8c57600080fd5b9250929050565b600081519050612ca28161319c565b92915050565b600081359050612cb7816131b3565b92915050565b600081519050612ccc816131b3565b92915050565b600060208284031215612ce457600080fd5b6000612cf284828501612c34565b91505092915050565b600080600060608486031215612d1057600080fd5b6000612d1e86828701612c34565b9350506020612d2f86828701612c34565b9250506040612d4086828701612c34565b9150509250925092565b60008060208385031215612d5d57600080fd5b600083013567ffffffffffffffff811115612d7757600080fd5b612d8385828601612c49565b92509250509250929050565b600060208284031215612da157600080fd5b6000612daf84828501612c93565b91505092915050565b600060208284031215612dca57600080fd5b6000612dd884828501612ca8565b91505092915050565b600060208284031215612df357600080fd5b6000612e0184828501612cbd565b91505092915050565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612ca8565b9250506020612e3c85828601612ca8565b9150509250929050565b612e4f816130c3565b82525050565b612e5e8161307b565b82525050565b612e6d8161308d565b82525050565b612e7c816130d5565b82525050565b612e8b816130f9565b82525050565b612e9a8161310b565b82525050565b6000612eab8261305f565b612eb5818561306a565b9350612ec5818560208601613141565b612ece81613174565b840191505092915050565b612ee2816130b9565b82525050565b6000602082019050612efd6000830184612e55565b92915050565b6000602082019050612f186000830184612e46565b92915050565b6000606082019050612f336000830186612e46565b612f406020830185612ed9565b612f4d6040830184612ed9565b949350505050565b6000604082019050612f6a6000830185612e55565b612f776020830184612e55565b9392505050565b6000606082019050612f936000830186612e55565b612fa06020830185612e82565b612fad6040830184612e82565b949350505050565b6000606082019050612fca6000830186612e55565b612fd76020830185612e91565b612fe46040830184612e91565b949350505050565b60006020820190506130016000830184612e64565b92915050565b600060208201905061301c6000830184612e73565b92915050565b6000602082019050818103600083015261303c8184612ea0565b905092915050565b60006020820190506130596000830184612ed9565b92915050565b600081519050919050565b600082825260208201905092915050565b600061308682613099565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006130ce8261311d565b9050919050565b60006130e0826130e7565b9050919050565b60006130f282613099565b9050919050565b6000613104826130b9565b9050919050565b6000613116826130b9565b9050919050565b60006131288261312f565b9050919050565b600061313a82613099565b9050919050565b60005b8381101561315f578082015181840152602081019050613144565b8381111561316e576000848401525b50505050565b6000601f19601f8301169050919050565b61318e8161307b565b811461319957600080fd5b50565b6131a58161308d565b81146131b057600080fd5b50565b6131bc816130b9565b81146131c757600080fd5b5056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473a2646970667358221220d35afee5f580e5ddbe154a69b7ccf958f11fe3eba58fb7b8da80a9596b8f72e164736f6c63430007060033608060405234801561001057600080fd5b50611643806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633dc54b401161008c578063c12c21c011610066578063c12c21c0146103aa578063c45a0155146103de578063c75b5a7114610412578063d1660f991461046a576100cf565b80633dc54b401461036457806354fd4d50146103825780638129fc1c146103a0576100cf565b806303105b04146100d4578063161282111461013857806317d11a151461017057806319a160391461018e5780631afbb7a4146101f25780631cff79cd14610210575b600080fd5b610136600480360360408110156100ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104d8565b005b61016e6004803603604081101561014e57600080fd5b810190808035906020019092919080359060200190929190505050610681565b005b6101786107c1565b6040518082815260200191505060405180910390f35b6101f0600480360360408110156101a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107c7565b005b6101fa610925565b6040518082815260200191505060405180910390f35b6102e96004803603604081101561022657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061092b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561032957808201518184015260208101905061030e565b50505050905090810190601f1680156103565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61036c610a8c565b6040518082815260200191505060405180910390f35b61038a610a92565b6040518082815260200191505060405180910390f35b6103a8610a97565b005b6103b2610bd6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e6610bfc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104686004803603606081101561042857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610c22565b005b6104d66004803603606081101561048057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dab565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434131000000000000000000000000000000000000000000000000000000000081525090610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105ca5780820151818401526020810190506105af565b50505050905090810190601f1680156105f75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506106328160008473ffffffffffffffffffffffffffffffffffffffff16610f099092919063ffffffff16565b61067d817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16610f099092919063ffffffff16565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f4341310000000000000000000000000000000000000000000000000000000000815250906107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610773578082015181840152602081019050610758565b50505050905090810190601f1680156107a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5081600281905550806003819055505050565b60035481565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f4341320000000000000000000000000000000000000000000000000000000000815250906108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108b957808201518184015260208101905061089e565b50505050905090810190601f1680156108e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506109218160008473ffffffffffffffffffffffffffffffffffffffff16610f099092919063ffffffff16565b5050565b60025481565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434131000000000000000000000000000000000000000000000000000000000081525090610a5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a1f578082015181840152602081019050610a04565b50505050905090810190601f168015610a4c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610a84828473ffffffffffffffffffffffffffffffffffffffff166110ce90919063ffffffff16565b905092915050565b60045481565b600181565b600060019054906101000a900460ff1680610ab65750610ab5611118565b5b80610acc575060008054906101000a900460ff16155b610b21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611580602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610b71576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b33600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610bd35760008060016101000a81548160ff0219169083151502179055505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434132000000000000000000000000000000000000000000000000000000000081525090610d4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d14578082015181840152602081019050610cf9565b50505050905090810190601f168015610d415780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816002819055508060038190555043600481905550505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434131000000000000000000000000000000000000000000000000000000000081525090610ed8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e9d578082015181840152602081019050610e82565b50505050905090810190601f168015610eca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610f0482828573ffffffffffffffffffffffffffffffffffffffff166111299092919063ffffffff16565b505050565b6000811480610fd7575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610f9a57600080fd5b505afa158015610fae573d6000803e3d6000fd5b505050506040513d6020811015610fc457600080fd5b8101908080519060200190929190505050145b61102c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806115d86036913960400191505060405180910390fd5b6110c98363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506111cb565b505050565b606061111083836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506112ba565b905092915050565b6000611123306112d2565b15905090565b6111c68363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506111cb565b505050565b600061122d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112ba9092919063ffffffff16565b90506000815111156112b55780806020019051602081101561124e57600080fd5b81019080805190602001909291905050506112b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806115ae602a913960400191505060405180910390fd5b5b505050565b60606112c984846000856112e5565b90509392505050565b600080823b905060008111915050919050565b606082471015611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061155a6026913960400191505060405180910390fd5b611349856112d2565b6113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061140a57805182526020820191506020810190506020830392506113e7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461146c576040519150601f19603f3d011682016040523d82523d6000602084013e611471565b606091505b509150915061148182828661148d565b92505050949350505050565b6060831561149d57829050611552565b6000835111156114b05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115175780820151818401526020810190506114fc565b50505050905090810190601f1680156115445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122000b9e2028968c993ae9a138a342113407bde412d08bb03bf5e09e502dddd449564736f6c63430007060033000000000000000000000000cf64698aff7e5f27a11dff868af228653ba53be0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638456cb59116100c3578063b014352f1161007c578063b014352f14610343578063b19397631461034d578063b60e85181461036b578063d82ecc4814610389578063e3ba9ace146103b9578063f23953ab146103e95761014d565b80638456cb591461029457806388f64c541461029e57806389b77b3e146102bc5780638f7dcfa3146102d85780639c650789146102f6578063a904aab6146103275761014d565b80633b9c4867116101155780633b9c4867146101e45780633f4ba83a1461020057806354fd4d501461020a5780635c975abb146102285780635da33c5b14610246578063765e0159146102645761014d565b806313d8c8401461015257806321d184561461017057806323428dbd146101a05780632932472f146101be5780633a1ed19a146101da575b600080fd5b61015a6103f3565b6040516101679190612ee8565b60405180910390f35b61018a60048036038101906101859190612e0a565b610419565b6040516101979190612ee8565b60405180910390f35b6101a8610781565b6040516101b59190612fec565b60405180910390f35b6101d860048036038101906101d39190612cfb565b610794565b005b6101e2610ee0565b005b6101fe60048036038101906101f99190612d4a565b61109e565b005b610208611558565b005b610212611703565b60405161021f9190613044565b60405180910390f35b610230611708565b60405161023d9190612fec565b60405180910390f35b61024e61171e565b60405161025b9190612ee8565b60405180910390f35b61027e60048036038101906102799190612cd2565b611744565b60405161028b9190612ee8565b60405180910390f35b61029c6117ad565b005b6102a6611958565b6040516102b39190613007565b60405180910390f35b6102d660048036038101906102d19190612cd2565b61197e565b005b6102e0611d4d565b6040516102ed9190612ee8565b60405180910390f35b610310600480360381019061030b9190612db8565b611d73565b60405161031e929190612f55565b60405180910390f35b610341600480360381019061033c9190612cfb565b611de7565b005b61034b611ffa565b005b6103556122d0565b6040516103629190613044565b60405180910390f35b6103736123aa565b6040516103809190613044565b60405180910390f35b6103a3600480360381019061039e9190612cd2565b6123bb565b6040516103b09190612fec565b60405180910390f35b6103d360048036038101906103ce9190612db8565b6123d8565b6040516103e09190612ee8565b60405180910390f35b6103f16123f5565b005b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b336040518263ffffffff1660e01b81526004016104769190612f03565b60206040518083038186803b15801561048e57600080fd5b505afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190612d8f565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061053d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105349190613022565b60405180910390fd5b506105466126f8565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c75b5a713386866040518463ffffffff1660e01b81526004016106eb93929190612f1e565b600060405180830381600087803b15801561070557600080fd5b505af1158015610719573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10360405160405180910390a38091505092915050565b600960149054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561081d57600080fd5b505afa158015610831573d6000803e3d6000fd5b505050506040513d602081101561084757600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090610934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108f95780820151818401526020810190506108de565b50505050905090810190601f1680156109265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061093d6126f8565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b01576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610dfc565b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f414633000000000000000000000000000000000000000000000000000000000081525090610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd9190613022565b60405180910390fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c9f5782600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff1663c75b5a71826000806040518463ffffffff1660e01b8152600401610e3a93929190612f7e565b600060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b50505050610e808260066127b990919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6957600080fd5b505afa158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090611080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561104557808201518184015260208101905061102a565b50505050905090810190601f1680156110725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506001600960146101000a81548160ff021916908315150217905550565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c32000000000000000000000000000000000000000000000000000000008152509061123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112035780820151818401526020810190506111e8565b50505050905090810190601f1680156112305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600960149054906101000a900460ff16156040518060400160405280600381526020017f4146320000000000000000000000000000000000000000000000000000000000815250906112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be9190613022565b60405180910390fd5b5060005b8282905081101561155357600073ffffffffffffffffffffffffffffffffffffffff168383838181106112fa57fe5b90506040020160000160208101906113129190612cd2565b73ffffffffffffffffffffffffffffffffffffffff16141580156113865750600073ffffffffffffffffffffffffffffffffffffffff1683838381811061135557fe5b905060400201602001602081019061136d9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a30000000000000000000000000000000000000000000000000000000000000815250906113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49190613022565b60405180910390fd5b506000604051806040016040528085858581811061141757fe5b905060400201600001602081019061142f9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff16815260200185858581811061145657fe5b905060400201602001602081019061146e9190612cd2565b73ffffffffffffffffffffffffffffffffffffffff168152509050600881908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505080806001019150506112cb565b505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4eb5db0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d602081101561160b57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3100000000000000000000000000000000000000000000000000000000815250906116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116bd5780820151818401526020810190506116a2565b50505050905090810190601f1680156116ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506117016127e9565b565b600181565b60008060009054906101000a900460ff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a41ec64336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561183657600080fd5b505afa15801561184a573d6000803e3d6000fd5b505050506040513d602081101561186057600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c31000000000000000000000000000000000000000000000000000000008152509061194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119125780820151818401526020810190506118f7565b50505050905090810190601f16801561193f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506119566128d3565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b336040518263ffffffff1660e01b81526004016119d99190612f03565b60206040518083038186803b1580156119f157600080fd5b505afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612d8f565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979190613022565b60405180910390fd5b50611ab58160066129be90919063ffffffff16565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239190613022565b60405180910390fd5b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7457600080fd5b505afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac9190612de1565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c9190613022565b60405180910390fd5b508060026000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5660405160405180910390a250565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088181548110611d8357600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e7057600080fd5b505afa158015611e84573d6000803e3d6000fd5b505050506040513d6020811015611e9a57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090611f87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4c578082015181840152602081019050611f31565b50505050905090810190601f168015611f795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508273ffffffffffffffffffffffffffffffffffffffff166319a1603983836040518363ffffffff1660e01b8152600401611fc3929190612f55565b600060405180830381600087803b158015611fdd57600080fd5b505af1158015611ff1573d6000803e3d6000fd5b50505050505050565b60026001541415612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600960149054906101000a900460ff16156040518060400160405280600381526020017f414632000000000000000000000000000000000000000000000000000000000081525090612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa9190613022565b60405180910390fd5b5061210c6123f5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c75b5a71306001806040518463ffffffff1660e01b815260040161216c93929190612fb5565b600060405180830381600087803b15801561218657600080fd5b505af115801561219a573d6000803e3d6000fd5b5050505060005b6008805490508110156122c657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166303105b04600883815481106121f957fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008848154811061223857fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612287929190612f55565b600060405180830381600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b5050505080806001019150506121a1565b5060018081905550565b600080600090506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123a257600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506122ff565b819250505090565b60006123b660066129ee565b905090565b60006123d18260066129be90919063ffffffff16565b9050919050565b60006123ee826006612a0390919063ffffffff16565b9050919050565b6000612422600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166125c0565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050508060026000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125798160066126c890919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc360405160405180910390a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f455243313136373a20637265617465206661696c65640000000000000000000081525060200191505060405180910390fd5b919050565b60006126f0836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a1d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff1660026000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127b7576127b66123f5565b5b565b60006127e1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a8d565b905092915050565b6127f1611708565b612863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128a6612b75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6128db611708565b1561294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612991612b75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006129e6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b7d565b905092915050565b60006129fc82600001612ba0565b9050919050565b6000612a128360000183612bb1565b60001c905092915050565b6000612a298383612b7d565b612a82578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612a87565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114612b695760006001820390506000600186600001805490500390506000866000018281548110612ad857fe5b9060005260206000200154905080876000018481548110612af557fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480612b2d57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612b6f565b60009150505b92915050565b600033905090565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b600081836000018054905011612c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131cb6022913960400191505060405180910390fd5b826000018281548110612c2157fe5b9060005260206000200154905092915050565b600081359050612c4381613185565b92915050565b60008083601f840112612c5b57600080fd5b8235905067ffffffffffffffff811115612c7457600080fd5b602083019150836040820283011115612c8c57600080fd5b9250929050565b600081519050612ca28161319c565b92915050565b600081359050612cb7816131b3565b92915050565b600081519050612ccc816131b3565b92915050565b600060208284031215612ce457600080fd5b6000612cf284828501612c34565b91505092915050565b600080600060608486031215612d1057600080fd5b6000612d1e86828701612c34565b9350506020612d2f86828701612c34565b9250506040612d4086828701612c34565b9150509250925092565b60008060208385031215612d5d57600080fd5b600083013567ffffffffffffffff811115612d7757600080fd5b612d8385828601612c49565b92509250509250929050565b600060208284031215612da157600080fd5b6000612daf84828501612c93565b91505092915050565b600060208284031215612dca57600080fd5b6000612dd884828501612ca8565b91505092915050565b600060208284031215612df357600080fd5b6000612e0184828501612cbd565b91505092915050565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612ca8565b9250506020612e3c85828601612ca8565b9150509250929050565b612e4f816130c3565b82525050565b612e5e8161307b565b82525050565b612e6d8161308d565b82525050565b612e7c816130d5565b82525050565b612e8b816130f9565b82525050565b612e9a8161310b565b82525050565b6000612eab8261305f565b612eb5818561306a565b9350612ec5818560208601613141565b612ece81613174565b840191505092915050565b612ee2816130b9565b82525050565b6000602082019050612efd6000830184612e55565b92915050565b6000602082019050612f186000830184612e46565b92915050565b6000606082019050612f336000830186612e46565b612f406020830185612ed9565b612f4d6040830184612ed9565b949350505050565b6000604082019050612f6a6000830185612e55565b612f776020830184612e55565b9392505050565b6000606082019050612f936000830186612e55565b612fa06020830185612e82565b612fad6040830184612e82565b949350505050565b6000606082019050612fca6000830186612e55565b612fd76020830185612e91565b612fe46040830184612e91565b949350505050565b60006020820190506130016000830184612e64565b92915050565b600060208201905061301c6000830184612e73565b92915050565b6000602082019050818103600083015261303c8184612ea0565b905092915050565b60006020820190506130596000830184612ed9565b92915050565b600081519050919050565b600082825260208201905092915050565b600061308682613099565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006130ce8261311d565b9050919050565b60006130e0826130e7565b9050919050565b60006130f282613099565b9050919050565b6000613104826130b9565b9050919050565b6000613116826130b9565b9050919050565b60006131288261312f565b9050919050565b600061313a82613099565b9050919050565b60005b8381101561315f578082015181840152602081019050613144565b8381111561316e576000848401525b50505050565b6000601f19601f8301169050919050565b61318e8161307b565b811461319957600080fd5b50565b6131a58161308d565b81146131b057600080fd5b50565b6131bc816130b9565b81146131c757600080fd5b5056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473a2646970667358221220d35afee5f580e5ddbe154a69b7ccf958f11fe3eba58fb7b8da80a9596b8f72e164736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cf64698aff7e5f27a11dff868af228653ba53be0

-----Decoded View---------------
Arg [0] : addressProvider (address): 0xcF64698AFF7E5f27A11dff868AF228653ba53be0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf64698aff7e5f27a11dff868af228653ba53be0


Block Age Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Age Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Age Amount
View All Withdrawals

Transaction Hash Block Age Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.