ETH Price: $3,863.27 (-1.24%)

Token

Frax (FRAX)
 

Overview

Max Total Supply

649,433,438.165933932136527132 FRAX

Holders

9,302 ( -0.032%)
Created with Highcharts 10.2.1

Market

Price

$1.00 @ 0.000258 ETH (+0.13%)

Onchain Market Cap

$646,964,292.23

Circulating Supply Market Cap

$646,943,305.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.726530466372980106 FRAX

Value
$0.72 ( ~0.000186370530068031 Eth) [0.0000%]
0x2f68457ce61a870625ad8f601d4b7ac4b1f8a60a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Frax is a fractional-algorithmic stablecoin protocol. It aims to provide a highly scalable, decentralized, algorithmic money in place of fixed-supply assets like BTC. Additionally, FXS is the value accrual and governance token of the entire Frax ecosystem.

Market

Volume (24H):$5,769,493.00
Market Capitalization:$646,943,305.00
Circulating Supply:649,433,438.00 FRAX
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FRAXStablecoin

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 17 of 71: Frax.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./Context.sol";
import "./IERC20.sol";
import "./ERC20Custom.sol";
import "./ERC20.sol";
import "./SafeMath.sol";
import "./FXS.sol";
import "./FraxPool.sol";
import "./UniswapPairOracle.sol";
import "./ChainlinkETHUSDPriceConsumer.sol";
import "./AccessControl.sol";
contract FRAXStablecoin is ERC20Custom, AccessControl {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 1 of 71: AccessControl.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "./EnumerableSet.sol";
import "./Address.sol";
import "./Context.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 71: Address.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
/**
* @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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 71: AggregatorV3Interface.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
// getRoundData and latestRoundData should both raise "No data present"
// if they do not have data to report, instead of returning unset values
// which could be misinterpreted as actual reported values.
function getRoundData(uint80 _roundId)
external
view
returns (
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 71: Babylonian.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// computes square roots using the babylonian method
// https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method
library Babylonian {
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 71: BlockMiner.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// file: BlockMinder.sol
// used to "waste" blocks for truffle tests
contract BlockMiner {
uint256 public blocksMined;
constructor () public {
blocksMined = 0;
}
function mine() public {
blocksMined += 1;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 71: ChainlinkETHUSDPriceConsumer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./AggregatorV3Interface.sol";
contract ChainlinkETHUSDPriceConsumer {
AggregatorV3Interface internal priceFeed;
constructor() public {
priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
}
/**
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 71: ChainlinkETHUSDPriceConsumerTest.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./AggregatorV3Interface.sol";
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
// VERY IMPORTANT: UNCOMMENT THIS LATER
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 71: Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
/*
* @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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 71: EnumerableSet.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.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.
*
* ```
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 71: ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Address.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20Mintable}.
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 71: ERC20Custom.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Address.sol";
// Due to compiling issues, _name, _symbol, and _decimals were removed
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 71: FakeCollateral.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Address.sol";
// Due to compiling issues, _name, _symbol, and _decimals were removed
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 71: FakeCollateral_USDC.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FakeCollateral.sol";
contract FakeCollateral_USDC is FakeCollateral {
constructor(
address _creator_address,
uint256 _genesis_supply,
string memory _symbol,
uint8 _decimals
)
FakeCollateral(_creator_address, _genesis_supply, _symbol, _decimals)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 71: FakeCollateral_USDT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FakeCollateral.sol";
contract FakeCollateral_USDT is FakeCollateral {
constructor(
address _creator_address,
uint256 _genesis_supply,
string memory _symbol,
uint8 _decimals
)
FakeCollateral(_creator_address, _genesis_supply, _symbol, _decimals)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 71: FakeCollateral_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FakeCollateral.sol";
contract FakeCollateral_WETH is FakeCollateral {
constructor(
address _creator_address,
uint256 _genesis_supply,
string memory _symbol,
uint8 _decimals
)
FakeCollateral(_creator_address, _genesis_supply, _symbol, _decimals)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 71: FixedPoint.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './Babylonian.sol';
// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))
library FixedPoint {
// range: [0, 2**112 - 1]
// resolution: 1 / 2**112
struct uq112x112 {
uint224 _x;
}
// range: [0, 2**144 - 1]
// resolution: 1 / 2**112
struct uq144x112 {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 71: FraxPool.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./SafeMath.sol";
import "./FXS.sol";
import "./Frax.sol";
import "./ERC20.sol";
// import '../../Uniswap/TransferHelper.sol';
import "./UniswapPairOracle.sol";
import "./AccessControl.sol";
// import "../../Utils/StringHelpers.sol";
import "./FraxPoolLibrary.sol";
/*
Same as FraxPool.sol, but has some gas optimizations
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 71: FraxPoolLibrary.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;
import "./SafeMath.sol";
library FraxPoolLibrary {
using SafeMath for uint256;
// Constants for various precisions
uint256 private constant PRICE_PRECISION = 1e6;
// ================ Structs ================
// Needed to lower stack size
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 71: FXS.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./Context.sol";
import "./ERC20Custom.sol";
import "./IERC20.sol";
import "./Frax.sol";
import "./SafeMath.sol";
import "./AccessControl.sol";
contract FRAXShares is ERC20Custom, AccessControl {
using SafeMath for uint256;
/* ========== STATE VARIABLES ========== */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 71: Governance.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./FXS.sol";
// From https://compound.finance/docs/governance
// and https://github.com/compound-finance/compound-protocol/tree/master/contracts/Governance
contract GovernorAlpha {
/// @notice The name of this contract
string public constant name = "FXS Governor Alpha";
/// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed
function quorumVotes() public pure returns (uint) { return 4000000e18; } // 4,000,000 = 4% of FXS
/// @notice The number of votes required in order for a voter to become a proposer
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 71: IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./Context.sol";
import "./SafeMath.sol";
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 71: IStakingRewards.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IStakingRewards {
// Views
function lastTimeRewardApplicable() external view returns (uint256);
function rewardPerToken() external view returns (uint256);
function earned(address account) external view returns (uint256);
function getRewardForDuration() external view returns (uint256);
function totalSupply() external view returns (uint256);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 71: IUniswapV2Callee.sol
1
2
3
4
5
6
7
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IUniswapV2Callee {
function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 71: IUniswapV2ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IUniswapV2ERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 71: IUniswapV2Factory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 71: IUniswapV2Pair.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 71: IUniswapV2Router01.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 29 of 71: IUniswapV2Router02.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Router01.sol';
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 30 of 71: IWETH.sol
1
2
3
4
5
6
7
8
9
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function transferFrom(address src, address dst, uint wad) external returns (bool);
function withdraw(uint) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 31 of 71: Math.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 32 of 71: MigrationHelper.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
contract MigrationHelper {
address public owner;
uint256 public gov_to_timelock_eta;
modifier restricted() {
if (msg.sender == owner) _;
}
constructor(address _owner) public {
owner = _owner;
}
function setGovToTimeLockETA(uint256 _eta) public restricted {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 33 of 71: Migrations.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
contract Migrations {
address public owner;
uint public last_completed_migration;
modifier restricted() {
if (msg.sender == owner) _;
}
constructor() public {
owner = msg.sender;
}
function setCompleted(uint completed) public restricted {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 34 of 71: Owned.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// https://docs.synthetix.io/contracts/Owned
contract Owned {
address public owner;
address public nominatedOwner;
constructor(address _owner) public {
require(_owner != address(0), "Owner address cannot be 0");
owner = _owner;
emit OwnerChanged(address(0), _owner);
}
function nominateNewOwner(address _owner) external onlyOwner {
nominatedOwner = _owner;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 35 of 71: Pausable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// Inheritance
import "./Owned.sol";
// https://docs.synthetix.io/contracts/Pausable
abstract contract Pausable is Owned {
uint public lastPauseTime;
bool public paused;
constructor() internal {
// This contract is abstract, and thus cannot be instantiated directly
require(owner != address(0), "Owner must be set");
// Paused will be false, and lastPauseTime will be 0 upon initialisation
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 36 of 71: Pool_USDC.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FraxPool.sol";
contract Pool_USDC is FraxPool {
address public USDC_address;
constructor(
address _frax_contract_address,
address _fxs_contract_address,
address _collateral_address,
address _creator_address,
address _timelock_address,
uint256 _pool_ceiling
)
FraxPool(_frax_contract_address, _fxs_contract_address, _collateral_address, _creator_address, _timelock_address, _pool_ceiling)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 37 of 71: Pool_USDT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FraxPool.sol";
contract Pool_USDT is FraxPool {
address public USDT_address;
constructor(
address _frax_contract_address,
address _fxs_contract_address,
address _collateral_address,
address _creator_address,
address _timelock_address,
uint256 _pool_ceiling
)
FraxPool(_frax_contract_address, _fxs_contract_address, _collateral_address, _creator_address, _timelock_address, _pool_ceiling)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 38 of 71: ReentrancyGuard.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
/**
* @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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 39 of 71: RewardsDistributionRecipient.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// Inheritance
import "./Owned.sol";
// https://docs.synthetix.io/contracts/RewardsDistributionRecipient
abstract contract RewardsDistributionRecipient is Owned {
address public rewardsDistribution;
//function notifyRewardAmount(uint256 reward) external virtual;
modifier onlyRewardsDistribution() {
require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract");
_;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 40 of 71: SafeERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./IERC20.sol";
import "./SafeMath.sol";
import "./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.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 41 of 71: SafeMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
/**
* @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.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 42 of 71: Stake_FRAX_FXS.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./StakingRewards.sol";
contract Stake_FRAX_FXS is StakingRewards {
constructor(
address _owner,
address _rewardsDistribution,
address _rewardsToken,
address _stakingToken,
address _frax_address,
address _timelock_address,
uint256 _pool_weight
)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 43 of 71: Stake_FRAX_USDC.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./StakingRewards.sol";
contract Stake_FRAX_USDC is StakingRewards {
constructor(
address _owner,
address _rewardsDistribution,
address _rewardsToken,
address _stakingToken,
address _frax_address,
address _timelock_address,
uint256 _pool_weight
)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 44 of 71: Stake_FRAX_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./StakingRewards.sol";
contract Stake_FRAX_WETH is StakingRewards {
constructor(
address _owner,
address _rewardsDistribution,
address _rewardsToken,
address _stakingToken,
address _frax_address,
address _timelock_address,
uint256 _pool_weight
)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 45 of 71: Stake_FXS_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
import "./StakingRewards.sol";
contract Stake_FXS_WETH is StakingRewards {
constructor(
address _owner,
address _rewardsDistribution,
address _rewardsToken,
address _stakingToken,
address _frax_address,
address _timelock_address,
uint256 _pool_weight
)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 46 of 71: StakingRewards.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
pragma experimental ABIEncoderV2;
// Stolen with love from Synthetixio
// https://raw.githubusercontent.com/Synthetixio/synthetix/develop/contracts/StakingRewards.sol
import "./Math.sol";
import "./SafeMath.sol";
import "./ERC20.sol";
import './TransferHelper.sol';
import "./SafeERC20.sol";
import "./Frax.sol";
import "./ReentrancyGuard.sol";
import "./StringHelpers.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 47 of 71: StringHelpers.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
library StringHelpers {
function parseAddr(string memory _a) internal pure returns (address _parsedAddress) {
bytes memory tmp = bytes(_a);
uint160 iaddr = 0;
uint160 b1;
uint160 b2;
for (uint i = 2; i < 2 + 2 * 20; i += 2) {
iaddr *= 256;
b1 = uint160(uint8(tmp[i]));
b2 = uint160(uint8(tmp[i + 1]));
if ((b1 >= 97) && (b1 <= 102)) {
b1 -= 87;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 48 of 71: SwapToPrice.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Pair.sol';
import './Babylonian.sol';
import './SafeMath.sol';
import './TransferHelper.sol';
import './IERC20.sol';
import './IUniswapV2Router01.sol';
import './UniswapV2Library.sol';
contract SwapToPrice {
using SafeMath for uint256;
IUniswapV2Router01 public immutable router;
address public immutable factory;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 49 of 71: TestSwap.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./FakeCollateral_USDT.sol";
import "./FakeCollateral_WETH.sol";
import "./UniswapV2Router02_Modified.sol";
/* IGNORE THIS CONTRACT, ONLY USED FOR TESTING PURPOSES */
contract TestSwap {
address public USDT_address;
address public WETH_address;
UniswapV2Router02_Modified public router;
FakeCollateral_USDT USDT = FakeCollateral_USDT(USDT);
FakeCollateral_WETH WETH = FakeCollateral_WETH(WETH);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 50 of 71: Timelock.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./SafeMath.sol";
contract Timelock {
using SafeMath for uint;
event NewAdmin(address indexed newAdmin);
event NewPendingAdmin(address indexed newPendingAdmin);
event NewDelay(uint indexed newDelay);
event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
uint public constant GRACE_PERIOD = 14 days;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 51 of 71: TokenVesting.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import "./ERC20Custom.sol";
import "./ERC20.sol";
import "./SafeMath.sol";
/**
* @title TokenVesting
* @dev A token holder contract that can release its token balance gradually like a
* typical vesting scheme, with a cliff and vesting period. Optionally revocable by the
* owner.
*
* Modified from OpenZeppelin's TokenVesting.sol draft
*/
contract TokenVesting {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 52 of 71: TransferHelper.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 53 of 71: UniswapPairOracle.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Factory.sol';
import './IUniswapV2Pair.sol';
import './FixedPoint.sol';
import './UniswapV2OracleLibrary.sol';
import './UniswapV2Library.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle {
using FixedPoint for *;
address owner_address;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 54 of 71: UniswapPairOracle_FRAX_FXS.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FRAX_FXS is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 55 of 71: UniswapPairOracle_FRAX_USDC.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FRAX_USDC is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 56 of 71: UniswapPairOracle_FRAX_USDT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FRAX_USDT is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 57 of 71: UniswapPairOracle_FRAX_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FRAX_WETH is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 58 of 71: UniswapPairOracle_FXS_USDC.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FXS_USDC is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 59 of 71: UniswapPairOracle_FXS_USDT.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FXS_USDT is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 60 of 71: UniswapPairOracle_FXS_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_FXS_WETH is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 61 of 71: UniswapPairOracle_USDC_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_USDC_WETH is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 62 of 71: UniswapPairOracle_USDT_WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './UniswapPairOracle.sol';
// Fixed window oracle that recomputes the average price for the entire period once every period
// Note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period
contract UniswapPairOracle_USDT_WETH is UniswapPairOracle {
constructor(address factory, address tokenA, address tokenB, address owner_address, address timelock_address)
UniswapPairOracle(factory, tokenA, tokenB, owner_address, timelock_address)
public {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 63 of 71: UniswapV2ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2ERC20.sol';
import './SafeMath.sol';
contract UniswapV2ERC20 is IUniswapV2ERC20 {
using SafeMath for uint;
string public override constant name = 'Uniswap V2';
string public override constant symbol = 'UNI-V2';
uint8 public override constant decimals = 18;
uint public override totalSupply;
mapping(address => uint) public override balanceOf;
mapping(address => mapping(address => uint)) public override allowance;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 64 of 71: UniswapV2Factory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Factory.sol';
import './UniswapV2Pair.sol';
contract UniswapV2Factory is IUniswapV2Factory {
address public override feeTo;
address public override feeToSetter;
mapping(address => mapping(address => address)) public override getPair;
address[] public override allPairs;
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
constructor(address _feeToSetter) public {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 65 of 71: UniswapV2Library.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Pair.sol';
import './IUniswapV2Factory.sol';
import "./SafeMath.sol";
library UniswapV2Library {
using SafeMath for uint;
// returns sorted token addresses, used to handle return values from pairs sorted in this order
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 66 of 71: UniswapV2OracleLibrary.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Pair.sol';
import './FixedPoint.sol';
// library with helper methods for oracles that are concerned with computing average prices
library UniswapV2OracleLibrary {
using FixedPoint for *;
// helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]
function currentBlockTimestamp() internal view returns (uint32) {
return uint32(block.timestamp % 2 ** 32);
}
// produces the cumulative price using counterfactuals to save gas and avoid a call to sync.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 67 of 71: UniswapV2Pair.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Pair.sol';
import './UniswapV2ERC20.sol';
import './Math.sol';
import './UQ112x112.sol';
import './IERC20.sol';
import './IUniswapV2Factory.sol';
import './IUniswapV2Callee.sol';
contract UniswapV2Pair is IUniswapV2Pair {
using SafeMath for uint;
using UQ112x112 for uint224;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 68 of 71: UniswapV2Router02.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Factory.sol';
import './TransferHelper.sol';
import './IUniswapV2Router02.sol';
import './UniswapV2Library.sol';
import './SafeMath.sol';
import './IERC20.sol';
import './IWETH.sol';
contract UniswapV2Router02 is IUniswapV2Router02 {
using SafeMath for uint;
address public immutable override factory;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 69 of 71: UniswapV2Router02_Modified.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IUniswapV2Factory.sol';
import './TransferHelper.sol';
import './IUniswapV2Router02.sol';
import './UniswapV2Library.sol';
import './SafeMath.sol';
import './IERC20.sol';
import './IWETH.sol';
contract UniswapV2Router02_Modified is IUniswapV2Router02 {
using SafeMath for uint;
address public immutable override factory;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 70 of 71: UQ112x112.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))
// range: [0, 2**112 - 1]
// resolution: 1 / 2**112
library UQ112x112 {
uint224 constant Q112 = 2**112;
// encode a uint112 as a UQ112x112
function encode(uint112 y) internal pure returns (uint224 z) {
z = uint224(y) * Q112; // never overflows
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 71 of 71: WETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity 0.6.11;
import './IWETH.sol';
// Copyright (C) 2015, 2016, 2017 Dapphub
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_creator_address","type":"address"},{"internalType":"address","name":"_timelock_address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FRAXBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FRAXMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COLLATERAL_RATIO_PAUSER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool_address","type":"address"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collateral_ratio_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth_usd_consumer_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eth_usd_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frax_eth_oracle_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frax_info","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frax_pools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"frax_pools_array","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frax_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frax_step","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxs_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxs_eth_oracle_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxs_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalCollateralValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"global_collateral_ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"last_call_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minting_fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"b_address","type":"address"},{"internalType":"uint256","name":"b_amount","type":"uint256"}],"name":"pool_burn_from","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"m_address","type":"address"},{"internalType":"uint256","name":"m_amount","type":"uint256"}],"name":"pool_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price_band","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price_target","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redemption_fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refreshCollateralRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refresh_cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool_address","type":"address"}],"name":"removePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller_address","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_eth_usd_consumer_address","type":"address"}],"name":"setETHUSDOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_frax_oracle_addr","type":"address"},{"internalType":"address","name":"_weth_address","type":"address"}],"name":"setFRAXEthOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fxs_address","type":"address"}],"name":"setFXSAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fxs_oracle_addr","type":"address"},{"internalType":"address","name":"_weth_address","type":"address"}],"name":"setFXSEthOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_step","type":"uint256"}],"name":"setFraxStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"min_fee","type":"uint256"}],"name":"setMintingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_address","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price_band","type":"uint256"}],"name":"setPriceBand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_price_target","type":"uint256"}],"name":"setPriceTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"red_fee","type":"uint256"}],"name":"setRedemptionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_cooldown","type":"uint256"}],"name":"setRefreshCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleCollateralRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052601b805460ff60a01b191690553480156200001e57600080fd5b50604051620041ca380380620041ca83398101604081905262000041916200060f565b835162000056906008906020870190620004ae565b5082516200006c906007906020860190620004ae565b50600a80546001600160a01b038085166001600160a01b031992831617909255600b805492841692909116919091179055620000c56000620000b66001600160e01b03620001b316565b6001600160e01b03620001b816565b620000d86001600160e01b03620001b316565b601b80546001600160a01b03199081166001600160a01b039384161790915560098054909116848316179055600a546200011f91166a01a784379d99db42000000620001d1565b6200015560405162000131906200069d565b604051908190039020600a546001600160a01b03166001600160e01b03620002c616565b6200018b60405162000167906200069d565b604051908190039020600b546001600160a01b03166001600160e01b03620002c616565b50506109c46017555050620f42406014819055610e10601855601955611388601a556200078c565b335b90565b620001cd82826001600160e01b036200031e16565b5050565b6001600160a01b038216620002035760405162461bcd60e51b8152600401620001fa906200074c565b60405180910390fd5b6200021a600083836001600160e01b03620003a216565b6200023681600254620003a760201b620023f71790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000269918390620023f7620003a7821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620002ba90859062000783565b60405180910390a35050565b600082815260036020526040902060020154620002ff90620002f06001600160e01b03620001b316565b6001600160e01b03620003d816565b620001b85760405162461bcd60e51b8152600401620001fa90620006c6565b60008281526003602090815260409091206200034591839062002436620003fe821b17901c565b15620001cd576200035e6001600160e01b03620001b316565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b505050565b600082820183811015620003cf5760405162461bcd60e51b8152600401620001fa9062000715565b90505b92915050565b60008281526003602090815260408220620003cf918490620024586200041e821b17901c565b6000620003cf836001600160a01b0384166001600160e01b036200043e16565b6000620003cf836001600160a01b0384166001600160e01b036200049616565b60006200045583836001600160e01b036200049616565b6200048d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003d2565b506000620003d2565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004f157805160ff191683800117855562000521565b8280016001018555821562000521579182015b828111156200052157825182559160200191906001019062000504565b506200052f92915062000533565b5090565b620001b591905b808211156200052f57600081556001016200053a565b80516001600160a01b0381168114620003d257600080fd5b600082601f83011262000579578081fd5b81516001600160401b038082111562000590578283fd5b6040516020601f8401601f1916820181018381118382101715620005b2578586fd5b80604052508194508382528681858801011115620005cf57600080fd5b600092505b83831015620005f35785830181015182840182015291820191620005d4565b83831115620006055760008185840101525b5050505092915050565b6000806000806080858703121562000625578384fd5b84516001600160401b03808211156200063c578586fd5b6200064a8883890162000568565b9550602087015191508082111562000660578485fd5b506200066f8782880162000568565b93505062000681866040870162000550565b915062000692866060870162000550565b905092959194509250565b7f434f4c4c41544552414c5f524154494f5f504155534552000000000000000000815260170190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b613a2e806200079c6000396000f3fe608060405234801561001057600080fd5b506004361061043c5760003560e01c80637bac07c711610235578063bdacb30311610135578063cb73999f116100c8578063dc6663c711610097578063df56e1681161007c578063df56e1681461080b578063e223e9a914610827578063e7dced671461083a5761043c565b8063dc6663c7146107f0578063dd62ed3e146107f85761043c565b8063cb73999f146107ba578063d2d97b06146107c2578063d547741f146107ca578063d914cd4b146107dd5761043c565b8063c3bc891011610104578063c3bc891014610784578063c8fae1a514610797578063ca15c8731461079f578063ca65be0b146107b25761043c565b8063bdacb30314610759578063bef40ec81461076c578063c03f7be314610774578063c3355b8d1461077c5761043c565b8063a217fddf116101c8578063ad9f6eec11610197578063b0fc69ce1161017c578063b0fc69ce14610736578063b4db09801461073e578063b4f56b26146107465761043c565b8063ad9f6eec14610710578063afe92c1a146107235761043c565b8063a217fddf146106cf578063a457c2d7146106d7578063a8a778ae146106ea578063a9059cbb146106fd5761043c565b80639010d07c116102045780639010d07c1461068e57806391d14854146106a157806392eefe9b146106b457806395d89b41146106c75761043c565b80637bac07c7146106635780637dbc1df01461066b57806380edef8e1461067e57806387a140c3146106865761043c565b806335467d5d1161034057806351e238e3116102d357806367feda3e116102a257806372b3cded1161028757806372b3cded14610635578063741d3c181461063d57806379cc6790146106505761043c565b806367feda3e1461061a57806370a08231146106225761043c565b806351e238e3146105e457806354505517146105ec57806355189488146105f45780636140133b146106075761043c565b80634013124a1161030f5780634013124a146105ae578063408ab10f146105b657806342966c68146105c95780634bd0be23146105dc5761043c565b806335467d5d1461056d57806336568abe1461057557806339509351146105885780633b7d09461461059b5761043c565b806323b872dd116103d35780632cb4f63e116103a25780632f2ff15d116103875780632f2ff15d1461053d578063313ce56714610550578063345ba24b146105655761043c565b80632cb4f63e1461052d5780632eb9771b146105355761043c565b806323b872dd146104f7578063246126bd1461050a578063248a9ca3146105125780632853fb10146105255761043c565b806318160ddd1161040f57806318160ddd146104b45780631c5df1e5146104c95780632258750a146104dc578063238a4709146104e45761043c565b806306fdde0314610441578063095ea7b31461045f5780630f9d20011461047f57806313af40351461049f575b600080fd5b610449610842565b6040516104569190613241565b60405180910390f35b61047261046d3660046130f2565b6108ee565b604051610456919061322d565b61049261048d36600461311c565b61090c565b60405161045691906131e6565b6104b26104ad366004613063565b610940565b005b6104bc610a25565b6040516104569190613238565b6104b26104d736600461311c565b610a2b565b6104bc610ac5565b6104b26104f236600461311c565b610acb565b6104726105053660046130b2565b610b65565b610492610c0c565b6104bc61052036600461311c565b610c28565b6104bc610c3d565b6104bc610c43565b6104bc610c49565b6104b261054b366004613134565b610c4f565b610558610cb1565b604051610456919061390f565b6104bc610cb6565b610492610da3565b6104b2610583366004613134565b610dbf565b6104726105963660046130f2565b610e35565b6104b26105a9366004613063565b610e96565b6104b2611095565b6104b26105c436600461311c565b6111ed565b6104b26105d736600461311c565b611287565b61049261129b565b6104bc6112b7565b6104bc6112c6565b610472610602366004613063565b6112dd565b6104b261061536600461311c565b6112f2565b61049261138c565b6104bc610630366004613063565b6113a8565b6104926113d0565b6104b261064b366004613063565b6113ec565b6104b261065e3660046130f2565b61157e565b6104bc6115d9565b6104b261067936600461311c565b6115df565b610492611679565b610472611695565b61049261069c366004613163565b6116b6565b6104726106af366004613134565b6116db565b6104b26106c2366004613063565b6116f9565b6104496117d5565b6104bc61184e565b6104726106e53660046130f2565b611853565b6104b26106f83660046130f2565b6118ce565b61047261070b3660046130f2565b61198f565b6104b261071e36600461311c565b6119a3565b6104b261073136600461307e565b611a3d565b610492611b32565b6104bc611b4e565b6104b26107543660046130f2565b611b5a565b6104b2610767366004613063565b611c0f565b6104b2611ceb565b6104bc611d5e565b6104bc611d64565b6104b2610792366004613063565b611d6a565b610492611e46565b6104bc6107ad36600461311c565b611e62565b610492611e79565b6104bc611e95565b6104bc611e9b565b6104b26107d8366004613134565b611fcb565b6104b26107eb366004613063565b61201f565b6104926121bd565b6104bc61080636600461307e565b6121d9565b610813612211565b6040516104569897969594939291906138d9565b6104b261083536600461307e565b6122f6565b6104bc6123eb565b6008805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b60006109026108fb61247a565b848461247e565b5060015b92915050565b6012818154811061091957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061097d5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061099f5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b6109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b60405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025490565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610a685750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610a8a5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601855565b601c5481565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610b085750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610b2a5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610b60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601655565b6000610b7284848461258d565b610c0284610b7e61247a565b610bfd856040518060600160405280602881526020016139886028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610bc961247a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff61272316565b61247e565b5060019392505050565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60009081526003602052604090206002015490565b601a5481565b60195481565b60145481565b600082815260036020526040902060020154610c6d906106af61247a565b610ca3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061336c565b610cad8282612769565b5050565b601281565b60048054604080517f8e15f4730000000000000000000000000000000000000000000000000000000081529051600093610d9e9360ff74010000000000000000000000000000000000000000820416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff90931692638e15f47392808201926020929091829003018186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190613184565b9063ffffffff6127f216565b9063ffffffff61284616565b905090565b601b5473ffffffffffffffffffffffffffffffffffffffff1681565b610dc761247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613845565b610cad8282612888565b6000610902610e4261247a565b84610bfd8560016000610e5361247a565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6123f716565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610ed35750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610ef55750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610f2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b73ffffffffffffffffffffffffffffffffffffffff811660009081526013602052604090205460ff161515600114610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613517565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260136020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b601254811015610cad578173ffffffffffffffffffffffffffffffffffffffff166012828154811061100957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561108d5760006012828154811061104057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cad565b600101610fdb565b601b5474010000000000000000000000000000000000000000900460ff16156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906137d9565b60006110f4611b4e565b9050601854601c5442031015611136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061377c565b601a5460195461114b9163ffffffff6123f716565b8111156111855760175460145411611167576000601455611180565b60175460145461117c9163ffffffff61291116565b6014555b6111e6565b601a5460195461119a9163ffffffff61291116565b8110156111e657620f42406111bc6017546014546123f790919063ffffffff16565b106111cd57620f42406014556111e6565b6017546014546111e29163ffffffff6123f716565b6014555b5042601c55565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061122a5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061124c5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601955565b61129861129261247a565b82612953565b50565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b6a01a784379d99db4200000081565b6040516112d2906131bd565b604051809103902081565b60136020526000908152604090205460ff1681565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061132f5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806113515750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611387576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601a55565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b60095473ffffffffffffffffffffffffffffffffffffffff163314806114295750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061144b5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b6011805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556004805490921692811692909217808255604080517ff0141d840000000000000000000000000000000000000000000000000000000081529051919093169263f0141d849281810192602092909190829003018186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611561919061319c565b600460146101000a81548160ff021916908360ff16021790555050565b60006115b6826040518060600160405280602481526020016139b0602491396115a98661080661247a565b919063ffffffff61272316565b90506115ca836115c461247a565b8361247e565b6115d48383612953565b505050565b60175481565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061161c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061163e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611674576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601555565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b601b5474010000000000000000000000000000000000000000900460ff1681565b60008281526003602052604081206116d4908363ffffffff612a8316565b9392505050565b60008281526003602052604081206116d4908363ffffffff61245816565b60095473ffffffffffffffffffffffffffffffffffffffff163314806117365750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806117585750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b61178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156108e65780601f106108bb576101008083540402835291602001916108e6565b600081565b600061090261186061247a565b84610bfd856040518060600160405280602581526020016139d4602591396001600061188a61247a565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61272316565b3360009081526013602052604090205460ff16151560011461191c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906134ba565b6119268282612a8f565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffead881ad94a58eeaebfdbce8eeb9906a0f42f0c896bab64a6ad08371608131a836040516119839190613238565b60405180910390a35050565b600061090261199c61247a565b848461258d565b60095473ffffffffffffffffffffffffffffffffffffffff163314806119e05750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611a025750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611a38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601755565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611a7a5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611a9c5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600f805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811790925560068054821690921790915560108054929093169116179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d9e6000612af0565b3360009081526013602052604090205460ff161515600114611ba8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906134ba565b611bb28282612d17565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f1c0ed02ca521f3f5782d6c218460a4d053afba959cf41837f405d16e201e31c5836040516119839190613238565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611c4c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611c6e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d08604051611cfa906131bd565b6040518091039020336116db565b611d1157600080fd5b601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60185481565b60165481565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611da75750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611dc95750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611dff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b600081815260036020526040812061090690612e18565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600080805b601254811015611fc557600073ffffffffffffffffffffffffffffffffffffffff1660128281548110611ecf57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611fbd57611fba60128281548110611f0657fe5b60009182526020918290200154604080517f17284c94000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926317284c9492600480840193829003018186803b158015611f7557600080fd5b505afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad9190613184565b839063ffffffff6123f716565b91505b600101611ea0565b50905090565b600082815260036020526040902060020154611fe9906106af61247a565b610e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061354e565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061205c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061207e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b6120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b73ffffffffffffffffffffffffffffffffffffffff811660009081526013602052604090205460ff1615612114576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061380e565b73ffffffffffffffffffffffffffffffffffffffff16600081815260136020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000806000806000806000806122276000612af0565b6122316001612af0565b612239610a25565b601454612244611e9b565b60165460155460048054604080517f8e15f47300000000000000000000000000000000000000000000000000000000815290516122de9360ff74010000000000000000000000000000000000000000850416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff90921692638e15f473928282019260209290829003018186803b158015610d4e57600080fd5b969f959e50939c50919a509850965094509092509050565b60095473ffffffffffffffffffffffffffffffffffffffff163314806123335750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806123555750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b61238b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600e805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811790925560058054821690921790915560108054929093169116179055565b6000610d9e6001612af0565b6000828201838110156116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613483565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612e23565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612e6d565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061371f565b73ffffffffffffffffffffffffffffffffffffffff8216612518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613426565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612580908590613238565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906136c2565b73ffffffffffffffffffffffffffffffffffffffff8216612627576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061330f565b6126328383836115d4565b612682816040518060600160405280602681526020016139626026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61272316565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546126c4908263ffffffff6123f716565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612580908590613238565b60008184841115612761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59190613241565b505050900390565b6000828152600360205260409020612787908263ffffffff61243616565b15610cad5761279461247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008261280157506000610906565b8282028284828161280e57fe5b04146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613608565b60006116d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e85565b60008281526003602052604090206128a6908263ffffffff612ed616565b15610cad576128b361247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006116d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612723565b73ffffffffffffffffffffffffffffffffffffffff82166129a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613665565b6129ac826000836115d4565b6129fc816040518060600160405280602281526020016139406022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff61272316565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254612a35908263ffffffff61291116565b60025560405160009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611983908590613238565b60006116d48383612ef8565b612a998282612953565b610cad82612aa561247a565b610bfd846040518060600160405280602481526020016139b06024913973ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040812090610bc961247a565b60048054604080517f8e15f47300000000000000000000000000000000000000000000000000000000815290516000938493612b869360ff74010000000000000000000000000000000000000000830416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff1692638e15f4739281830192602092829003018186803b158015610d4e57600080fd5b9050600080846001811115612b9757fe5b1415612c53576005546010546040517f3ddac95300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692633ddac95392612bfc92911690620f424090600401613207565b60206040518083038186803b158015612c1457600080fd5b505afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190613184565b9050612cf8565b6001846001811115612c6157fe5b1415612cc6576006546010546040517f3ddac95300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692633ddac95392612bfc92911690620f424090600401613207565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906133c9565b612d0f81610d9284620f424063ffffffff6127f216565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906138a2565b612d70600083836115d4565b600254612d83908263ffffffff6123f716565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054612dbc908263ffffffff6123f716565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611983908590613238565b600061090682612f57565b6000612e2f8383612e6d565b612e6557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610906565b506000610906565b60009081526001919091016020526040902054151590565b60008183612ec0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59190613241565b506000838581612ecc57fe5b0495945050505050565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612f5b565b81546000908210612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906132b2565b826000018281548110612f4457fe5b9060005260206000200154905092915050565b5490565b600081815260018301602052604081205480156130355783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110612fac57fe5b9060005260206000200154905080876000018481548110612fc957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612ff957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610906565b6000915050610906565b803573ffffffffffffffffffffffffffffffffffffffff8116811461090657600080fd5b600060208284031215613074578081fd5b6116d4838361303f565b60008060408385031215613090578081fd5b61309a848461303f565b91506130a9846020850161303f565b90509250929050565b6000806000606084860312156130c6578081fd5b83356130d18161391d565b925060208401356130e18161391d565b929592945050506040919091013590565b60008060408385031215613104578182fd5b61310e848461303f565b946020939093013593505050565b60006020828403121561312d578081fd5b5035919050565b60008060408385031215613146578182fd5b8235915060208301356131588161391d565b809150509250929050565b60008060408385031215613175578182fd5b50508035926020909101359150565b600060208284031215613195578081fd5b5051919050565b6000602082840312156131ad578081fd5b815160ff811681146116d4578182fd5b7f434f4c4c41544552414c5f524154494f5f504155534552000000000000000000815260170190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561326d57858101830151858201604001528201613251565b8181111561327e5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60408201527f6473000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201527f2061646d696e20746f206772616e740000000000000000000000000000000000606082015260800190565b6020808252603c908201527f494e56414c49442050524943452043484f4943452e204e6565647320746f206260408201527f6520656974686572203020284652415829206f72203120284658532900000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4f6e6c79206672617820706f6f6c732063616e2063616c6c207468697320667560408201527f6e6374696f6e0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f6164647265737320646f65736e277420657869737420616c7265616479000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000606082015260800190565b6020808252603d908201527f596f7520617265206e6f7420746865206f776e65722c20636f6e74726f6c6c6560408201527f722c206f722074686520676f7665726e616e63652074696d656c6f636b000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360408201527f7300000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4d757374207761697420666f7220746865207265667265736820636f6f6c646f60408201527f776e2073696e6365206c61737420726566726573680000000000000000000000606082015260800190565b6020808252818101527f436f6c6c61746572616c20526174696f20686173206265656e20706175736564604082015260600190565b60208082526016908201527f6164647265737320616c72656164792065786973747300000000000000000000604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201527f20726f6c657320666f722073656c660000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b978852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b60ff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461129857600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c630a447c03c2d225020ed5ca2de4d23ef8beed5537e9903659785e18d2949ea64736f6c634300060b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000234d953a9404bf9dbc3b526271d440cd2870bcd20000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000000000000000000000000000000000000000000004467261780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044652415800000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061043c5760003560e01c80637bac07c711610235578063bdacb30311610135578063cb73999f116100c8578063dc6663c711610097578063df56e1681161007c578063df56e1681461080b578063e223e9a914610827578063e7dced671461083a5761043c565b8063dc6663c7146107f0578063dd62ed3e146107f85761043c565b8063cb73999f146107ba578063d2d97b06146107c2578063d547741f146107ca578063d914cd4b146107dd5761043c565b8063c3bc891011610104578063c3bc891014610784578063c8fae1a514610797578063ca15c8731461079f578063ca65be0b146107b25761043c565b8063bdacb30314610759578063bef40ec81461076c578063c03f7be314610774578063c3355b8d1461077c5761043c565b8063a217fddf116101c8578063ad9f6eec11610197578063b0fc69ce1161017c578063b0fc69ce14610736578063b4db09801461073e578063b4f56b26146107465761043c565b8063ad9f6eec14610710578063afe92c1a146107235761043c565b8063a217fddf146106cf578063a457c2d7146106d7578063a8a778ae146106ea578063a9059cbb146106fd5761043c565b80639010d07c116102045780639010d07c1461068e57806391d14854146106a157806392eefe9b146106b457806395d89b41146106c75761043c565b80637bac07c7146106635780637dbc1df01461066b57806380edef8e1461067e57806387a140c3146106865761043c565b806335467d5d1161034057806351e238e3116102d357806367feda3e116102a257806372b3cded1161028757806372b3cded14610635578063741d3c181461063d57806379cc6790146106505761043c565b806367feda3e1461061a57806370a08231146106225761043c565b806351e238e3146105e457806354505517146105ec57806355189488146105f45780636140133b146106075761043c565b80634013124a1161030f5780634013124a146105ae578063408ab10f146105b657806342966c68146105c95780634bd0be23146105dc5761043c565b806335467d5d1461056d57806336568abe1461057557806339509351146105885780633b7d09461461059b5761043c565b806323b872dd116103d35780632cb4f63e116103a25780632f2ff15d116103875780632f2ff15d1461053d578063313ce56714610550578063345ba24b146105655761043c565b80632cb4f63e1461052d5780632eb9771b146105355761043c565b806323b872dd146104f7578063246126bd1461050a578063248a9ca3146105125780632853fb10146105255761043c565b806318160ddd1161040f57806318160ddd146104b45780631c5df1e5146104c95780632258750a146104dc578063238a4709146104e45761043c565b806306fdde0314610441578063095ea7b31461045f5780630f9d20011461047f57806313af40351461049f575b600080fd5b610449610842565b6040516104569190613241565b60405180910390f35b61047261046d3660046130f2565b6108ee565b604051610456919061322d565b61049261048d36600461311c565b61090c565b60405161045691906131e6565b6104b26104ad366004613063565b610940565b005b6104bc610a25565b6040516104569190613238565b6104b26104d736600461311c565b610a2b565b6104bc610ac5565b6104b26104f236600461311c565b610acb565b6104726105053660046130b2565b610b65565b610492610c0c565b6104bc61052036600461311c565b610c28565b6104bc610c3d565b6104bc610c43565b6104bc610c49565b6104b261054b366004613134565b610c4f565b610558610cb1565b604051610456919061390f565b6104bc610cb6565b610492610da3565b6104b2610583366004613134565b610dbf565b6104726105963660046130f2565b610e35565b6104b26105a9366004613063565b610e96565b6104b2611095565b6104b26105c436600461311c565b6111ed565b6104b26105d736600461311c565b611287565b61049261129b565b6104bc6112b7565b6104bc6112c6565b610472610602366004613063565b6112dd565b6104b261061536600461311c565b6112f2565b61049261138c565b6104bc610630366004613063565b6113a8565b6104926113d0565b6104b261064b366004613063565b6113ec565b6104b261065e3660046130f2565b61157e565b6104bc6115d9565b6104b261067936600461311c565b6115df565b610492611679565b610472611695565b61049261069c366004613163565b6116b6565b6104726106af366004613134565b6116db565b6104b26106c2366004613063565b6116f9565b6104496117d5565b6104bc61184e565b6104726106e53660046130f2565b611853565b6104b26106f83660046130f2565b6118ce565b61047261070b3660046130f2565b61198f565b6104b261071e36600461311c565b6119a3565b6104b261073136600461307e565b611a3d565b610492611b32565b6104bc611b4e565b6104b26107543660046130f2565b611b5a565b6104b2610767366004613063565b611c0f565b6104b2611ceb565b6104bc611d5e565b6104bc611d64565b6104b2610792366004613063565b611d6a565b610492611e46565b6104bc6107ad36600461311c565b611e62565b610492611e79565b6104bc611e95565b6104bc611e9b565b6104b26107d8366004613134565b611fcb565b6104b26107eb366004613063565b61201f565b6104926121bd565b6104bc61080636600461307e565b6121d9565b610813612211565b6040516104569897969594939291906138d9565b6104b261083536600461307e565b6122f6565b6104bc6123eb565b6008805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b60006109026108fb61247a565b848461247e565b5060015b92915050565b6012818154811061091957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061097d5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061099f5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b6109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b60405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025490565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610a685750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610a8a5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601855565b601c5481565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610b085750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610b2a5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610b60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601655565b6000610b7284848461258d565b610c0284610b7e61247a565b610bfd856040518060600160405280602881526020016139886028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610bc961247a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff61272316565b61247e565b5060019392505050565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60009081526003602052604090206002015490565b601a5481565b60195481565b60145481565b600082815260036020526040902060020154610c6d906106af61247a565b610ca3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061336c565b610cad8282612769565b5050565b601281565b60048054604080517f8e15f4730000000000000000000000000000000000000000000000000000000081529051600093610d9e9360ff74010000000000000000000000000000000000000000820416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff90931692638e15f47392808201926020929091829003018186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190613184565b9063ffffffff6127f216565b9063ffffffff61284616565b905090565b601b5473ffffffffffffffffffffffffffffffffffffffff1681565b610dc761247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613845565b610cad8282612888565b6000610902610e4261247a565b84610bfd8560016000610e5361247a565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6123f716565b60095473ffffffffffffffffffffffffffffffffffffffff16331480610ed35750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80610ef55750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b610f2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b73ffffffffffffffffffffffffffffffffffffffff811660009081526013602052604090205460ff161515600114610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613517565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260136020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b601254811015610cad578173ffffffffffffffffffffffffffffffffffffffff166012828154811061100957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561108d5760006012828154811061104057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cad565b600101610fdb565b601b5474010000000000000000000000000000000000000000900460ff16156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906137d9565b60006110f4611b4e565b9050601854601c5442031015611136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061377c565b601a5460195461114b9163ffffffff6123f716565b8111156111855760175460145411611167576000601455611180565b60175460145461117c9163ffffffff61291116565b6014555b6111e6565b601a5460195461119a9163ffffffff61291116565b8110156111e657620f42406111bc6017546014546123f790919063ffffffff16565b106111cd57620f42406014556111e6565b6017546014546111e29163ffffffff6123f716565b6014555b5042601c55565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061122a5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061124c5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601955565b61129861129261247a565b82612953565b50565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b6a01a784379d99db4200000081565b6040516112d2906131bd565b604051809103902081565b60136020526000908152604090205460ff1681565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061132f5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806113515750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611387576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601a55565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b60095473ffffffffffffffffffffffffffffffffffffffff163314806114295750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061144b5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b6011805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617928390556004805490921692811692909217808255604080517ff0141d840000000000000000000000000000000000000000000000000000000081529051919093169263f0141d849281810192602092909190829003018186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611561919061319c565b600460146101000a81548160ff021916908360ff16021790555050565b60006115b6826040518060600160405280602481526020016139b0602491396115a98661080661247a565b919063ffffffff61272316565b90506115ca836115c461247a565b8361247e565b6115d48383612953565b505050565b60175481565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061161c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061163e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611674576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601555565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b601b5474010000000000000000000000000000000000000000900460ff1681565b60008281526003602052604081206116d4908363ffffffff612a8316565b9392505050565b60008281526003602052604081206116d4908363ffffffff61245816565b60095473ffffffffffffffffffffffffffffffffffffffff163314806117365750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806117585750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b61178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156108e65780601f106108bb576101008083540402835291602001916108e6565b600081565b600061090261186061247a565b84610bfd856040518060600160405280602581526020016139d4602591396001600061188a61247a565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61272316565b3360009081526013602052604090205460ff16151560011461191c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906134ba565b6119268282612a8f565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffead881ad94a58eeaebfdbce8eeb9906a0f42f0c896bab64a6ad08371608131a836040516119839190613238565b60405180910390a35050565b600061090261199c61247a565b848461258d565b60095473ffffffffffffffffffffffffffffffffffffffff163314806119e05750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611a025750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611a38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b601755565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611a7a5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611a9c5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600f805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811790925560068054821690921790915560108054929093169116179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d9e6000612af0565b3360009081526013602052604090205460ff161515600114611ba8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906134ba565b611bb28282612d17565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f1c0ed02ca521f3f5782d6c218460a4d053afba959cf41837f405d16e201e31c5836040516119839190613238565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611c4c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611c6e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d08604051611cfa906131bd565b6040518091039020336116db565b611d1157600080fd5b601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60185481565b60165481565b60095473ffffffffffffffffffffffffffffffffffffffff16331480611da75750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b80611dc95750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b611dff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b600081815260036020526040812061090690612e18565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600080805b601254811015611fc557600073ffffffffffffffffffffffffffffffffffffffff1660128281548110611ecf57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611fbd57611fba60128281548110611f0657fe5b60009182526020918290200154604080517f17284c94000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926317284c9492600480840193829003018186803b158015611f7557600080fd5b505afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad9190613184565b839063ffffffff6123f716565b91505b600101611ea0565b50905090565b600082815260036020526040902060020154611fe9906106af61247a565b610e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061354e565b60095473ffffffffffffffffffffffffffffffffffffffff1633148061205c5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b8061207e5750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b6120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b73ffffffffffffffffffffffffffffffffffffffff811660009081526013602052604090205460ff1615612114576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061380e565b73ffffffffffffffffffffffffffffffffffffffff16600081815260136020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000806000806000806000806122276000612af0565b6122316001612af0565b612239610a25565b601454612244611e9b565b60165460155460048054604080517f8e15f47300000000000000000000000000000000000000000000000000000000815290516122de9360ff74010000000000000000000000000000000000000000850416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff90921692638e15f473928282019260209290829003018186803b158015610d4e57600080fd5b969f959e50939c50919a509850965094509092509050565b60095473ffffffffffffffffffffffffffffffffffffffff163314806123335750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b806123555750600c5473ffffffffffffffffffffffffffffffffffffffff1633145b61238b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906135ab565b600e805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811790925560058054821690921790915560108054929093169116179055565b6000610d9e6001612af0565b6000828201838110156116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613483565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612e23565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612e6d565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061371f565b73ffffffffffffffffffffffffffffffffffffffff8216612518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613426565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612580908590613238565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906136c2565b73ffffffffffffffffffffffffffffffffffffffff8216612627576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59061330f565b6126328383836115d4565b612682816040518060600160405280602681526020016139626026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61272316565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546126c4908263ffffffff6123f716565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612580908590613238565b60008184841115612761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59190613241565b505050900390565b6000828152600360205260409020612787908263ffffffff61243616565b15610cad5761279461247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008261280157506000610906565b8282028284828161280e57fe5b04146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613608565b60006116d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e85565b60008281526003602052604090206128a6908263ffffffff612ed616565b15610cad576128b361247a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006116d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612723565b73ffffffffffffffffffffffffffffffffffffffff82166129a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613665565b6129ac826000836115d4565b6129fc816040518060600160405280602281526020016139406022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff61272316565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254612a35908263ffffffff61291116565b60025560405160009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611983908590613238565b60006116d48383612ef8565b612a998282612953565b610cad82612aa561247a565b610bfd846040518060600160405280602481526020016139b06024913973ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040812090610bc961247a565b60048054604080517f8e15f47300000000000000000000000000000000000000000000000000000000815290516000938493612b869360ff74010000000000000000000000000000000000000000830416600a0a93610d9293620f42409373ffffffffffffffffffffffffffffffffffffffff1692638e15f4739281830192602092829003018186803b158015610d4e57600080fd5b9050600080846001811115612b9757fe5b1415612c53576005546010546040517f3ddac95300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692633ddac95392612bfc92911690620f424090600401613207565b60206040518083038186803b158015612c1457600080fd5b505afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190613184565b9050612cf8565b6001846001811115612c6157fe5b1415612cc6576006546010546040517f3ddac95300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692633ddac95392612bfc92911690620f424090600401613207565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906133c9565b612d0f81610d9284620f424063ffffffff6127f216565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906138a2565b612d70600083836115d4565b600254612d83908263ffffffff6123f716565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054612dbc908263ffffffff6123f716565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611983908590613238565b600061090682612f57565b6000612e2f8383612e6d565b612e6557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610906565b506000610906565b60009081526001919091016020526040902054151590565b60008183612ec0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d59190613241565b506000838581612ecc57fe5b0495945050505050565b60006116d48373ffffffffffffffffffffffffffffffffffffffff8416612f5b565b81546000908210612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d5906132b2565b826000018281548110612f4457fe5b9060005260206000200154905092915050565b5490565b600081815260018301602052604081205480156130355783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110612fac57fe5b9060005260206000200154905080876000018481548110612fc957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612ff957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610906565b6000915050610906565b803573ffffffffffffffffffffffffffffffffffffffff8116811461090657600080fd5b600060208284031215613074578081fd5b6116d4838361303f565b60008060408385031215613090578081fd5b61309a848461303f565b91506130a9846020850161303f565b90509250929050565b6000806000606084860312156130c6578081fd5b83356130d18161391d565b925060208401356130e18161391d565b929592945050506040919091013590565b60008060408385031215613104578182fd5b61310e848461303f565b946020939093013593505050565b60006020828403121561312d578081fd5b5035919050565b60008060408385031215613146578182fd5b8235915060208301356131588161391d565b809150509250929050565b60008060408385031215613175578182fd5b50508035926020909101359150565b600060208284031215613195578081fd5b5051919050565b6000602082840312156131ad578081fd5b815160ff811681146116d4578182fd5b7f434f4c4c41544552414c5f524154494f5f504155534552000000000000000000815260170190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561326d57858101830151858201604001528201613251565b8181111561327e5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60408201527f6473000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201527f2061646d696e20746f206772616e740000000000000000000000000000000000606082015260800190565b6020808252603c908201527f494e56414c49442050524943452043484f4943452e204e6565647320746f206260408201527f6520656974686572203020284652415829206f72203120284658532900000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f4f6e6c79206672617820706f6f6c732063616e2063616c6c207468697320667560408201527f6e6374696f6e0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f6164647265737320646f65736e277420657869737420616c7265616479000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000606082015260800190565b6020808252603d908201527f596f7520617265206e6f7420746865206f776e65722c20636f6e74726f6c6c6560408201527f722c206f722074686520676f7665726e616e63652074696d656c6f636b000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360408201527f7300000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4d757374207761697420666f7220746865207265667265736820636f6f6c646f60408201527f776e2073696e6365206c61737420726566726573680000000000000000000000606082015260800190565b6020808252818101527f436f6c6c61746572616c20526174696f20686173206265656e20706175736564604082015260600190565b60208082526016908201527f6164647265737320616c72656164792065786973747300000000000000000000604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201527f20726f6c657320666f722073656c660000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b978852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b60ff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461129857600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c630a447c03c2d225020ed5ca2de4d23ef8beed5537e9903659785e18d2949ea64736f6c634300060b0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000234d953a9404bf9dbc3b526271d440cd2870bcd20000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000000000000000000000000000000000000000000004467261780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044652415800000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Frax
Arg [1] : _symbol (string): FRAX
Arg [2] : _creator_address (address): 0x234D953a9404Bf9DbC3b526271d440cD2870bCd2
Arg [3] : _timelock_address (address): 0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000234d953a9404bf9dbc3b526271d440cd2870bcd2
Arg [3] : 0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4672617800000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4652415800000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

368:12997:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2712:166:9;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1579:33:17:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10748:122::-;;;;;;:::i;:::-;;:::i;:::-;;1679:98:9;;;:::i;:::-;;;;;;;:::i;11369:128:17:-;;;;;;:::i;:::-;;:::i;7945:29::-;;;:::i;10997:109::-;;;;;;:::i;:::-;;:::i;3336:317:9:-;;;;;;:::i;:::-;;:::i;1197:27:17:-;;;:::i;4323:112:0:-;;;;;;:::i;:::-;;:::i;2563:25:17:-;;;:::i;2343:27::-;;;:::i;1818:38::-;;;:::i;4685:223:0:-;;;;;;:::i;:::-;;:::i;783:35:17:-;;;:::i;:::-;;;;;;;:::i;6170:184::-;;;:::i;2716:36::-;;;:::i;5859:205:0:-;;;;;;:::i;:::-;;:::i;4048:215:9:-;;;;;;:::i;:::-;;:::i;10145:597:17:-;;;;;;:::i;:::-;;:::i;8040:1197::-;;;:::i;11231:132::-;;;;;;:::i;:::-;;:::i;6769:89:9:-;;;;;;:::i;:::-;;:::i;858:30:17:-;;;:::i;1275:51::-;;;:::i;2758:86::-;;;:::i;1671:42::-;;;;;;:::i;:::-;;:::i;12217:117::-;;;;;;:::i;:::-;;:::i;962:33::-;;;:::i;1835:117:9:-;;;;;;:::i;:::-;;:::i;1110:38:17:-;;;:::i;11628:305::-;;;;;;:::i;:::-;;:::i;7162:290:9:-;;;;;;:::i;:::-;;:::i;2120:24:17:-;;;:::i;10876:115::-;;;;;;:::i;:::-;;:::i;824:28::-;;;:::i;2850:43::-;;;:::i;4006:136:0:-;;;;;;:::i;:::-;;:::i;2991:137::-;;;;;;:::i;:::-;;:::i;12069:142:17:-;;;;;;:::i;:::-;;:::i;733:20::-;;;:::i;1698:49:0:-;;;:::i;4750:266:9:-;;;;;;:::i;:::-;;:::i;9336:189:17:-;;;;;;:::i;:::-;;:::i;2155:172:9:-;;;;;;:::i;:::-;;:::i;11114:109:17:-;;;;;;:::i;:::-;;:::i;12711:261::-;;;;;;:::i;:::-;;:::i;1230:39::-;;;:::i;5918:106::-;;;:::i;9605:180::-;;;;;;:::i;:::-;;:::i;11939:124::-;;;;;;:::i;:::-;;:::i;12978:133::-;;;:::i;2231:31::-;;;:::i;2018:26::-;;;:::i;11503:119::-;;;;;;:::i;:::-;;:::i;1078:26::-;;;:::i;3296:125:0:-;;;;;;:::i;:::-;;:::i;1154:37:17:-;;;:::i;1913:29::-;;;:::i;7293:469::-;;;:::i;5142:226:0:-;;;;;;:::i;:::-;;:::i;9875:242:17:-;;;;;;:::i;:::-;;:::i;894:31::-;;;:::i;2385:149:9:-;;;;;;:::i;:::-;;:::i;6525:663:17:-;;;:::i;:::-;;;;;;;;;;;;;;:::i;12389:268::-;;;;;;:::i;:::-;;:::i;6059:105::-;;;:::i;759:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2712:166:9:-;2795:4;2811:39;2820:12;:10;:12::i;:::-;2834:7;2843:6;2811:8;:39::i;:::-;-1:-1:-1;2867:4:9;2712:166;;;;;:::o;1579:33:17:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1579:33:17;:::o;10748:122::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;10833:13:::1;:30:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;10748:122::o;1679:98:9:-;1758:12;;1679:98;:::o;11369:128:17:-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11458:16:::1;:32:::0;11369:128::o;7945:29::-;;;;:::o;10997:109::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11078:11:::1;:21:::0;10997:109::o;3336:317:9:-;3442:4;3458:36;3468:6;3476:9;3487:6;3458:9;:36::i;:::-;3504:121;3513:6;3521:12;:10;:12::i;:::-;3535:89;3573:6;3535:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;3555:12;:10;:12::i;:::-;3535:33;;;;;;;;;;;;;-1:-1:-1;3535:33:9;;;:89;;:37;:89;:::i;:::-;3504:8;:121::i;:::-;-1:-1:-1;3642:4:9;3336:317;;;;;:::o;1197:27:17:-;;;;;;:::o;4323:112:0:-;4380:7;4406:12;;;:6;:12;;;;;:22;;;;4323:112::o;2563:25:17:-;;;;:::o;2343:27::-;;;;:::o;1818:38::-;;;;:::o;4685:223:0:-;4776:12;;;;:6;:12;;;;;:22;;;4768:45;;4800:12;:10;:12::i;4768:45::-;4760:105;;;;;;;;;;;;:::i;:::-;4876:25;4887:4;4893:7;4876:10;:25::i;:::-;4685:223;;:::o;783:35:17:-;816:2;783:35;:::o;6170:184::-;6323:23;;;6250:31;;;;;;;;6216:7;;6242:105;;6323:23;;;;;6316:2;6308:38;;6242:61;;1804:3;;6250:14;;;;;:29;;:31;;;;;;;;;;;;;:14;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6242:44;:61;:44;:61;:::i;:::-;:65;:105;:65;:105;:::i;:::-;6235:112;;6170:184;:::o;2716:36::-;;;;;;:::o;5859:205:0:-;5956:12;:10;:12::i;:::-;5945:23;;:7;:23;;;5937:83;;;;;;;;;;;;:::i;:::-;6031:26;6043:4;6049:7;6031:11;:26::i;4048:215:9:-;4136:4;4152:83;4161:12;:10;:12::i;:::-;4175:7;4184:50;4223:10;4184:11;:25;4196:12;:10;:12::i;:::-;4184:25;;;;;;;;;;;;;;;;;;-1:-1:-1;4184:25:9;;;:34;;;;;;;;;;;:50;:38;:50;:::i;10145:597:17:-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;10236:24:::1;::::0;::::1;;::::0;;;:10:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32:::1;10228:74;;;;;;;;;;;;:::i;:::-;10363:24;::::0;::::1;;::::0;;;:10:::1;:24;::::0;;;;10356:31;;;::::1;::::0;;10463:273:::1;10484:16;:23:::0;10480:27;::::1;10463:273;;;10555:12;10532:35;;:16;10549:1;10532:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;:35;10528:198;;;10617:1;10587:16;10604:1;10587:19;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;10706:5;;10528:198;10509:3;;10463:273;;8040:1197:::0;8099:23;;;;;;;:32;8091:77;;;;;;;;;;;;:::i;:::-;8178:22;8203:12;:10;:12::i;:::-;8178:37;;8269:16;;8251:14;;8233:15;:32;:52;;8225:118;;;;;;;;;;;;:::i;:::-;8482:10;;8465:12;;:28;;;:16;:28;:::i;:::-;8448:14;:45;8444:706;;;8567:9;;8540:23;;:36;8537:236;;8654:1;8628:23;:27;8537:236;;;8748:9;;8720:23;;:38;;;:27;:38;:::i;:::-;8694:23;:64;8537:236;8444:706;;;8827:10;;8810:12;;:28;;;:16;:28;:::i;:::-;8793:14;:45;8789:361;;;8927:7;8885:38;8913:9;;8885:23;;:27;;:38;;;;:::i;:::-;:49;8882:258;;8979:7;8953:23;:33;8882:258;;;9115:9;;9087:23;;:38;;;:27;:38;:::i;:::-;9061:23;:64;8882:258;-1:-1:-1;9177:15:17;9160:14;:32;8040:1197::o;11231:132::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11324:12:::1;:32:::0;11231:132::o;6769:89:9:-;6824:27;6830:12;:10;:12::i;:::-;6844:6;6824:5;:27::i;:::-;6769:89;:::o;858:30:17:-;;;;;;:::o;1275:51::-;1316:10;1275:51;:::o;2758:86::-;2808:36;;;;;:::i;:::-;;;;;;;;2758:86;:::o;1671:42::-;;;;;;;;;;;;;;;:::o;12217:117::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;12303:10:::1;:24:::0;12217:117::o;962:33::-;;;;;;:::o;1835:117:9:-;1927:18;;1901:7;1927:18;;;;;;;;;;;;1835:117::o;1110:38:17:-;;;;;;:::o;11628:305::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11729:24:::1;:52:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;;11791:14:::1;:71:::0;;;;::::1;11837:24:::0;;::::1;11791:71:::0;;;::::1;::::0;;;11898:28:::1;::::0;;;;;;;:14;;;::::1;::::0;:26:::1;::::0;:28;;::::1;::::0;::::1;::::0;;;;;;;;;:14;:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11872:23;;:54;;;;;;;;;;;;;;;;;;11628:305:::0;:::o;7162:290:9:-;7238:26;7267:84;7304:6;7267:84;;;;;;;;;;;;;;;;;:32;7277:7;7286:12;:10;:12::i;7267:32::-;:36;:84;;:36;:84;:::i;:::-;7238:113;;7362:51;7371:7;7380:12;:10;:12::i;:::-;7394:18;7362:8;:51::i;:::-;7423:22;7429:7;7438:6;7423:5;:22::i;:::-;7162:290;;;:::o;2120:24:17:-;;;;:::o;10876:115::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;10960:14:::1;:24:::0;10876:115::o;824:28::-;;;;;;:::o;2850:43::-;;;;;;;;;:::o;4006:136:0:-;4079:7;4105:12;;;:6;:12;;;;;:30;;4129:5;4105:30;:23;:30;:::i;:::-;4098:37;4006:136;-1:-1:-1;;;4006:136:0:o;2991:137::-;3060:4;3083:12;;;:6;:12;;;;;:38;;3113:7;3083:38;:29;:38;:::i;12069:142:17:-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;12164:18:::1;:40:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;12069:142::o;733:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:49:0;1743:4;1698:49;:::o;4750:266:9:-;4843:4;4859:129;4868:12;:10;:12::i;:::-;4882:7;4891:96;4930:15;4891:96;;;;;;;;;;;;;;;;;:11;:25;4903:12;:10;:12::i;:::-;4891:25;;;;;;;;;;;;;;;;;;-1:-1:-1;4891:25:9;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;9336:189:17:-;3116:10;3105:22;;;;:10;:22;;;;;;;;:30;;:22;:30;3097:81;;;;;;;;;;;;:::i;:::-;9424:36:::1;9440:9;9451:8;9424:15;:36::i;:::-;9497:10;9475:43;;9486:9;9475:43;;;9509:8;9475:43;;;;;;:::i;:::-;;;;;;;;9336:189:::0;;:::o;2155:172:9:-;2241:4;2257:42;2267:12;:10;:12::i;:::-;2281:9;2292:6;2257:9;:42::i;11114:109:17:-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11195:9:::1;:21:::0;11114:109::o;12711:261::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;12826:22:::1;:41:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;12877:12:::1;:50:::0;;;::::1;::::0;;::::1;::::0;;;12937:12:::1;:28:::0;;;;;::::1;::::0;::::1;;::::0;;12711:261::o;1230:39::-;;;;;;:::o;5918:106::-;5961:7;5987:30;6000:16;5987:12;:30::i;9605:180::-;3116:10;3105:22;;;;:10;:22;;;;;;;;:30;;:22;:30;3097:81;;;;;;;;;;;;:::i;:::-;9688:32:::1;9700:9;9711:8;9688:11;:32::i;:::-;9758:9;9735:43;;9746:10;9735:43;;;9769:8;9735:43;;;;;;:::i;11939:124::-:0;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;12025:16:::1;:31:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;11939:124::o;12978:133::-;2998:44;2808:36;;;;;:::i;:::-;;;;;;;;3031:10;2998:7;:44::i;:::-;2990:53;;;;;;13081:23:::1;::::0;;13054:50;;::::1;13081:23:::0;;;;::::1;;;13080:24;13054:50:::0;;::::1;;::::0;;12978:133::o;2231:31::-;;;;:::o;2018:26::-;;;;:::o;11503:119::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;11589:11:::1;:26:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;11503:119::o;1078:26::-;;;;;;:::o;3296:125:0:-;3359:7;3385:12;;;:6;:12;;;;;:29;;:27;:29::i;1154:37:17:-;;;;;;:::o;1913:29::-;;;;:::o;7293:469::-;7347:7;;;7416:297;7437:16;:23;7433:27;;7416:297;;;7554:1;7523:33;;:16;7540:1;7523:19;;;;;;;;;;;;;;;;;;;;:33;7519:183;;7604:83;7644:16;7661:1;7644:19;;;;;;;;;;;;;;;;;;;7635:51;;;;;;;;7644:19;;;;;7635:49;;:51;;;;;;;;;;7644:19;7635:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7604:26;;:83;:30;:83;:::i;:::-;7575:112;;7519:183;7462:3;;7416:297;;;-1:-1:-1;7729:26:17;-1:-1:-1;7293:469:17;:::o;5142:226:0:-;5234:12;;;;:6;:12;;;;;:22;;;5226:45;;5258:12;:10;:12::i;5226:45::-;5218:106;;;;;;;;;;;;:::i;9875:242:17:-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;9963:24:::1;::::0;::::1;;::::0;;;:10:::1;:24;::::0;;;;;::::1;;:33;9955:68;;;;;;;;;;;;:::i;:::-;10033:24;;;::::0;;;:10:::1;:24;::::0;;;;:31;;;::::1;10060:4;10033:31:::0;;::::1;::::0;;;10075:16:::1;:35:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;9875:242::o;894:31::-;;;;;;:::o;2385:149:9:-;2500:18;;;;2474:7;2500:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2385:149::o;6525:663:17:-;6567:7;6576;6585;6594;6603;6612;6621;6630;6670:30;6683:16;6670:12;:30::i;:::-;6730:29;6743:15;6730:12;:29::i;:::-;6788:13;:11;:13::i;:::-;6832:23;;6898;:21;:23::i;:::-;6960:11;;7002:14;;7131:23;;;7058:31;;;;;;;;7050:105;;7131:23;;;;;7124:2;7116:38;;7050:61;;1804:3;;7058:14;;;;;:29;;:31;;;;;;;;;;;;:14;:31;;;;;;;;;;7050:105;6649:532;;;;-1:-1:-1;6649:532:17;;-1:-1:-1;6649:532:17;;-1:-1:-1;6649:532:17;-1:-1:-1;6649:532:17;-1:-1:-1;6649:532:17;-1:-1:-1;6649:532:17;;-1:-1:-1;6525:663:17;-1:-1:-1;6525:663:17:o;12389:268::-;3274:13;;;;3260:10;:27;;:61;;-1:-1:-1;3305:16:17;;;;3291:10;:30;3260:61;:97;;;-1:-1:-1;3339:18:17;;;;3325:10;:32;3260:97;3252:171;;;;;;;;;;;;:::i;:::-;12506:23:::1;:43:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;12559:13:::1;:52:::0;;;::::1;::::0;;::::1;::::0;;;12622:12:::1;:28:::0;;;;;::::1;::::0;::::1;;::::0;;12389:268::o;6059:105::-;6102:7;6128:29;6141:15;6128:12;:29::i;866:176:40:-;924:7;955:5;;;978:6;;;;970:46;;;;;;;;;;;;:::i;4864:141:10:-;4934:4;4957:41;4962:3;4982:14;;;4957:4;:41::i;5401:156::-;5481:4;5504:46;5514:3;5534:14;;;5504:9;:46::i;767:104:7:-;854:10;767:104;:::o;8607:340:9:-;8708:19;;;8700:68;;;;;;;;;;;;:::i;:::-;8786:21;;;8778:68;;;;;;;;;;;;:::i;:::-;8857:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;8908:32;;;;;8887:6;;8908:32;:::i;:::-;;;;;;;;8607:340;;;:::o;5490:530::-;5595:20;;;5587:70;;;;;;;;;;;;:::i;:::-;5675:23;;;5667:71;;;;;;;;;;;;:::i;:::-;5749:47;5770:6;5778:9;5789:6;5749:20;:47::i;:::-;5827:71;5849:6;5827:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;5807:17;;;;:9;:17;;;;;;;;;;;:91;;;;5931:20;;;;;;;:32;;5956:6;5931:32;:24;:32;:::i;:::-;5908:20;;;;:9;:20;;;;;;;;;;;;:55;;;;5978:35;;;;;;;;;;6006:6;;5978:35;:::i;1764:187:40:-;1850:7;1885:12;1877:6;;;;1869:29;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;1920:5:40;;;1764:187::o;7066:184:0:-;7139:12;;;;:6;:12;;;;;:33;;7164:7;7139:33;:24;:33;:::i;:::-;7135:109;;;7220:12;:10;:12::i;:::-;7193:40;;7211:7;7193:40;;7205:4;7193:40;;;;;;;;;;7066:184;;:::o;2191:459:40:-;2249:7;2490:6;2486:45;;-1:-1:-1;2519:1:40;2512:8;;2486:45;2553:5;;;2557:1;2553;:5;:1;2576:5;;;;;:10;2568:56;;;;;;;;;;;;:::i;3105:130::-;3163:7;3189:39;3193:1;3196;3189:39;;;;;;;;;;;;;;;;;:3;:39::i;7256:188:0:-;7330:12;;;;:6;:12;;;;;:36;;7358:7;7330:36;:27;:36;:::i;:::-;7326:112;;;7414:12;:10;:12::i;:::-;7387:40;;7405:7;7387:40;;7399:4;7387:40;;;;;;;;;;7256:188;;:::o;1306:134:40:-;1364:7;1390:43;1394:1;1397;1390:43;;;;;;;;;;;;;;;;;:3;:43::i;7772:410:9:-;7855:21;;;7847:67;;;;;;;;;;;;:::i;:::-;7925:49;7946:7;7963:1;7967:6;7925:20;:49::i;:::-;8006:68;8029:6;8006:68;;;;;;;;;;;;;;;;;:18;;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;7985:18;;;:9;:18;;;;;;;;;;:89;8099:12;;:24;;8116:6;8099:24;:16;:24;:::i;:::-;8084:12;:39;8138:37;;8164:1;;8138:37;;;;;;;;8168:6;;8138:37;:::i;6085:147:10:-;6159:7;6201:22;6205:3;6217:5;6201:3;:22::i;9125:237:9:-;9204:22;9210:7;9219:6;9204:5;:22::i;:::-;9236:119;9245:7;9254:12;:10;:12::i;:::-;9268:86;9307:6;9268:86;;;;;;;;;;;;;;;;;:20;;;;;;;:11;:20;;;;;;9289:12;:10;:12::i;4978:904:17:-;5242:23;;;5169:31;;;;;;;;5043:7;;;;5161:105;;5242:23;;;;;5235:2;5227:38;;5161:61;;1804:3;;5169:14;;;:29;;:31;;;;;;;;;;;:14;:31;;;;;;;;;;5161:105;5137:129;-1:-1:-1;5276:20:17;;5311:6;:26;;;;;;;;;5307:465;;;5376:13;;5398:12;;5376:52;;;;;:13;;;;;:21;;:52;;5398:12;;;1804:3;;5376:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5353:76;;5307:465;;;5520:15;5510:6;:25;;;;;;;;;5506:266;;;5574:12;;5595;;5574:51;;;;;:12;;;;;:20;;:51;;5595:12;;;1804:3;;5574:51;;;:::i;5506:266::-;5702:70;;;;;;;;;;:::i;5506:266::-;5823:52;5862:12;5823:34;:13;1804:3;5823:34;:17;:34;:::i;:52::-;5816:59;4978:904;-1:-1:-1;;;;4978:904:17:o;6290:370:9:-;6373:21;;;6365:65;;;;;;;;;;;;:::i;:::-;6441:49;6470:1;6474:7;6483:6;6441:20;:49::i;:::-;6516:12;;:24;;6533:6;6516:24;:16;:24;:::i;:::-;6501:12;:39;6571:18;;;:9;:18;;;;;;;;;;;:30;;6594:6;6571:30;:22;:30;:::i;:::-;6550:18;;;:9;:18;;;;;;;;;;;:51;;;;6616:37;;6550:18;;:9;6616:37;;;;6646:6;;6616:37;:::i;5638:115:10:-;5701:7;5727:19;5735:3;5727:7;:19::i;1611:404::-;1674:4;1695:21;1705:3;1710:5;1695:9;:21::i;:::-;1690:319;;-1:-1:-1;1732:23:10;;;;;;;;:11;:23;;;;;;;;;;;;;1912:18;;1890:19;;;:12;;;:19;;;;;;:40;;;;1944:11;;1690:319;-1:-1:-1;1993:5:10;1986:12;;3776:127;3849:4;3872:19;;;:12;;;;;:19;;;;;;:24;;;3776:127::o;3750:338:40:-;3836:7;3936:12;3929:5;3921:28;;;;;;;;;;;;;:::i;:::-;;3959:9;3975:1;3971;:5;;;;;;;3750:338;-1:-1:-1;;;;;3750:338:40:o;5173:147:10:-;5246:4;5269:44;5277:3;5297:14;;;5269:7;:44::i;4423:201::-;4517:18;;4490:7;;4517:26;-1:-1:-1;4509:73:10;;;;;;;;;;;;:::i;:::-;4599:3;:11;;4611:5;4599:18;;;;;;;;;;;;;;;;4592:25;;4423:201;;;;:::o;3984:107::-;4066:18;;3984:107::o;2183:1512::-;2249:4;2386:19;;;:12;;;:19;;;;;;2420:15;;2416:1273;;2849:18;;2801:14;;;;;2849:22;;;;2777:21;;2849:3;;:22;;3131;;;;;;;;;;;;;;3111:42;;3274:9;3245:3;:11;;3257:13;3245:26;;;;;;;;;;;;;;;;;;;:38;;;;3349:23;;;3391:1;3349:12;;;:23;;;;;;3375:17;;;3349:43;;3498:17;;3349:3;;3498:17;;;;;;;;;;;;;;;;;;;;;;3590:3;:12;;:19;3603:5;3590:19;;;;;;;;;;;3583:26;;;3631:4;3624:11;;;;;;;;2416:1273;3673:5;3666:12;;;;;5:130:-1;72:20;;24897:42;24886:54;;25560:35;;25550:2;;25609:1;;25599:12;833:241;;937:2;925:9;916:7;912:23;908:32;905:2;;;-1:-1;;943:12;905:2;1005:53;1050:7;1026:22;1005:53;:::i;1081:366::-;;;1202:2;1190:9;1181:7;1177:23;1173:32;1170:2;;;-1:-1;;1208:12;1170:2;1270:53;1315:7;1291:22;1270:53;:::i;:::-;1260:63;;1378:53;1423:7;1360:2;1403:9;1399:22;1378:53;:::i;:::-;1368:63;;1164:283;;;;;:::o;1454:491::-;;;;1592:2;1580:9;1571:7;1567:23;1563:32;1560:2;;;-1:-1;;1598:12;1560:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1650:63;-1:-1;1750:2;1789:22;;72:20;97:33;72:20;97:33;:::i;:::-;1554:391;;1758:63;;-1:-1;;;1858:2;1897:22;;;;485:20;;1554:391::o;1952:366::-;;;2073:2;2061:9;2052:7;2048:23;2044:32;2041:2;;;-1:-1;;2079:12;2041:2;2141:53;2186:7;2162:22;2141:53;:::i;:::-;2131:63;2231:2;2270:22;;;;485:20;;-1:-1;;;2035:283::o;2325:241::-;;2429:2;2417:9;2408:7;2404:23;2400:32;2397:2;;;-1:-1;;2435:12;2397:2;-1:-1;209:20;;2391:175;-1:-1;2391:175::o;2573:366::-;;;2694:2;2682:9;2673:7;2669:23;2665:32;2662:2;;;-1:-1;;2700:12;2662:2;222:6;209:20;2752:63;;2852:2;2895:9;2891:22;72:20;97:33;124:5;97:33;:::i;:::-;2860:63;;;;2656:283;;;;;:::o;2946:366::-;;;3067:2;3055:9;3046:7;3042:23;3038:32;3035:2;;;-1:-1;;3073:12;3035:2;-1:-1;;209:20;;;3225:2;3264:22;;;485:20;;-1:-1;3029:283::o;3319:261::-;;3433:2;3421:9;3412:7;3408:23;3404:32;3401:2;;;-1:-1;;3439:12;3401:2;-1:-1;356:13;;3395:185;-1:-1;3395:185::o;4105:259::-;;4218:2;4206:9;4197:7;4193:23;4189:32;4186:2;;;-1:-1;;4224:12;4186:2;778:6;772:13;25102:4;26078:5;25091:16;26055:5;26052:33;26042:2;;-1:-1;;26089:12;12804:381;9930:25;9910:46;;9894:2;9975:12;;12993:192::o;13192:222::-;24897:42;24886:54;;;;4442:37;;13319:2;13304:18;;13290:124::o;13421:333::-;24897:42;24886:54;;;;4442:37;;13740:2;13725:18;;4673:37;13576:2;13561:18;;13547:207::o;13761:210::-;24641:13;;24634:21;4556:34;;13882:2;13867:18;;13853:118::o;13978:222::-;4673:37;;;14105:2;14090:18;;14076:124::o;14207:310::-;;14354:2;;14375:17;14368:47;4867:5;24110:12;24267:6;14354:2;14343:9;14339:18;24255:19;-1:-1;25192:101;25206:6;25203:1;25200:13;25192:101;;;25273:11;;;;;25267:18;25254:11;;;24295:14;25254:11;25247:39;25221:10;;25192:101;;;25308:6;25305:1;25302:13;25299:2;;;-1:-1;24295:14;25364:6;14343:9;25355:16;;25348:27;25299:2;-1:-1;25484:2;25464:14;25480:7;25460:28;5025:39;;;;24295:14;5025:39;;14325:192;-1:-1;;;14325:192::o;14524:416::-;14724:2;14738:47;;;5301:2;14709:18;;;24255:19;5337:34;24295:14;;;5317:55;5406:4;5392:12;;;5385:26;5430:12;;;14695:245::o;14947:416::-;15147:2;15161:47;;;5681:2;15132:18;;;24255:19;5717:34;24295:14;;;5697:55;5786:5;5772:12;;;5765:27;5811:12;;;15118:245::o;15370:416::-;15570:2;15584:47;;;6062:2;15555:18;;;24255:19;6098:34;24295:14;;;6078:55;6167:17;6153:12;;;6146:39;6204:12;;;15541:245::o;15793:416::-;15993:2;16007:47;;;6455:2;15978:18;;;24255:19;6491:34;24295:14;;;6471:55;6560:30;6546:12;;;6539:52;6610:12;;;15964:245::o;16216:416::-;16416:2;16430:47;;;6861:2;16401:18;;;24255:19;6897:34;24295:14;;;6877:55;6966:4;6952:12;;;6945:26;6990:12;;;16387:245::o;16639:416::-;16839:2;16853:47;;;7241:2;16824:18;;;24255:19;7277:29;24295:14;;;7257:50;7326:12;;;16810:245::o;17062:416::-;17262:2;17276:47;;;7577:2;17247:18;;;24255:19;7613:34;24295:14;;;7593:55;7682:8;7668:12;;;7661:30;7710:12;;;17233:245::o;17485:416::-;17685:2;17699:47;;;7961:2;17670:18;;;24255:19;7997:31;24295:14;;;7977:52;8048:12;;;17656:245::o;17908:416::-;18108:2;18122:47;;;8299:2;18093:18;;;24255:19;8335:34;24295:14;;;8315:55;8404:18;8390:12;;;8383:40;8442:12;;;18079:245::o;18331:416::-;18531:2;18545:47;;;8693:2;18516:18;;;24255:19;8729:34;24295:14;;;8709:55;8798:31;8784:12;;;8777:53;8849:12;;;18502:245::o;18754:416::-;18954:2;18968:47;;;9100:2;18939:18;;;24255:19;9136:34;24295:14;;;9116:55;9205:3;9191:12;;;9184:25;9228:12;;;18925:245::o;19177:416::-;19377:2;19391:47;;;9479:2;19362:18;;;24255:19;9515:34;24295:14;;;9495:55;9584:3;9570:12;;;9563:25;9607:12;;;19348:245::o;19600:416::-;19800:2;19814:47;;;10226:2;19785:18;;;24255:19;10262:34;24295:14;;;10242:55;10331:7;10317:12;;;10310:29;10358:12;;;19771:245::o;20023:416::-;20223:2;20237:47;;;10609:2;20208:18;;;24255:19;10645:34;24295:14;;;10625:55;10714:6;10700:12;;;10693:28;10740:12;;;20194:245::o;20446:416::-;20646:2;20660:47;;;10991:2;20631:18;;;24255:19;11027:34;24295:14;;;11007:55;11096:23;11082:12;;;11075:45;11139:12;;;20617:245::o;20869:416::-;21069:2;21083:47;;;21054:18;;;24255:19;11426:34;24295:14;;;11406:55;11480:12;;;21040:245::o;21292:416::-;21492:2;21506:47;;;11731:2;21477:18;;;24255:19;11767:24;24295:14;;;11747:45;11811:12;;;21463:245::o;21715:416::-;21915:2;21929:47;;;12062:2;21900:18;;;24255:19;12098:34;24295:14;;;12078:55;12167:17;12153:12;;;12146:39;12204:12;;;21886:245::o;22138:416::-;22338:2;22352:47;;;12455:2;22323:18;;;24255:19;12491:33;24295:14;;;12471:54;12544:12;;;22309:245::o;22790:1004::-;4673:37;;;23278:2;23263:18;;4673:37;;;;23361:2;23346:18;;4673:37;;;;23444:2;23429:18;;4673:37;;;;23527:3;23512:19;;4673:37;23611:3;23596:19;;4673:37;23695:3;23680:19;;4673:37;23779:3;23764:19;;4673:37;23113:3;23098:19;;23084:710::o;23801:214::-;25102:4;25091:16;;;;12757:35;;23924:2;23909:18;;23895:120::o;25501:117::-;24897:42;25588:5;24886:54;25563:5;25560:35;25550:2;;25609:1;;25599:12

Swarm Source

ipfs://c630a447c03c2d225020ed5ca2de4d23ef8beed5537e9903659785e18d2949ea
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.