Overview
ETH Balance
0 ETH
ETH Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Initialize | 11627526 | 840 days ago | IN | 0 ETH | 0.00009906 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 11627488 | 840 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
PoolConfigurator
Compiler Version
v0.8.12+commit.f00d7308
ZkSolc Version
v1.3.13
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.12;
import {VersionedInitializable} from "../libraries/aave-upgradeability/VersionedInitializable.sol";
import {ReserveConfiguration} from "../libraries/configuration/ReserveConfiguration.sol";
import {IPoolAddressesProvider} from "../../interfaces/IPoolAddressesProvider.sol";
import {Errors} from "../libraries/helpers/Errors.sol";
import {PercentageMath} from "../libraries/math/PercentageMath.sol";
import {DataTypes} from "../libraries/types/DataTypes.sol";
import {ConfiguratorLogic} from "../libraries/logic/ConfiguratorLogic.sol";
import {ConfiguratorInputTypes} from "../libraries/types/ConfiguratorInputTypes.sol";
import {IPoolConfigurator} from "../../interfaces/IPoolConfigurator.sol";
import {IPool} from "../../interfaces/IPool.sol";
import {IACLManager} from "../../interfaces/IACLManager.sol";
import {IPoolDataProvider} from "../../interfaces/IPoolDataProvider.sol";
/**
* @title PoolConfigurator
* @author Aave
* @dev Implements the configuration methods for the Aave protocol
*/
contract PoolConfigurator is VersionedInitializable, IPoolConfigurator {
using PercentageMath for uint256;
using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
IPoolAddressesProvider internal _addressesProvider;
IPool internal _pool;
/**
* @dev Only pool admin can call functions marked by this modifier.
*/
modifier onlyPoolAdmin() {
_onlyPoolAdmin();
_;
}
/**
* @dev Only emergency admin can call functions marked by this modifier.
*/
modifier onlyEmergencyAdmin() {
_onlyEmergencyAdmin();
_;
}
/**
* @dev Only emergency or pool admin can call functions marked by this modifier.
*/
modifier onlyEmergencyOrPoolAdmin() {
_onlyPoolOrEmergencyAdmin();
_;
}
/**
* @dev Only asset listing or pool admin can call functions marked by this modifier.
*/
modifier onlyAssetListingOrPoolAdmins() {
_onlyAssetListingOrPoolAdmins();
_;
}
/**
* @dev Only risk or pool admin can call functions marked by this modifier.
*/
modifier onlyRiskOrPoolAdmins() {
_onlyRiskOrPoolAdmins();
_;
}
uint256 public constant CONFIGURATOR_REVISION = 0x4;
/// @inheritdoc VersionedInitializable
function getRevision() internal pure virtual override returns (uint256) {
return CONFIGURATOR_REVISION;
}
function initialize(IPoolAddressesProvider provider) public initializer {
_addressesProvider = provider;
_pool = IPool(_addressesProvider.getPool());
}
/// @inheritdoc IPoolConfigurator
function initReserves(
ConfiguratorInputTypes.InitReserveInput[] calldata input
) external override onlyAssetListingOrPoolAdmins {
IPool cachedPool = _pool;
for (uint256 i = 0; i < input.length; i++) {
ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);
}
}
/// @inheritdoc IPoolConfigurator
function dropReserve(address asset) external override onlyPoolAdmin {
_pool.dropReserve(asset);
emit ReserveDropped(asset);
}
/// @inheritdoc IPoolConfigurator
function updateAToken(
ConfiguratorInputTypes.UpdateATokenInput calldata input
) external override onlyPoolAdmin {
ConfiguratorLogic.executeUpdateAToken(_pool, input);
}
/// @inheritdoc IPoolConfigurator
function updateStableDebtToken(
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) external override onlyPoolAdmin {
ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);
}
/// @inheritdoc IPoolConfigurator
function updateVariableDebtToken(
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) external override onlyPoolAdmin {
ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);
}
/// @inheritdoc IPoolConfigurator
function setReserveBorrowing(
address asset,
bool enabled
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
if (!enabled) {
require(
!currentConfig.getStableRateBorrowingEnabled(),
Errors.STABLE_BORROWING_ENABLED
);
}
currentConfig.setBorrowingEnabled(enabled);
_pool.setConfiguration(asset, currentConfig);
emit ReserveBorrowing(asset, enabled);
}
/// @inheritdoc IPoolConfigurator
function configureReserveAsCollateral(
address asset,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus
) external override onlyRiskOrPoolAdmins {
//validation of the parameters: the LTV can
//only be lower or equal than the liquidation threshold
//(otherwise a loan against the asset would cause instantaneous liquidation)
require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
if (liquidationThreshold != 0) {
//liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less
//collateral than needed to cover the debt
require(
liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_RESERVE_PARAMS
);
//if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment
//a loan is taken there is enough collateral available to cover the liquidation bonus
require(
liquidationThreshold.percentMul(liquidationBonus) <=
PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_RESERVE_PARAMS
);
} else {
require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);
//if the liquidation threshold is being set to 0,
// the reserve is being disabled as collateral. To do so,
//we need to ensure no liquidity is supplied
_checkNoSuppliers(asset);
}
currentConfig.setLtv(ltv);
currentConfig.setLiquidationThreshold(liquidationThreshold);
currentConfig.setLiquidationBonus(liquidationBonus);
_pool.setConfiguration(asset, currentConfig);
emit CollateralConfigurationChanged(
asset,
ltv,
liquidationThreshold,
liquidationBonus
);
}
/// @inheritdoc IPoolConfigurator
function setReserveStableRateBorrowing(
address asset,
bool enabled
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
if (enabled) {
require(
currentConfig.getBorrowingEnabled(),
Errors.BORROWING_NOT_ENABLED
);
}
currentConfig.setStableRateBorrowingEnabled(enabled);
_pool.setConfiguration(asset, currentConfig);
emit ReserveStableRateBorrowing(asset, enabled);
}
/// @inheritdoc IPoolConfigurator
function setReserveFlashLoaning(
address asset,
bool enabled
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
currentConfig.setFlashLoanEnabled(enabled);
_pool.setConfiguration(asset, currentConfig);
emit ReserveFlashLoaning(asset, enabled);
}
/// @inheritdoc IPoolConfigurator
function setReserveActive(
address asset,
bool active
) external override onlyPoolAdmin {
if (!active) _checkNoSuppliers(asset);
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
currentConfig.setActive(active);
_pool.setConfiguration(asset, currentConfig);
emit ReserveActive(asset, active);
}
/// @inheritdoc IPoolConfigurator
function setReserveFreeze(
address asset,
bool freeze
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
currentConfig.setFrozen(freeze);
_pool.setConfiguration(asset, currentConfig);
emit ReserveFrozen(asset, freeze);
}
/// @inheritdoc IPoolConfigurator
function setBorrowableInIsolation(
address asset,
bool borrowable
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
currentConfig.setBorrowableInIsolation(borrowable);
_pool.setConfiguration(asset, currentConfig);
emit BorrowableInIsolationChanged(asset, borrowable);
}
/// @inheritdoc IPoolConfigurator
function setReservePause(
address asset,
bool paused
) public override onlyEmergencyOrPoolAdmin {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
currentConfig.setPaused(paused);
_pool.setConfiguration(asset, currentConfig);
emit ReservePaused(asset, paused);
}
/// @inheritdoc IPoolConfigurator
function setReserveFactor(
address asset,
uint256 newReserveFactor
) external override onlyRiskOrPoolAdmins {
require(
newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_RESERVE_FACTOR
);
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldReserveFactor = currentConfig.getReserveFactor();
currentConfig.setReserveFactor(newReserveFactor);
_pool.setConfiguration(asset, currentConfig);
emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);
}
/// @inheritdoc IPoolConfigurator
function setDebtCeiling(
address asset,
uint256 newDebtCeiling
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldDebtCeiling = currentConfig.getDebtCeiling();
if (oldDebtCeiling == 0) {
_checkNoSuppliers(asset);
}
currentConfig.setDebtCeiling(newDebtCeiling);
_pool.setConfiguration(asset, currentConfig);
if (newDebtCeiling == 0) {
_pool.resetIsolationModeTotalDebt(asset);
}
emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);
}
/// @inheritdoc IPoolConfigurator
function setSiloedBorrowing(
address asset,
bool newSiloed
) external override onlyRiskOrPoolAdmins {
if (newSiloed) {
_checkNoBorrowers(asset);
}
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
bool oldSiloed = currentConfig.getSiloedBorrowing();
currentConfig.setSiloedBorrowing(newSiloed);
_pool.setConfiguration(asset, currentConfig);
emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);
}
/// @inheritdoc IPoolConfigurator
function setBorrowCap(
address asset,
uint256 newBorrowCap
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldBorrowCap = currentConfig.getBorrowCap();
currentConfig.setBorrowCap(newBorrowCap);
_pool.setConfiguration(asset, currentConfig);
emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);
}
/// @inheritdoc IPoolConfigurator
function setSupplyCap(
address asset,
uint256 newSupplyCap
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldSupplyCap = currentConfig.getSupplyCap();
currentConfig.setSupplyCap(newSupplyCap);
_pool.setConfiguration(asset, currentConfig);
emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);
}
/// @inheritdoc IPoolConfigurator
function setLiquidationProtocolFee(
address asset,
uint256 newFee
) external override onlyRiskOrPoolAdmins {
require(
newFee <= PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_LIQUIDATION_PROTOCOL_FEE
);
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldFee = currentConfig.getLiquidationProtocolFee();
currentConfig.setLiquidationProtocolFee(newFee);
_pool.setConfiguration(asset, currentConfig);
emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);
}
/// @inheritdoc IPoolConfigurator
function setEModeCategory(
uint8 categoryId,
uint16 ltv,
uint16 liquidationThreshold,
uint16 liquidationBonus,
address oracle,
string calldata label
) external override onlyRiskOrPoolAdmins {
require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);
require(
liquidationThreshold != 0,
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
// validation of the parameters: the LTV can
// only be lower or equal than the liquidation threshold
// (otherwise a loan against the asset would cause instantaneous liquidation)
require(
ltv <= liquidationThreshold,
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
require(
liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
// if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment
// a loan is taken there is enough collateral available to cover the liquidation bonus
require(
uint256(liquidationThreshold).percentMul(liquidationBonus) <=
PercentageMath.PERCENTAGE_FACTOR,
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
address[] memory reserves = _pool.getReservesList();
for (uint256 i = 0; i < reserves.length; i++) {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(reserves[i]);
if (categoryId == currentConfig.getEModeCategory()) {
require(
ltv > currentConfig.getLtv(),
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
require(
liquidationThreshold >
currentConfig.getLiquidationThreshold(),
Errors.INVALID_EMODE_CATEGORY_PARAMS
);
}
}
_pool.configureEModeCategory(
categoryId,
DataTypes.EModeCategory({
ltv: ltv,
liquidationThreshold: liquidationThreshold,
liquidationBonus: liquidationBonus,
priceSource: oracle,
label: label
})
);
emit EModeCategoryAdded(
categoryId,
ltv,
liquidationThreshold,
liquidationBonus,
oracle,
label
);
}
/// @inheritdoc IPoolConfigurator
function setAssetEModeCategory(
address asset,
uint8 newCategoryId
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
if (newCategoryId != 0) {
DataTypes.EModeCategory memory categoryData = _pool
.getEModeCategoryData(newCategoryId);
require(
categoryData.liquidationThreshold >
currentConfig.getLiquidationThreshold(),
Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT
);
}
uint256 oldCategoryId = currentConfig.getEModeCategory();
currentConfig.setEModeCategory(newCategoryId);
_pool.setConfiguration(asset, currentConfig);
emit EModeAssetCategoryChanged(
asset,
uint8(oldCategoryId),
newCategoryId
);
}
/// @inheritdoc IPoolConfigurator
function setUnbackedMintCap(
address asset,
uint256 newUnbackedMintCap
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveConfigurationMap memory currentConfig = _pool
.getConfiguration(asset);
uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();
currentConfig.setUnbackedMintCap(newUnbackedMintCap);
_pool.setConfiguration(asset, currentConfig);
emit UnbackedMintCapChanged(
asset,
oldUnbackedMintCap,
newUnbackedMintCap
);
}
/// @inheritdoc IPoolConfigurator
function setReserveInterestRateStrategyAddress(
address asset,
address newRateStrategyAddress
) external override onlyRiskOrPoolAdmins {
DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);
address oldRateStrategyAddress = reserve.interestRateStrategyAddress;
_pool.setReserveInterestRateStrategyAddress(
asset,
newRateStrategyAddress
);
emit ReserveInterestRateStrategyChanged(
asset,
oldRateStrategyAddress,
newRateStrategyAddress
);
}
/// @inheritdoc IPoolConfigurator
function setPoolPause(bool paused) external override onlyEmergencyAdmin {
address[] memory reserves = _pool.getReservesList();
for (uint256 i = 0; i < reserves.length; i++) {
if (reserves[i] != address(0)) {
setReservePause(reserves[i], paused);
}
}
}
/// @inheritdoc IPoolConfigurator
function updateBridgeProtocolFee(
uint256 newBridgeProtocolFee
) external override onlyPoolAdmin {
require(
newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,
Errors.BRIDGE_PROTOCOL_FEE_INVALID
);
uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();
_pool.updateBridgeProtocolFee(newBridgeProtocolFee);
emit BridgeProtocolFeeUpdated(
oldBridgeProtocolFee,
newBridgeProtocolFee
);
}
/// @inheritdoc IPoolConfigurator
function updateFlashloanPremiumTotal(
uint128 newFlashloanPremiumTotal
) external override onlyPoolAdmin {
require(
newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,
Errors.FLASHLOAN_PREMIUM_INVALID
);
uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();
_pool.updateFlashloanPremiums(
newFlashloanPremiumTotal,
_pool.FLASHLOAN_PREMIUM_TO_PROTOCOL()
);
emit FlashloanPremiumTotalUpdated(
oldFlashloanPremiumTotal,
newFlashloanPremiumTotal
);
}
/// @inheritdoc IPoolConfigurator
function updateFlashloanPremiumToProtocol(
uint128 newFlashloanPremiumToProtocol
) external override onlyPoolAdmin {
require(
newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,
Errors.FLASHLOAN_PREMIUM_INVALID
);
uint128 oldFlashloanPremiumToProtocol = _pool
.FLASHLOAN_PREMIUM_TO_PROTOCOL();
_pool.updateFlashloanPremiums(
_pool.FLASHLOAN_PREMIUM_TOTAL(),
newFlashloanPremiumToProtocol
);
emit FlashloanPremiumToProtocolUpdated(
oldFlashloanPremiumToProtocol,
newFlashloanPremiumToProtocol
);
}
function _checkNoSuppliers(address asset) internal view {
(
,
uint256 accruedToTreasury,
uint256 totalATokens,
,
,
,
,
,
,
,
,
) = IPoolDataProvider(_addressesProvider.getPoolDataProvider())
.getReserveData(asset);
require(
totalATokens == 0 && accruedToTreasury == 0,
Errors.RESERVE_LIQUIDITY_NOT_ZERO
);
}
function _checkNoBorrowers(address asset) internal view {
uint256 totalDebt = IPoolDataProvider(
_addressesProvider.getPoolDataProvider()
).getTotalDebt(asset);
require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);
}
function _onlyPoolAdmin() internal view {
IACLManager aclManager = IACLManager(
_addressesProvider.getACLManager()
);
require(
aclManager.isPoolAdmin(msg.sender),
Errors.CALLER_NOT_POOL_ADMIN
);
}
function _onlyEmergencyAdmin() internal view {
IACLManager aclManager = IACLManager(
_addressesProvider.getACLManager()
);
require(
aclManager.isEmergencyAdmin(msg.sender),
Errors.CALLER_NOT_EMERGENCY_ADMIN
);
}
function _onlyPoolOrEmergencyAdmin() internal view {
IACLManager aclManager = IACLManager(
_addressesProvider.getACLManager()
);
require(
aclManager.isPoolAdmin(msg.sender) ||
aclManager.isEmergencyAdmin(msg.sender),
Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN
);
}
function _onlyAssetListingOrPoolAdmins() internal view {
IACLManager aclManager = IACLManager(
_addressesProvider.getACLManager()
);
require(
aclManager.isAssetListingAdmin(msg.sender) ||
aclManager.isPoolAdmin(msg.sender),
Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN
);
}
function _onlyRiskOrPoolAdmins() internal view {
IACLManager aclManager = IACLManager(
_addressesProvider.getACLManager()
);
require(
aclManager.isRiskAdmin(msg.sender) ||
aclManager.isPoolAdmin(msg.sender),
Errors.CALLER_NOT_RISK_OR_POOL_ADMIN
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, 'Address: insufficient balance');
(bool success, ) = recipient.call{value: amount}('');
require(success, 'Address: unable to send value, recipient may have reverted');
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, 'Address: low-level call failed');
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, 'Address: insufficient balance for call');
require(isContract(target), 'Address: call to non-contract');
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return functionStaticCall(target, data, 'Address: low-level static call failed');
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), 'Address: static call to non-contract');
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, 'Address: low-level delegate call failed');
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), 'Address: delegate call to non-contract');
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
import './Proxy.sol';
import '../contracts/Address.sol';
/**
* @title BaseUpgradeabilityProxy
* @dev This contract implements a proxy that allows to change the
* implementation address to which it will delegate.
* Such a change is called an implementation upgrade.
*/
contract BaseUpgradeabilityProxy is Proxy {
/**
* @dev Emitted when the implementation is upgraded.
* @param implementation Address of the new implementation.
*/
event Upgraded(address indexed implementation);
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant IMPLEMENTATION_SLOT =
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Returns the current implementation.
* @return impl Address of the current implementation
*/
function _implementation() internal view override returns (address impl) {
bytes32 slot = IMPLEMENTATION_SLOT;
//solium-disable-next-line
assembly {
impl := sload(slot)
}
}
/**
* @dev Upgrades the proxy to a new implementation.
* @param newImplementation Address of the new implementation.
*/
function _upgradeTo(address newImplementation) internal {
_setImplementation(newImplementation);
emit Upgraded(newImplementation);
}
/**
* @dev Sets the implementation address of the proxy.
* @param newImplementation Address of the new implementation.
*/
function _setImplementation(address newImplementation) internal {
require(
Address.isContract(newImplementation),
'Cannot set a proxy implementation to a non-contract address'
);
bytes32 slot = IMPLEMENTATION_SLOT;
//solium-disable-next-line
assembly {
sstore(slot, newImplementation)
}
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
import './BaseUpgradeabilityProxy.sol';
/**
* @title InitializableUpgradeabilityProxy
* @dev Extends BaseUpgradeabilityProxy with an initializer for initializing
* implementation and init data.
*/
contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {
/**
* @dev Contract initializer.
* @param _logic Address of the initial implementation.
* @param _data Data to send as msg.data to the implementation to initialize the proxied contract.
* It should include the signature and the parameters of the function to be called, as described in
* https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
* This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.
*/
function initialize(address _logic, bytes memory _data) public payable {
require(_implementation() == address(0));
assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
_setImplementation(_logic);
if (_data.length > 0) {
(bool success, ) = _logic.delegatecall(_data);
require(success);
}
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
/**
* @title Proxy
* @dev Implements delegation of calls to other contracts, with proper
* forwarding of return values and bubbling of failures.
* It defines a fallback function that delegates all calls to the address
* returned by the abstract _implementation() internal function.
*/
abstract contract Proxy {
/**
* @dev Fallback function.
* Will run if no other function in the contract matches the call data.
* Implemented entirely in `_fallback`.
*/
fallback() external payable {
_fallback();
}
/**
* @return The Address of the implementation.
*/
function _implementation() internal view virtual returns (address);
/**
* @dev Delegates execution to an implementation contract.
* This is a low level function that doesn't return to its internal call site.
* It will return to the external caller whatever the implementation returns.
* @param implementation Address to delegate.
*/
function _delegate(address implementation) internal {
//solium-disable-next-line
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
/**
* @dev Function that is run as the first thing in the fallback function.
* Can be redefined in derived contracts to add functionality.
* Redefinitions must call super._willFallback().
*/
function _willFallback() internal virtual {}
/**
* @dev fallback implementation.
* Extracted to enable manual triggering.
*/
function _fallback() internal {
_willFallback();
_delegate(_implementation());
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
/**
* @title IACLManager
* @author Aave
* @notice Defines the basic interface for the ACL Manager
*/
interface IACLManager {
/**
* @notice Returns the contract address of the PoolAddressesProvider
* @return The address of the PoolAddressesProvider
*/
function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
/**
* @notice Returns the identifier of the PoolAdmin role
* @return The id of the PoolAdmin role
*/
function POOL_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the EmergencyAdmin role
* @return The id of the EmergencyAdmin role
*/
function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the RiskAdmin role
* @return The id of the RiskAdmin role
*/
function RISK_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the FlashBorrower role
* @return The id of the FlashBorrower role
*/
function FLASH_BORROWER_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the Bridge role
* @return The id of the Bridge role
*/
function BRIDGE_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the AssetListingAdmin role
* @return The id of the AssetListingAdmin role
*/
function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Set the role as admin of a specific role.
* @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.
* @param role The role to be managed by the admin role
* @param adminRole The admin role
*/
function setRoleAdmin(bytes32 role, bytes32 adminRole) external;
/**
* @notice Adds a new admin as PoolAdmin
* @param admin The address of the new admin
*/
function addPoolAdmin(address admin) external;
/**
* @notice Removes an admin as PoolAdmin
* @param admin The address of the admin to remove
*/
function removePoolAdmin(address admin) external;
/**
* @notice Returns true if the address is PoolAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is PoolAdmin, false otherwise
*/
function isPoolAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new admin as EmergencyAdmin
* @param admin The address of the new admin
*/
function addEmergencyAdmin(address admin) external;
/**
* @notice Removes an admin as EmergencyAdmin
* @param admin The address of the admin to remove
*/
function removeEmergencyAdmin(address admin) external;
/**
* @notice Returns true if the address is EmergencyAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is EmergencyAdmin, false otherwise
*/
function isEmergencyAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new admin as RiskAdmin
* @param admin The address of the new admin
*/
function addRiskAdmin(address admin) external;
/**
* @notice Removes an admin as RiskAdmin
* @param admin The address of the admin to remove
*/
function removeRiskAdmin(address admin) external;
/**
* @notice Returns true if the address is RiskAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is RiskAdmin, false otherwise
*/
function isRiskAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new address as FlashBorrower
* @param borrower The address of the new FlashBorrower
*/
function addFlashBorrower(address borrower) external;
/**
* @notice Removes an address as FlashBorrower
* @param borrower The address of the FlashBorrower to remove
*/
function removeFlashBorrower(address borrower) external;
/**
* @notice Returns true if the address is FlashBorrower, false otherwise
* @param borrower The address to check
* @return True if the given address is FlashBorrower, false otherwise
*/
function isFlashBorrower(address borrower) external view returns (bool);
/**
* @notice Adds a new address as Bridge
* @param bridge The address of the new Bridge
*/
function addBridge(address bridge) external;
/**
* @notice Removes an address as Bridge
* @param bridge The address of the bridge to remove
*/
function removeBridge(address bridge) external;
/**
* @notice Returns true if the address is Bridge, false otherwise
* @param bridge The address to check
* @return True if the given address is Bridge, false otherwise
*/
function isBridge(address bridge) external view returns (bool);
/**
* @notice Adds a new admin as AssetListingAdmin
* @param admin The address of the new admin
*/
function addAssetListingAdmin(address admin) external;
/**
* @notice Removes an admin as AssetListingAdmin
* @param admin The address of the admin to remove
*/
function removeAssetListingAdmin(address admin) external;
/**
* @notice Returns true if the address is AssetListingAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is AssetListingAdmin, false otherwise
*/
function isAssetListingAdmin(address admin) external view returns (bool);
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
/**
* @title IAaveIncentivesController
* @author Aave
* @notice Defines the basic interface for an Aave Incentives Controller.
* @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.
*/
interface IAaveIncentivesController {
/**
* @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.
* @dev The units of `totalSupply` and `userBalance` should be the same.
* @param user The address of the user whose asset balance has changed
* @param totalSupply The total supply of the asset prior to user balance change
* @param userBalance The previous user balance prior to balance change
*/
function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
import {IPool} from './IPool.sol';
/**
* @title IInitializableAToken
* @author Aave
* @notice Interface for the initialize function on AToken
*/
interface IInitializableAToken {
/**
* @dev Emitted when an aToken is initialized
* @param underlyingAsset The address of the underlying asset
* @param pool The address of the associated pool
* @param treasury The address of the treasury
* @param incentivesController The address of the incentives controller for this aToken
* @param aTokenDecimals The decimals of the underlying
* @param aTokenName The name of the aToken
* @param aTokenSymbol The symbol of the aToken
* @param params A set of encoded parameters for additional initialization
*/
event Initialized(
address indexed underlyingAsset,
address indexed pool,
address treasury,
address incentivesController,
uint8 aTokenDecimals,
string aTokenName,
string aTokenSymbol,
bytes params
);
/**
* @notice Initializes the aToken
* @param pool The pool contract that is initializing this contract
* @param treasury The address of the Aave treasury, receiving the fees on this aToken
* @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)
* @param incentivesController The smart contract managing potential incentives distribution
* @param aTokenDecimals The decimals of the aToken, same as the underlying asset's
* @param aTokenName The name of the aToken
* @param aTokenSymbol The symbol of the aToken
* @param params A set of encoded parameters for additional initialization
*/
function initialize(
IPool pool,
address treasury,
address underlyingAsset,
IAaveIncentivesController incentivesController,
uint8 aTokenDecimals,
string calldata aTokenName,
string calldata aTokenSymbol,
bytes calldata params
) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
import {IPool} from './IPool.sol';
/**
* @title IInitializableDebtToken
* @author Aave
* @notice Interface for the initialize function common between debt tokens
*/
interface IInitializableDebtToken {
/**
* @dev Emitted when a debt token is initialized
* @param underlyingAsset The address of the underlying asset
* @param pool The address of the associated pool
* @param incentivesController The address of the incentives controller for this aToken
* @param debtTokenDecimals The decimals of the debt token
* @param debtTokenName The name of the debt token
* @param debtTokenSymbol The symbol of the debt token
* @param params A set of encoded parameters for additional initialization
*/
event Initialized(
address indexed underlyingAsset,
address indexed pool,
address incentivesController,
uint8 debtTokenDecimals,
string debtTokenName,
string debtTokenSymbol,
bytes params
);
/**
* @notice Initializes the debt token.
* @param pool The pool contract that is initializing this contract
* @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)
* @param incentivesController The smart contract managing potential incentives distribution
* @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's
* @param debtTokenName The name of the token
* @param debtTokenSymbol The symbol of the token
* @param params A set of encoded parameters for additional initialization
*/
function initialize(
IPool pool,
address underlyingAsset,
IAaveIncentivesController incentivesController,
uint8 debtTokenDecimals,
string memory debtTokenName,
string memory debtTokenSymbol,
bytes calldata params
) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
/**
* @title IPool
* @author Aave
* @notice Defines the basic interface for an Aave Pool.
*/
interface IPool {
/**
* @dev Emitted on mintUnbacked()
* @param reserve The address of the underlying asset of the reserve
* @param user The address initiating the supply
* @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens
* @param amount The amount of supplied assets
* @param referralCode The referral code used
*/
event MintUnbacked(
address indexed reserve,
address user,
address indexed onBehalfOf,
uint256 amount,
uint16 indexed referralCode
);
/**
* @dev Emitted on backUnbacked()
* @param reserve The address of the underlying asset of the reserve
* @param backer The address paying for the backing
* @param amount The amount added as backing
* @param fee The amount paid in fees
*/
event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);
/**
* @dev Emitted on supply()
* @param reserve The address of the underlying asset of the reserve
* @param user The address initiating the supply
* @param onBehalfOf The beneficiary of the supply, receiving the aTokens
* @param amount The amount supplied
* @param referralCode The referral code used
*/
event Supply(
address indexed reserve,
address user,
address indexed onBehalfOf,
uint256 amount,
uint16 indexed referralCode
);
/**
* @dev Emitted on withdraw()
* @param reserve The address of the underlying asset being withdrawn
* @param user The address initiating the withdrawal, owner of aTokens
* @param to The address that will receive the underlying
* @param amount The amount to be withdrawn
*/
event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);
/**
* @dev Emitted on borrow() and flashLoan() when debt needs to be opened
* @param reserve The address of the underlying asset being borrowed
* @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just
* initiator of the transaction on flashLoan()
* @param onBehalfOf The address that will be getting the debt
* @param amount The amount borrowed out
* @param interestRateMode The rate mode: 1 for Stable, 2 for Variable
* @param borrowRate The numeric rate at which the user has borrowed, expressed in ray
* @param referralCode The referral code used
*/
event Borrow(
address indexed reserve,
address user,
address indexed onBehalfOf,
uint256 amount,
DataTypes.InterestRateMode interestRateMode,
uint256 borrowRate,
uint16 indexed referralCode
);
/**
* @dev Emitted on repay()
* @param reserve The address of the underlying asset of the reserve
* @param user The beneficiary of the repayment, getting his debt reduced
* @param repayer The address of the user initiating the repay(), providing the funds
* @param amount The amount repaid
* @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly
*/
event Repay(
address indexed reserve,
address indexed user,
address indexed repayer,
uint256 amount,
bool useATokens
);
/**
* @dev Emitted on swapBorrowRateMode()
* @param reserve The address of the underlying asset of the reserve
* @param user The address of the user swapping his rate mode
* @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable
*/
event SwapBorrowRateMode(
address indexed reserve,
address indexed user,
DataTypes.InterestRateMode interestRateMode
);
/**
* @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets
* @param asset The address of the underlying asset of the reserve
* @param totalDebt The total isolation mode debt for the reserve
*/
event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);
/**
* @dev Emitted when the user selects a certain asset category for eMode
* @param user The address of the user
* @param categoryId The category id
*/
event UserEModeSet(address indexed user, uint8 categoryId);
/**
* @dev Emitted on setUserUseReserveAsCollateral()
* @param reserve The address of the underlying asset of the reserve
* @param user The address of the user enabling the usage as collateral
*/
event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);
/**
* @dev Emitted on setUserUseReserveAsCollateral()
* @param reserve The address of the underlying asset of the reserve
* @param user The address of the user enabling the usage as collateral
*/
event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
/**
* @dev Emitted on rebalanceStableBorrowRate()
* @param reserve The address of the underlying asset of the reserve
* @param user The address of the user for which the rebalance has been executed
*/
event RebalanceStableBorrowRate(address indexed reserve, address indexed user);
/**
* @dev Emitted on flashLoan()
* @param target The address of the flash loan receiver contract
* @param initiator The address initiating the flash loan
* @param asset The address of the asset being flash borrowed
* @param amount The amount flash borrowed
* @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt
* @param premium The fee flash borrowed
* @param referralCode The referral code used
*/
event FlashLoan(
address indexed target,
address initiator,
address indexed asset,
uint256 amount,
DataTypes.InterestRateMode interestRateMode,
uint256 premium,
uint16 indexed referralCode
);
/**
* @dev Emitted when a borrower is liquidated.
* @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
* @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
* @param user The address of the borrower getting liquidated
* @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
* @param liquidatedCollateralAmount The amount of collateral received by the liquidator
* @param liquidator The address of the liquidator
* @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants
* to receive the underlying collateral asset directly
*/
event LiquidationCall(
address indexed collateralAsset,
address indexed debtAsset,
address indexed user,
uint256 debtToCover,
uint256 liquidatedCollateralAmount,
address liquidator,
bool receiveAToken
);
/**
* @dev Emitted when the state of a reserve is updated.
* @param reserve The address of the underlying asset of the reserve
* @param liquidityRate The next liquidity rate
* @param stableBorrowRate The next stable borrow rate
* @param variableBorrowRate The next variable borrow rate
* @param liquidityIndex The next liquidity index
* @param variableBorrowIndex The next variable borrow index
*/
event ReserveDataUpdated(
address indexed reserve,
uint256 liquidityRate,
uint256 stableBorrowRate,
uint256 variableBorrowRate,
uint256 liquidityIndex,
uint256 variableBorrowIndex
);
/**
* @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.
* @param reserve The address of the reserve
* @param amountMinted The amount minted to the treasury
*/
event MintedToTreasury(address indexed reserve, uint256 amountMinted);
/**
* @notice Mints an `amount` of aTokens to the `onBehalfOf`
* @param asset The address of the underlying asset to mint
* @param amount The amount to mint
* @param onBehalfOf The address that will receive the aTokens
* @param referralCode Code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
*/
function mintUnbacked(
address asset,
uint256 amount,
address onBehalfOf,
uint16 referralCode
) external;
/**
* @notice Back the current unbacked underlying with `amount` and pay `fee`.
* @param asset The address of the underlying asset to back
* @param amount The amount to back
* @param fee The amount paid in fees
* @return The backed amount
*/
function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);
/**
* @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.
* - E.g. User supplies 100 USDC and gets in return 100 aUSDC
* @param asset The address of the underlying asset to supply
* @param amount The amount to be supplied
* @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user
* wants to receive them on his own wallet, or a different address if the beneficiary of aTokens
* is a different wallet
* @param referralCode Code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
*/
function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
/**
* @notice Supply with transfer approval of asset to be supplied done via permit function
* see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713
* @param asset The address of the underlying asset to supply
* @param amount The amount to be supplied
* @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user
* wants to receive them on his own wallet, or a different address if the beneficiary of aTokens
* is a different wallet
* @param deadline The deadline timestamp that the permit is valid
* @param referralCode Code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
* @param permitV The V parameter of ERC712 permit sig
* @param permitR The R parameter of ERC712 permit sig
* @param permitS The S parameter of ERC712 permit sig
*/
function supplyWithPermit(
address asset,
uint256 amount,
address onBehalfOf,
uint16 referralCode,
uint256 deadline,
uint8 permitV,
bytes32 permitR,
bytes32 permitS
) external;
/**
* @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned
* E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC
* @param asset The address of the underlying asset to withdraw
* @param amount The underlying amount to be withdrawn
* - Send the value type(uint256).max in order to withdraw the whole aToken balance
* @param to The address that will receive the underlying, same as msg.sender if the user
* wants to receive it on his own wallet, or a different address if the beneficiary is a
* different wallet
* @return The final amount withdrawn
*/
function withdraw(address asset, uint256 amount, address to) external returns (uint256);
/**
* @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower
* already supplied enough collateral, or he was given enough allowance by a credit delegator on the
* corresponding debt token (StableDebtToken or VariableDebtToken)
* - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet
* and 100 stable/variable debt tokens, depending on the `interestRateMode`
* @param asset The address of the underlying asset to borrow
* @param amount The amount to be borrowed
* @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable
* @param referralCode The code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
* @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself
* calling the function if he wants to borrow against his own collateral, or the address of the credit delegator
* if he has been given credit delegation allowance
*/
function borrow(
address asset,
uint256 amount,
uint256 interestRateMode,
uint16 referralCode,
address onBehalfOf
) external;
/**
* @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned
* - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address
* @param asset The address of the borrowed underlying asset previously borrowed
* @param amount The amount to repay
* - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`
* @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
* @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the
* user calling the function if he wants to reduce/remove his own debt, or the address of any other
* other borrower whose debt should be removed
* @return The final amount repaid
*/
function repay(
address asset,
uint256 amount,
uint256 interestRateMode,
address onBehalfOf
) external returns (uint256);
/**
* @notice Repay with transfer approval of asset to be repaid done via permit function
* see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713
* @param asset The address of the borrowed underlying asset previously borrowed
* @param amount The amount to repay
* - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`
* @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
* @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the
* user calling the function if he wants to reduce/remove his own debt, or the address of any other
* other borrower whose debt should be removed
* @param deadline The deadline timestamp that the permit is valid
* @param permitV The V parameter of ERC712 permit sig
* @param permitR The R parameter of ERC712 permit sig
* @param permitS The S parameter of ERC712 permit sig
* @return The final amount repaid
*/
function repayWithPermit(
address asset,
uint256 amount,
uint256 interestRateMode,
address onBehalfOf,
uint256 deadline,
uint8 permitV,
bytes32 permitR,
bytes32 permitS
) external returns (uint256);
/**
* @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the
* equivalent debt tokens
* - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens
* @dev Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken
* balance is not enough to cover the whole debt
* @param asset The address of the borrowed underlying asset previously borrowed
* @param amount The amount to repay
* - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`
* @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
* @return The final amount repaid
*/
function repayWithATokens(
address asset,
uint256 amount,
uint256 interestRateMode
) external returns (uint256);
/**
* @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa
* @param asset The address of the underlying asset borrowed
* @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable
*/
function swapBorrowRateMode(address asset, uint256 interestRateMode) external;
/**
* @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.
* - Users can be rebalanced if the following conditions are satisfied:
* 1. Usage ratio is above 95%
* 2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too
* much has been borrowed at a stable rate and suppliers are not earning enough
* @param asset The address of the underlying asset borrowed
* @param user The address of the user to be rebalanced
*/
function rebalanceStableBorrowRate(address asset, address user) external;
/**
* @notice Allows suppliers to enable/disable a specific supplied asset as collateral
* @param asset The address of the underlying asset supplied
* @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise
*/
function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;
/**
* @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1
* - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives
* a proportionally amount of the `collateralAsset` plus a bonus to cover market risk
* @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
* @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
* @param user The address of the borrower getting liquidated
* @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
* @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants
* to receive the underlying collateral asset directly
*/
function liquidationCall(
address collateralAsset,
address debtAsset,
address user,
uint256 debtToCover,
bool receiveAToken
) external;
/**
* @notice Allows smartcontracts to access the liquidity of the pool within one transaction,
* as long as the amount taken plus a fee is returned.
* @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept
* into consideration. For further details please visit https://docs.aave.com/developers/
* @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface
* @param assets The addresses of the assets being flash-borrowed
* @param amounts The amounts of the assets being flash-borrowed
* @param interestRateModes Types of the debt to open if the flash loan is not returned:
* 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver
* 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
* 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
* @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2
* @param params Variadic packed params to pass to the receiver as extra information
* @param referralCode The code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
*/
function flashLoan(
address receiverAddress,
address[] calldata assets,
uint256[] calldata amounts,
uint256[] calldata interestRateModes,
address onBehalfOf,
bytes calldata params,
uint16 referralCode
) external;
/**
* @notice Allows smartcontracts to access the liquidity of the pool within one transaction,
* as long as the amount taken plus a fee is returned.
* @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept
* into consideration. For further details please visit https://docs.aave.com/developers/
* @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface
* @param asset The address of the asset being flash-borrowed
* @param amount The amount of the asset being flash-borrowed
* @param params Variadic packed params to pass to the receiver as extra information
* @param referralCode The code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
*/
function flashLoanSimple(
address receiverAddress,
address asset,
uint256 amount,
bytes calldata params,
uint16 referralCode
) external;
/**
* @notice Returns the user account data across all the reserves
* @param user The address of the user
* @return totalCollateralBase The total collateral of the user in the base currency used by the price feed
* @return totalDebtBase The total debt of the user in the base currency used by the price feed
* @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed
* @return currentLiquidationThreshold The liquidation threshold of the user
* @return ltv The loan to value of The user
* @return healthFactor The current health factor of the user
*/
function getUserAccountData(
address user
)
external
view
returns (
uint256 totalCollateralBase,
uint256 totalDebtBase,
uint256 availableBorrowsBase,
uint256 currentLiquidationThreshold,
uint256 ltv,
uint256 healthFactor
);
/**
* @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an
* interest rate strategy
* @dev Only callable by the PoolConfigurator contract
* @param asset The address of the underlying asset of the reserve
* @param aTokenAddress The address of the aToken that will be assigned to the reserve
* @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve
* @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve
* @param interestRateStrategyAddress The address of the interest rate strategy contract
*/
function initReserve(
address asset,
address aTokenAddress,
address stableDebtAddress,
address variableDebtAddress,
address interestRateStrategyAddress
) external;
/**
* @notice Drop a reserve
* @dev Only callable by the PoolConfigurator contract
* @param asset The address of the underlying asset of the reserve
*/
function dropReserve(address asset) external;
/**
* @notice Updates the address of the interest rate strategy contract
* @dev Only callable by the PoolConfigurator contract
* @param asset The address of the underlying asset of the reserve
* @param rateStrategyAddress The address of the interest rate strategy contract
*/
function setReserveInterestRateStrategyAddress(
address asset,
address rateStrategyAddress
) external;
/**
* @notice Sets the configuration bitmap of the reserve as a whole
* @dev Only callable by the PoolConfigurator contract
* @param asset The address of the underlying asset of the reserve
* @param configuration The new configuration bitmap
*/
function setConfiguration(
address asset,
DataTypes.ReserveConfigurationMap calldata configuration
) external;
/**
* @notice Returns the configuration of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The configuration of the reserve
*/
function getConfiguration(
address asset
) external view returns (DataTypes.ReserveConfigurationMap memory);
/**
* @notice Returns the configuration of the user across all the reserves
* @param user The user address
* @return The configuration of the user
*/
function getUserConfiguration(
address user
) external view returns (DataTypes.UserConfigurationMap memory);
/**
* @notice Returns the normalized income of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The reserve's normalized income
*/
function getReserveNormalizedIncome(address asset) external view returns (uint256);
/**
* @notice Returns the normalized variable debt per unit of asset
* @dev WARNING: This function is intended to be used primarily by the protocol itself to get a
* "dynamic" variable index based on time, current stored index and virtual rate at the current
* moment (approx. a borrower would get if opening a position). This means that is always used in
* combination with variable debt supply/balances.
* If using this function externally, consider that is possible to have an increasing normalized
* variable debt that is not equivalent to how the variable debt index would be updated in storage
* (e.g. only updates with non-zero variable debt supply)
* @param asset The address of the underlying asset of the reserve
* @return The reserve normalized variable debt
*/
function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);
/**
* @notice Returns the state and configuration of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The state and configuration data of the reserve
*/
function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);
/**
* @notice Validates and finalizes an aToken transfer
* @dev Only callable by the overlying aToken of the `asset`
* @param asset The address of the underlying asset of the aToken
* @param from The user from which the aTokens are transferred
* @param to The user receiving the aTokens
* @param amount The amount being transferred/withdrawn
* @param balanceFromBefore The aToken balance of the `from` user before the transfer
* @param balanceToBefore The aToken balance of the `to` user before the transfer
*/
function finalizeTransfer(
address asset,
address from,
address to,
uint256 amount,
uint256 balanceFromBefore,
uint256 balanceToBefore
) external;
/**
* @notice Returns the list of the underlying assets of all the initialized reserves
* @dev It does not include dropped reserves
* @return The addresses of the underlying assets of the initialized reserves
*/
function getReservesList() external view returns (address[] memory);
/**
* @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct
* @param id The id of the reserve as stored in the DataTypes.ReserveData struct
* @return The address of the reserve associated with id
*/
function getReserveAddressById(uint16 id) external view returns (address);
/**
* @notice Returns the PoolAddressesProvider connected to this contract
* @return The address of the PoolAddressesProvider
*/
function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
/**
* @notice Updates the protocol fee on the bridging
* @param bridgeProtocolFee The part of the premium sent to the protocol treasury
*/
function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;
/**
* @notice Updates flash loan premiums. Flash loan premium consists of two parts:
* - A part is sent to aToken holders as extra, one time accumulated interest
* - A part is collected by the protocol treasury
* @dev The total premium is calculated on the total borrowed amount
* @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`
* @dev Only callable by the PoolConfigurator contract
* @param flashLoanPremiumTotal The total premium, expressed in bps
* @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps
*/
function updateFlashloanPremiums(
uint128 flashLoanPremiumTotal,
uint128 flashLoanPremiumToProtocol
) external;
/**
* @notice Configures a new category for the eMode.
* @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.
* The category 0 is reserved as it's the default for volatile assets
* @param id The id of the category
* @param config The configuration of the category
*/
function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;
/**
* @notice Returns the data of an eMode category
* @param id The id of the category
* @return The configuration data of the category
*/
function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);
/**
* @notice Allows a user to use the protocol in eMode
* @param categoryId The id of the category
*/
function setUserEMode(uint8 categoryId) external;
/**
* @notice Returns the eMode the user is using
* @param user The address of the user
* @return The eMode id
*/
function getUserEMode(address user) external view returns (uint256);
/**
* @notice Resets the isolation mode total debt of the given asset to zero
* @dev It requires the given asset has zero debt ceiling
* @param asset The address of the underlying asset to reset the isolationModeTotalDebt
*/
function resetIsolationModeTotalDebt(address asset) external;
/**
* @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate
* @return The percentage of available liquidity to borrow, expressed in bps
*/
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);
/**
* @notice Returns the total fee on flash loans
* @return The total fee on flashloans
*/
function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);
/**
* @notice Returns the part of the bridge fees sent to protocol
* @return The bridge fee sent to the protocol treasury
*/
function BRIDGE_PROTOCOL_FEE() external view returns (uint256);
/**
* @notice Returns the part of the flashloan fees sent to protocol
* @return The flashloan fee sent to the protocol treasury
*/
function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);
/**
* @notice Returns the maximum number of reserves supported to be listed in this Pool
* @return The maximum number of reserves supported
*/
function MAX_NUMBER_RESERVES() external view returns (uint16);
/**
* @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens
* @param assets The list of reserves for which the minting needs to be executed
*/
function mintToTreasury(address[] calldata assets) external;
/**
* @notice Rescue and transfer tokens locked in this contract
* @param token The address of the token
* @param to The address of the recipient
* @param amount The amount of token to transfer
*/
function rescueTokens(address token, address to, uint256 amount) external;
/**
* @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.
* - E.g. User supplies 100 USDC and gets in return 100 aUSDC
* @dev Deprecated: Use the `supply` function instead
* @param asset The address of the underlying asset to supply
* @param amount The amount to be supplied
* @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user
* wants to receive them on his own wallet, or a different address if the beneficiary of aTokens
* is a different wallet
* @param referralCode Code used to register the integrator originating the operation, for potential rewards.
* 0 if the action is executed directly by the user, without any middle-man
*/
function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
/**
* @title IPoolAddressesProvider
* @author Aave
* @notice Defines the basic interface for a Pool Addresses Provider.
*/
interface IPoolAddressesProvider {
/**
* @dev Emitted when the market identifier is updated.
* @param oldMarketId The old id of the market
* @param newMarketId The new id of the market
*/
event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);
/**
* @dev Emitted when the pool is updated.
* @param oldAddress The old address of the Pool
* @param newAddress The new address of the Pool
*/
event PoolUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the pool configurator is updated.
* @param oldAddress The old address of the PoolConfigurator
* @param newAddress The new address of the PoolConfigurator
*/
event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the price oracle is updated.
* @param oldAddress The old address of the PriceOracle
* @param newAddress The new address of the PriceOracle
*/
event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the ACL manager is updated.
* @param oldAddress The old address of the ACLManager
* @param newAddress The new address of the ACLManager
*/
event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the ACL admin is updated.
* @param oldAddress The old address of the ACLAdmin
* @param newAddress The new address of the ACLAdmin
*/
event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the price oracle sentinel is updated.
* @param oldAddress The old address of the PriceOracleSentinel
* @param newAddress The new address of the PriceOracleSentinel
*/
event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the pool data provider is updated.
* @param oldAddress The old address of the PoolDataProvider
* @param newAddress The new address of the PoolDataProvider
*/
event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when a new proxy is created.
* @param id The identifier of the proxy
* @param proxyAddress The address of the created proxy contract
* @param implementationAddress The address of the implementation contract
*/
event ProxyCreated(
bytes32 indexed id,
address indexed proxyAddress,
address indexed implementationAddress
);
/**
* @dev Emitted when a new non-proxied contract address is registered.
* @param id The identifier of the contract
* @param oldAddress The address of the old contract
* @param newAddress The address of the new contract
*/
event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the implementation of the proxy registered with id is updated
* @param id The identifier of the contract
* @param proxyAddress The address of the proxy contract
* @param oldImplementationAddress The address of the old implementation contract
* @param newImplementationAddress The address of the new implementation contract
*/
event AddressSetAsProxy(
bytes32 indexed id,
address indexed proxyAddress,
address oldImplementationAddress,
address indexed newImplementationAddress
);
/**
* @notice Returns the id of the Aave market to which this contract points to.
* @return The market id
*/
function getMarketId() external view returns (string memory);
/**
* @notice Associates an id with a specific PoolAddressesProvider.
* @dev This can be used to create an onchain registry of PoolAddressesProviders to
* identify and validate multiple Aave markets.
* @param newMarketId The market id
*/
function setMarketId(string calldata newMarketId) external;
/**
* @notice Returns an address by its identifier.
* @dev The returned address might be an EOA or a contract, potentially proxied
* @dev It returns ZERO if there is no registered address with the given id
* @param id The id
* @return The address of the registered for the specified id
*/
function getAddress(bytes32 id) external view returns (address);
/**
* @notice General function to update the implementation of a proxy registered with
* certain `id`. If there is no proxy registered, it will instantiate one and
* set as implementation the `newImplementationAddress`.
* @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit
* setter function, in order to avoid unexpected consequences
* @param id The id
* @param newImplementationAddress The address of the new implementation
*/
function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;
/**
* @notice Sets an address for an id replacing the address saved in the addresses map.
* @dev IMPORTANT Use this function carefully, as it will do a hard replacement
* @param id The id
* @param newAddress The address to set
*/
function setAddress(bytes32 id, address newAddress) external;
/**
* @notice Returns the address of the Pool proxy.
* @return The Pool proxy address
*/
function getPool() external view returns (address);
/**
* @notice Updates the implementation of the Pool, or creates a proxy
* setting the new `pool` implementation when the function is called for the first time.
* @param newPoolImpl The new Pool implementation
*/
function setPoolImpl(address newPoolImpl) external;
/**
* @notice Returns the address of the PoolConfigurator proxy.
* @return The PoolConfigurator proxy address
*/
function getPoolConfigurator() external view returns (address);
/**
* @notice Updates the implementation of the PoolConfigurator, or creates a proxy
* setting the new `PoolConfigurator` implementation when the function is called for the first time.
* @param newPoolConfiguratorImpl The new PoolConfigurator implementation
*/
function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;
/**
* @notice Returns the address of the price oracle.
* @return The address of the PriceOracle
*/
function getPriceOracle() external view returns (address);
/**
* @notice Updates the address of the price oracle.
* @param newPriceOracle The address of the new PriceOracle
*/
function setPriceOracle(address newPriceOracle) external;
/**
* @notice Returns the address of the ACL manager.
* @return The address of the ACLManager
*/
function getACLManager() external view returns (address);
/**
* @notice Updates the address of the ACL manager.
* @param newAclManager The address of the new ACLManager
*/
function setACLManager(address newAclManager) external;
/**
* @notice Returns the address of the ACL admin.
* @return The address of the ACL admin
*/
function getACLAdmin() external view returns (address);
/**
* @notice Updates the address of the ACL admin.
* @param newAclAdmin The address of the new ACL admin
*/
function setACLAdmin(address newAclAdmin) external;
/**
* @notice Returns the address of the price oracle sentinel.
* @return The address of the PriceOracleSentinel
*/
function getPriceOracleSentinel() external view returns (address);
/**
* @notice Updates the address of the price oracle sentinel.
* @param newPriceOracleSentinel The address of the new PriceOracleSentinel
*/
function setPriceOracleSentinel(address newPriceOracleSentinel) external;
/**
* @notice Returns the address of the data provider.
* @return The address of the DataProvider
*/
function getPoolDataProvider() external view returns (address);
/**
* @notice Updates the address of the data provider.
* @param newDataProvider The address of the new DataProvider
*/
function setPoolDataProvider(address newDataProvider) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';
/**
* @title IPoolConfigurator
* @author Aave
* @notice Defines the basic interface for a Pool configurator.
*/
interface IPoolConfigurator {
/**
* @dev Emitted when a reserve is initialized.
* @param asset The address of the underlying asset of the reserve
* @param aToken The address of the associated aToken contract
* @param stableDebtToken The address of the associated stable rate debt token
* @param variableDebtToken The address of the associated variable rate debt token
* @param interestRateStrategyAddress The address of the interest rate strategy for the reserve
*/
event ReserveInitialized(
address indexed asset,
address indexed aToken,
address stableDebtToken,
address variableDebtToken,
address interestRateStrategyAddress
);
/**
* @dev Emitted when borrowing is enabled or disabled on a reserve.
* @param asset The address of the underlying asset of the reserve
* @param enabled True if borrowing is enabled, false otherwise
*/
event ReserveBorrowing(address indexed asset, bool enabled);
/**
* @dev Emitted when flashloans are enabled or disabled on a reserve.
* @param asset The address of the underlying asset of the reserve
* @param enabled True if flashloans are enabled, false otherwise
*/
event ReserveFlashLoaning(address indexed asset, bool enabled);
/**
* @dev Emitted when the collateralization risk parameters for the specified asset are updated.
* @param asset The address of the underlying asset of the reserve
* @param ltv The loan to value of the asset when used as collateral
* @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized
* @param liquidationBonus The bonus liquidators receive to liquidate this asset
*/
event CollateralConfigurationChanged(
address indexed asset,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus
);
/**
* @dev Emitted when stable rate borrowing is enabled or disabled on a reserve
* @param asset The address of the underlying asset of the reserve
* @param enabled True if stable rate borrowing is enabled, false otherwise
*/
event ReserveStableRateBorrowing(address indexed asset, bool enabled);
/**
* @dev Emitted when a reserve is activated or deactivated
* @param asset The address of the underlying asset of the reserve
* @param active True if reserve is active, false otherwise
*/
event ReserveActive(address indexed asset, bool active);
/**
* @dev Emitted when a reserve is frozen or unfrozen
* @param asset The address of the underlying asset of the reserve
* @param frozen True if reserve is frozen, false otherwise
*/
event ReserveFrozen(address indexed asset, bool frozen);
/**
* @dev Emitted when a reserve is paused or unpaused
* @param asset The address of the underlying asset of the reserve
* @param paused True if reserve is paused, false otherwise
*/
event ReservePaused(address indexed asset, bool paused);
/**
* @dev Emitted when a reserve is dropped.
* @param asset The address of the underlying asset of the reserve
*/
event ReserveDropped(address indexed asset);
/**
* @dev Emitted when a reserve factor is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldReserveFactor The old reserve factor, expressed in bps
* @param newReserveFactor The new reserve factor, expressed in bps
*/
event ReserveFactorChanged(
address indexed asset,
uint256 oldReserveFactor,
uint256 newReserveFactor
);
/**
* @dev Emitted when the borrow cap of a reserve is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldBorrowCap The old borrow cap
* @param newBorrowCap The new borrow cap
*/
event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);
/**
* @dev Emitted when the supply cap of a reserve is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldSupplyCap The old supply cap
* @param newSupplyCap The new supply cap
*/
event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);
/**
* @dev Emitted when the liquidation protocol fee of a reserve is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldFee The old liquidation protocol fee, expressed in bps
* @param newFee The new liquidation protocol fee, expressed in bps
*/
event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);
/**
* @dev Emitted when the unbacked mint cap of a reserve is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldUnbackedMintCap The old unbacked mint cap
* @param newUnbackedMintCap The new unbacked mint cap
*/
event UnbackedMintCapChanged(
address indexed asset,
uint256 oldUnbackedMintCap,
uint256 newUnbackedMintCap
);
/**
* @dev Emitted when the category of an asset in eMode is changed.
* @param asset The address of the underlying asset of the reserve
* @param oldCategoryId The old eMode asset category
* @param newCategoryId The new eMode asset category
*/
event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);
/**
* @dev Emitted when a new eMode category is added.
* @param categoryId The new eMode category id
* @param ltv The ltv for the asset category in eMode
* @param liquidationThreshold The liquidationThreshold for the asset category in eMode
* @param liquidationBonus The liquidationBonus for the asset category in eMode
* @param oracle The optional address of the price oracle specific for this category
* @param label A human readable identifier for the category
*/
event EModeCategoryAdded(
uint8 indexed categoryId,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus,
address oracle,
string label
);
/**
* @dev Emitted when a reserve interest strategy contract is updated.
* @param asset The address of the underlying asset of the reserve
* @param oldStrategy The address of the old interest strategy contract
* @param newStrategy The address of the new interest strategy contract
*/
event ReserveInterestRateStrategyChanged(
address indexed asset,
address oldStrategy,
address newStrategy
);
/**
* @dev Emitted when an aToken implementation is upgraded.
* @param asset The address of the underlying asset of the reserve
* @param proxy The aToken proxy address
* @param implementation The new aToken implementation
*/
event ATokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
/**
* @dev Emitted when the implementation of a stable debt token is upgraded.
* @param asset The address of the underlying asset of the reserve
* @param proxy The stable debt token proxy address
* @param implementation The new aToken implementation
*/
event StableDebtTokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
/**
* @dev Emitted when the implementation of a variable debt token is upgraded.
* @param asset The address of the underlying asset of the reserve
* @param proxy The variable debt token proxy address
* @param implementation The new aToken implementation
*/
event VariableDebtTokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
/**
* @dev Emitted when the debt ceiling of an asset is set.
* @param asset The address of the underlying asset of the reserve
* @param oldDebtCeiling The old debt ceiling
* @param newDebtCeiling The new debt ceiling
*/
event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);
/**
* @dev Emitted when the the siloed borrowing state for an asset is changed.
* @param asset The address of the underlying asset of the reserve
* @param oldState The old siloed borrowing state
* @param newState The new siloed borrowing state
*/
event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);
/**
* @dev Emitted when the bridge protocol fee is updated.
* @param oldBridgeProtocolFee The old protocol fee, expressed in bps
* @param newBridgeProtocolFee The new protocol fee, expressed in bps
*/
event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);
/**
* @dev Emitted when the total premium on flashloans is updated.
* @param oldFlashloanPremiumTotal The old premium, expressed in bps
* @param newFlashloanPremiumTotal The new premium, expressed in bps
*/
event FlashloanPremiumTotalUpdated(
uint128 oldFlashloanPremiumTotal,
uint128 newFlashloanPremiumTotal
);
/**
* @dev Emitted when the part of the premium that goes to protocol is updated.
* @param oldFlashloanPremiumToProtocol The old premium, expressed in bps
* @param newFlashloanPremiumToProtocol The new premium, expressed in bps
*/
event FlashloanPremiumToProtocolUpdated(
uint128 oldFlashloanPremiumToProtocol,
uint128 newFlashloanPremiumToProtocol
);
/**
* @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.
* @param asset The address of the underlying asset of the reserve
* @param borrowable True if the reserve is borrowable in isolation, false otherwise
*/
event BorrowableInIsolationChanged(address asset, bool borrowable);
/**
* @notice Initializes multiple reserves.
* @param input The array of initialization parameters
*/
function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;
/**
* @dev Updates the aToken implementation for the reserve.
* @param input The aToken update parameters
*/
function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;
/**
* @notice Updates the stable debt token implementation for the reserve.
* @param input The stableDebtToken update parameters
*/
function updateStableDebtToken(
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) external;
/**
* @notice Updates the variable debt token implementation for the asset.
* @param input The variableDebtToken update parameters
*/
function updateVariableDebtToken(
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) external;
/**
* @notice Configures borrowing on a reserve.
* @dev Can only be disabled (set to false) if stable borrowing is disabled
* @param asset The address of the underlying asset of the reserve
* @param enabled True if borrowing needs to be enabled, false otherwise
*/
function setReserveBorrowing(address asset, bool enabled) external;
/**
* @notice Configures the reserve collateralization parameters.
* @dev All the values are expressed in bps. A value of 10000, results in 100.00%
* @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus
* @param asset The address of the underlying asset of the reserve
* @param ltv The loan to value of the asset when used as collateral
* @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized
* @param liquidationBonus The bonus liquidators receive to liquidate this asset
*/
function configureReserveAsCollateral(
address asset,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus
) external;
/**
* @notice Enable or disable stable rate borrowing on a reserve.
* @dev Can only be enabled (set to true) if borrowing is enabled
* @param asset The address of the underlying asset of the reserve
* @param enabled True if stable rate borrowing needs to be enabled, false otherwise
*/
function setReserveStableRateBorrowing(address asset, bool enabled) external;
/**
* @notice Enable or disable flashloans on a reserve
* @param asset The address of the underlying asset of the reserve
* @param enabled True if flashloans need to be enabled, false otherwise
*/
function setReserveFlashLoaning(address asset, bool enabled) external;
/**
* @notice Activate or deactivate a reserve
* @param asset The address of the underlying asset of the reserve
* @param active True if the reserve needs to be active, false otherwise
*/
function setReserveActive(address asset, bool active) external;
/**
* @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow
* or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.
* @param asset The address of the underlying asset of the reserve
* @param freeze True if the reserve needs to be frozen, false otherwise
*/
function setReserveFreeze(address asset, bool freeze) external;
/**
* @notice Sets the borrowable in isolation flag for the reserve.
* @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the
* borrowed amount will be accumulated in the isolated collateral's total debt exposure
* @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep
* consistency in the debt ceiling calculations
* @param asset The address of the underlying asset of the reserve
* @param borrowable True if the asset should be borrowable in isolation, false otherwise
*/
function setBorrowableInIsolation(address asset, bool borrowable) external;
/**
* @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,
* swap interest rate, liquidate, atoken transfers).
* @param asset The address of the underlying asset of the reserve
* @param paused True if pausing the reserve, false if unpausing
*/
function setReservePause(address asset, bool paused) external;
/**
* @notice Updates the reserve factor of a reserve.
* @param asset The address of the underlying asset of the reserve
* @param newReserveFactor The new reserve factor of the reserve
*/
function setReserveFactor(address asset, uint256 newReserveFactor) external;
/**
* @notice Sets the interest rate strategy of a reserve.
* @param asset The address of the underlying asset of the reserve
* @param newRateStrategyAddress The address of the new interest strategy contract
*/
function setReserveInterestRateStrategyAddress(
address asset,
address newRateStrategyAddress
) external;
/**
* @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions
* are suspended.
* @param paused True if protocol needs to be paused, false otherwise
*/
function setPoolPause(bool paused) external;
/**
* @notice Updates the borrow cap of a reserve.
* @param asset The address of the underlying asset of the reserve
* @param newBorrowCap The new borrow cap of the reserve
*/
function setBorrowCap(address asset, uint256 newBorrowCap) external;
/**
* @notice Updates the supply cap of a reserve.
* @param asset The address of the underlying asset of the reserve
* @param newSupplyCap The new supply cap of the reserve
*/
function setSupplyCap(address asset, uint256 newSupplyCap) external;
/**
* @notice Updates the liquidation protocol fee of reserve.
* @param asset The address of the underlying asset of the reserve
* @param newFee The new liquidation protocol fee of the reserve, expressed in bps
*/
function setLiquidationProtocolFee(address asset, uint256 newFee) external;
/**
* @notice Updates the unbacked mint cap of reserve.
* @param asset The address of the underlying asset of the reserve
* @param newUnbackedMintCap The new unbacked mint cap of the reserve
*/
function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;
/**
* @notice Assign an efficiency mode (eMode) category to asset.
* @param asset The address of the underlying asset of the reserve
* @param newCategoryId The new category id of the asset
*/
function setAssetEModeCategory(address asset, uint8 newCategoryId) external;
/**
* @notice Adds a new efficiency mode (eMode) category.
* @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and
* overcollateralization of the users using this category.
* @dev The new ltv and liquidation threshold must be greater than the base
* ltvs and liquidation thresholds of all assets within the eMode category
* @param categoryId The id of the category to be configured
* @param ltv The ltv associated with the category
* @param liquidationThreshold The liquidation threshold associated with the category
* @param liquidationBonus The liquidation bonus associated with the category
* @param oracle The oracle associated with the category
* @param label A label identifying the category
*/
function setEModeCategory(
uint8 categoryId,
uint16 ltv,
uint16 liquidationThreshold,
uint16 liquidationBonus,
address oracle,
string calldata label
) external;
/**
* @notice Drops a reserve entirely.
* @param asset The address of the reserve to drop
*/
function dropReserve(address asset) external;
/**
* @notice Updates the bridge fee collected by the protocol reserves.
* @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps
*/
function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;
/**
* @notice Updates the total flash loan premium.
* Total flash loan premium consists of two parts:
* - A part is sent to aToken holders as extra balance
* - A part is collected by the protocol reserves
* @dev Expressed in bps
* @dev The premium is calculated on the total amount borrowed
* @param newFlashloanPremiumTotal The total flashloan premium
*/
function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;
/**
* @notice Updates the flash loan premium collected by protocol reserves
* @dev Expressed in bps
* @dev The premium to protocol is calculated on the total flashloan premium
* @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury
*/
function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;
/**
* @notice Sets the debt ceiling for an asset.
* @param newDebtCeiling The new debt ceiling
*/
function setDebtCeiling(address asset, uint256 newDebtCeiling) external;
/**
* @notice Sets siloed borrowing for an asset
* @param siloed The new siloed borrowing state
*/
function setSiloedBorrowing(address asset, bool siloed) external;
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
/**
* @title IPoolDataProvider
* @author Aave
* @notice Defines the basic interface of a PoolDataProvider
*/
interface IPoolDataProvider {
struct TokenData {
string symbol;
address tokenAddress;
}
/**
* @notice Returns the address for the PoolAddressesProvider contract.
* @return The address for the PoolAddressesProvider contract
*/
function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
/**
* @notice Returns the list of the existing reserves in the pool.
* @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.
* @return The list of reserves, pairs of symbols and addresses
*/
function getAllReservesTokens() external view returns (TokenData[] memory);
/**
* @notice Returns the list of the existing ATokens in the pool.
* @return The list of ATokens, pairs of symbols and addresses
*/
function getAllATokens() external view returns (TokenData[] memory);
/**
* @notice Returns the configuration data of the reserve
* @dev Not returning borrow and supply caps for compatibility, nor pause flag
* @param asset The address of the underlying asset of the reserve
* @return decimals The number of decimals of the reserve
* @return ltv The ltv of the reserve
* @return liquidationThreshold The liquidationThreshold of the reserve
* @return liquidationBonus The liquidationBonus of the reserve
* @return reserveFactor The reserveFactor of the reserve
* @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise
* @return borrowingEnabled True if borrowing is enabled, false otherwise
* @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise
* @return isActive True if it is active, false otherwise
* @return isFrozen True if it is frozen, false otherwise
*/
function getReserveConfigurationData(
address asset
)
external
view
returns (
uint256 decimals,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus,
uint256 reserveFactor,
bool usageAsCollateralEnabled,
bool borrowingEnabled,
bool stableBorrowRateEnabled,
bool isActive,
bool isFrozen
);
/**
* @notice Returns the efficiency mode category of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The eMode id of the reserve
*/
function getReserveEModeCategory(address asset) external view returns (uint256);
/**
* @notice Returns the caps parameters of the reserve
* @param asset The address of the underlying asset of the reserve
* @return borrowCap The borrow cap of the reserve
* @return supplyCap The supply cap of the reserve
*/
function getReserveCaps(
address asset
) external view returns (uint256 borrowCap, uint256 supplyCap);
/**
* @notice Returns if the pool is paused
* @param asset The address of the underlying asset of the reserve
* @return isPaused True if the pool is paused, false otherwise
*/
function getPaused(address asset) external view returns (bool isPaused);
/**
* @notice Returns the siloed borrowing flag
* @param asset The address of the underlying asset of the reserve
* @return True if the asset is siloed for borrowing
*/
function getSiloedBorrowing(address asset) external view returns (bool);
/**
* @notice Returns the protocol fee on the liquidation bonus
* @param asset The address of the underlying asset of the reserve
* @return The protocol fee on liquidation
*/
function getLiquidationProtocolFee(address asset) external view returns (uint256);
/**
* @notice Returns the unbacked mint cap of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The unbacked mint cap of the reserve
*/
function getUnbackedMintCap(address asset) external view returns (uint256);
/**
* @notice Returns the debt ceiling of the reserve
* @param asset The address of the underlying asset of the reserve
* @return The debt ceiling of the reserve
*/
function getDebtCeiling(address asset) external view returns (uint256);
/**
* @notice Returns the debt ceiling decimals
* @return The debt ceiling decimals
*/
function getDebtCeilingDecimals() external pure returns (uint256);
/**
* @notice Returns the reserve data
* @param asset The address of the underlying asset of the reserve
* @return unbacked The amount of unbacked tokens
* @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted
* @return totalAToken The total supply of the aToken
* @return totalStableDebt The total stable debt of the reserve
* @return totalVariableDebt The total variable debt of the reserve
* @return liquidityRate The liquidity rate of the reserve
* @return variableBorrowRate The variable borrow rate of the reserve
* @return stableBorrowRate The stable borrow rate of the reserve
* @return averageStableBorrowRate The average stable borrow rate of the reserve
* @return liquidityIndex The liquidity index of the reserve
* @return variableBorrowIndex The variable borrow index of the reserve
* @return lastUpdateTimestamp The timestamp of the last update of the reserve
*/
function getReserveData(
address asset
)
external
view
returns (
uint256 unbacked,
uint256 accruedToTreasuryScaled,
uint256 totalAToken,
uint256 totalStableDebt,
uint256 totalVariableDebt,
uint256 liquidityRate,
uint256 variableBorrowRate,
uint256 stableBorrowRate,
uint256 averageStableBorrowRate,
uint256 liquidityIndex,
uint256 variableBorrowIndex,
uint40 lastUpdateTimestamp
);
/**
* @notice Returns the total supply of aTokens for a given asset
* @param asset The address of the underlying asset of the reserve
* @return The total supply of the aToken
*/
function getATokenTotalSupply(address asset) external view returns (uint256);
/**
* @notice Returns the total debt for a given asset
* @param asset The address of the underlying asset of the reserve
* @return The total debt for asset
*/
function getTotalDebt(address asset) external view returns (uint256);
/**
* @notice Returns the user data in a reserve
* @param asset The address of the underlying asset of the reserve
* @param user The address of the user
* @return currentATokenBalance The current AToken balance of the user
* @return currentStableDebt The current stable debt of the user
* @return currentVariableDebt The current variable debt of the user
* @return principalStableDebt The principal stable debt of the user
* @return scaledVariableDebt The scaled variable debt of the user
* @return stableBorrowRate The stable borrow rate of the user
* @return liquidityRate The liquidity rate of the reserve
* @return stableRateLastUpdated The timestamp of the last update of the user stable rate
* @return usageAsCollateralEnabled True if the user is using the asset as collateral, false
* otherwise
*/
function getUserReserveData(
address asset,
address user
)
external
view
returns (
uint256 currentATokenBalance,
uint256 currentStableDebt,
uint256 currentVariableDebt,
uint256 principalStableDebt,
uint256 scaledVariableDebt,
uint256 stableBorrowRate,
uint256 liquidityRate,
uint40 stableRateLastUpdated,
bool usageAsCollateralEnabled
);
/**
* @notice Returns the token addresses of the reserve
* @param asset The address of the underlying asset of the reserve
* @return aTokenAddress The AToken address of the reserve
* @return stableDebtTokenAddress The StableDebtToken address of the reserve
* @return variableDebtTokenAddress The VariableDebtToken address of the reserve
*/
function getReserveTokensAddresses(
address asset
)
external
view
returns (
address aTokenAddress,
address stableDebtTokenAddress,
address variableDebtTokenAddress
);
/**
* @notice Returns the address of the Interest Rate strategy
* @param asset The address of the underlying asset of the reserve
* @return irStrategyAddress The address of the Interest Rate strategy
*/
function getInterestRateStrategyAddress(
address asset
) external view returns (address irStrategyAddress);
/**
* @notice Returns whether the reserve has FlashLoans enabled or disabled
* @param asset The address of the underlying asset of the reserve
* @return True if FlashLoans are enabled, false otherwise
*/
function getFlashLoanEnabled(address asset) external view returns (bool);
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
import {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';
/**
* @title BaseImmutableAdminUpgradeabilityProxy
* @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern
* @notice This contract combines an upgradeability proxy with an authorization
* mechanism for administrative tasks.
* @dev The admin role is stored in an immutable, which helps saving transactions costs
* All external functions in this contract must be guarded by the
* `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity
* feature proposal that would enable this to be done automatically.
*/
contract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {
address internal immutable _admin;
/**
* @dev Constructor.
* @param admin The address of the admin
*/
constructor(address admin) {
_admin = admin;
}
modifier ifAdmin() {
if (msg.sender == _admin) {
_;
} else {
_fallback();
}
}
/**
* @notice Return the admin address
* @return The address of the proxy admin.
*/
function admin() external ifAdmin returns (address) {
return _admin;
}
/**
* @notice Return the implementation address
* @return The address of the implementation.
*/
function implementation() external ifAdmin returns (address) {
return _implementation();
}
/**
* @notice Upgrade the backing implementation of the proxy.
* @dev Only the admin can call this function.
* @param newImplementation The address of the new implementation.
*/
function upgradeTo(address newImplementation) external ifAdmin {
_upgradeTo(newImplementation);
}
/**
* @notice Upgrade the backing implementation of the proxy and call a function
* on the new implementation.
* @dev This is useful to initialize the proxied contract.
* @param newImplementation The address of the new implementation.
* @param data Data to send as msg.data in the low level call.
* It should include the signature and the parameters of the function to be called, as described in
* https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
*/
function upgradeToAndCall(
address newImplementation,
bytes calldata data
) external payable ifAdmin {
_upgradeTo(newImplementation);
(bool success, ) = newImplementation.delegatecall(data);
require(success);
}
/**
* @notice Only fall back when the sender is not the admin.
*/
function _willFallback() internal virtual override {
require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');
super._willFallback();
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
import {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';
import {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';
import {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';
/**
* @title InitializableAdminUpgradeabilityProxy
* @author Aave
* @dev Extends BaseAdminUpgradeabilityProxy with an initializer function
*/
contract InitializableImmutableAdminUpgradeabilityProxy is
BaseImmutableAdminUpgradeabilityProxy,
InitializableUpgradeabilityProxy
{
/**
* @dev Constructor.
* @param admin The address of the admin
*/
constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {
// Intentionally left blank
}
/// @inheritdoc BaseImmutableAdminUpgradeabilityProxy
function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {
BaseImmutableAdminUpgradeabilityProxy._willFallback();
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.12;
/**
* @title VersionedInitializable
* @author Aave, inspired by the OpenZeppelin Initializable contract
* @notice Helper contract to implement initializer functions. To use it, replace
* the constructor with a function that has the `initializer` modifier.
* @dev WARNING: Unlike constructors, initializer functions must be manually
* invoked. This applies both to deploying an Initializable contract, as well
* as extending an Initializable contract via inheritance.
* WARNING: When used with inheritance, manual care must be taken to not invoke
* a parent initializer twice, or ensure that all initializers are idempotent,
* because this is not dealt with automatically as with constructors.
*/
abstract contract VersionedInitializable {
/**
* @dev Indicates that the contract has been initialized.
*/
uint256 private lastInitializedRevision = 0;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private initializing;
/**
* @dev Modifier to use in the initializer function of a contract.
*/
modifier initializer() {
uint256 revision = getRevision();
require(
initializing || isConstructor() || revision > lastInitializedRevision,
'Contract instance has already been initialized'
);
bool isTopLevelCall = !initializing;
if (isTopLevelCall) {
initializing = true;
lastInitializedRevision = revision;
}
_;
if (isTopLevelCall) {
initializing = false;
}
}
/**
* @notice Returns the revision number of the contract
* @dev Needs to be defined in the inherited class as a constant.
* @return The revision number
*/
function getRevision() internal pure virtual returns (uint256);
/**
* @notice Returns true if and only if the function is running in the constructor
* @return True if the function is running in the constructor
*/
function isConstructor() private view returns (bool) {
// extcodesize checks the size of the code stored in an address, and
// address returns the current address. Since the code is still not
// deployed when running a constructor, any checks on its code size will
// yield zero, making it an effective way to detect if a contract is
// under construction or not.
uint256 cs;
//solium-disable-next-line
assembly {
cs := extcodesize(address())
}
return cs == 0;
}
// Reserved storage space to allow for layout changes in the future.
uint256[50] private ______gap;
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
import {Errors} from '../helpers/Errors.sol';
import {DataTypes} from '../types/DataTypes.sol';
/**
* @title ReserveConfiguration library
* @author Aave
* @notice Implements the bitmap logic to handle the reserve configuration
*/
library ReserveConfiguration {
uint256 internal constant LTV_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore
uint256 internal constant LIQUIDATION_THRESHOLD_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore
uint256 internal constant LIQUIDATION_BONUS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore
uint256 internal constant DECIMALS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore
uint256 internal constant ACTIVE_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant FROZEN_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant STABLE_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant PAUSED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant BORROWABLE_IN_ISOLATION_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant SILOED_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant FLASHLOAN_ENABLED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant RESERVE_FACTOR_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant BORROW_CAP_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant SUPPLY_CAP_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK = 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant EMODE_CATEGORY_MASK = 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant UNBACKED_MINT_CAP_MASK = 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore
uint256 internal constant DEBT_CEILING_MASK = 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore
/// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed
uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;
uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;
uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;
uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;
uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;
uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;
uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;
uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;
uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;
uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;
uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;
uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;
uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;
uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;
uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;
uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;
uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;
uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;
uint256 internal constant MAX_VALID_LTV = 65535;
uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;
uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;
uint256 internal constant MAX_VALID_DECIMALS = 255;
uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;
uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;
uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;
uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;
uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;
uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;
uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;
uint256 public constant DEBT_CEILING_DECIMALS = 2;
uint16 public constant MAX_RESERVES_COUNT = 128;
/**
* @notice Sets the Loan to Value of the reserve
* @param self The reserve configuration
* @param ltv The new ltv
*/
function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {
require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);
self.data = (self.data & LTV_MASK) | ltv;
}
/**
* @notice Gets the Loan to Value of the reserve
* @param self The reserve configuration
* @return The loan to value
*/
function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {
return self.data & ~LTV_MASK;
}
/**
* @notice Sets the liquidation threshold of the reserve
* @param self The reserve configuration
* @param threshold The new liquidation threshold
*/
function setLiquidationThreshold(
DataTypes.ReserveConfigurationMap memory self,
uint256 threshold
) internal pure {
require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);
self.data =
(self.data & LIQUIDATION_THRESHOLD_MASK) |
(threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);
}
/**
* @notice Gets the liquidation threshold of the reserve
* @param self The reserve configuration
* @return The liquidation threshold
*/
function getLiquidationThreshold(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;
}
/**
* @notice Sets the liquidation bonus of the reserve
* @param self The reserve configuration
* @param bonus The new liquidation bonus
*/
function setLiquidationBonus(
DataTypes.ReserveConfigurationMap memory self,
uint256 bonus
) internal pure {
require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);
self.data =
(self.data & LIQUIDATION_BONUS_MASK) |
(bonus << LIQUIDATION_BONUS_START_BIT_POSITION);
}
/**
* @notice Gets the liquidation bonus of the reserve
* @param self The reserve configuration
* @return The liquidation bonus
*/
function getLiquidationBonus(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;
}
/**
* @notice Sets the decimals of the underlying asset of the reserve
* @param self The reserve configuration
* @param decimals The decimals
*/
function setDecimals(
DataTypes.ReserveConfigurationMap memory self,
uint256 decimals
) internal pure {
require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);
self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);
}
/**
* @notice Gets the decimals of the underlying asset of the reserve
* @param self The reserve configuration
* @return The decimals of the asset
*/
function getDecimals(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;
}
/**
* @notice Sets the active state of the reserve
* @param self The reserve configuration
* @param active The active state
*/
function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {
self.data =
(self.data & ACTIVE_MASK) |
(uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);
}
/**
* @notice Gets the active state of the reserve
* @param self The reserve configuration
* @return The active state
*/
function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {
return (self.data & ~ACTIVE_MASK) != 0;
}
/**
* @notice Sets the frozen state of the reserve
* @param self The reserve configuration
* @param frozen The frozen state
*/
function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {
self.data =
(self.data & FROZEN_MASK) |
(uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);
}
/**
* @notice Gets the frozen state of the reserve
* @param self The reserve configuration
* @return The frozen state
*/
function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {
return (self.data & ~FROZEN_MASK) != 0;
}
/**
* @notice Sets the paused state of the reserve
* @param self The reserve configuration
* @param paused The paused state
*/
function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {
self.data =
(self.data & PAUSED_MASK) |
(uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);
}
/**
* @notice Gets the paused state of the reserve
* @param self The reserve configuration
* @return The paused state
*/
function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {
return (self.data & ~PAUSED_MASK) != 0;
}
/**
* @notice Sets the borrowable in isolation flag for the reserve.
* @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed
* amount will be accumulated in the isolated collateral's total debt exposure.
* @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep
* consistency in the debt ceiling calculations.
* @param self The reserve configuration
* @param borrowable True if the asset is borrowable
*/
function setBorrowableInIsolation(
DataTypes.ReserveConfigurationMap memory self,
bool borrowable
) internal pure {
self.data =
(self.data & BORROWABLE_IN_ISOLATION_MASK) |
(uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);
}
/**
* @notice Gets the borrowable in isolation flag for the reserve.
* @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with
* isolated collateral is accounted for in the isolated collateral's total debt exposure.
* @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep
* consistency in the debt ceiling calculations.
* @param self The reserve configuration
* @return The borrowable in isolation flag
*/
function getBorrowableInIsolation(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool) {
return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;
}
/**
* @notice Sets the siloed borrowing flag for the reserve.
* @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.
* @param self The reserve configuration
* @param siloed True if the asset is siloed
*/
function setSiloedBorrowing(
DataTypes.ReserveConfigurationMap memory self,
bool siloed
) internal pure {
self.data =
(self.data & SILOED_BORROWING_MASK) |
(uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);
}
/**
* @notice Gets the siloed borrowing flag for the reserve.
* @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.
* @param self The reserve configuration
* @return The siloed borrowing flag
*/
function getSiloedBorrowing(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool) {
return (self.data & ~SILOED_BORROWING_MASK) != 0;
}
/**
* @notice Enables or disables borrowing on the reserve
* @param self The reserve configuration
* @param enabled True if the borrowing needs to be enabled, false otherwise
*/
function setBorrowingEnabled(
DataTypes.ReserveConfigurationMap memory self,
bool enabled
) internal pure {
self.data =
(self.data & BORROWING_MASK) |
(uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);
}
/**
* @notice Gets the borrowing state of the reserve
* @param self The reserve configuration
* @return The borrowing state
*/
function getBorrowingEnabled(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool) {
return (self.data & ~BORROWING_MASK) != 0;
}
/**
* @notice Enables or disables stable rate borrowing on the reserve
* @param self The reserve configuration
* @param enabled True if the stable rate borrowing needs to be enabled, false otherwise
*/
function setStableRateBorrowingEnabled(
DataTypes.ReserveConfigurationMap memory self,
bool enabled
) internal pure {
self.data =
(self.data & STABLE_BORROWING_MASK) |
(uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);
}
/**
* @notice Gets the stable rate borrowing state of the reserve
* @param self The reserve configuration
* @return The stable rate borrowing state
*/
function getStableRateBorrowingEnabled(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool) {
return (self.data & ~STABLE_BORROWING_MASK) != 0;
}
/**
* @notice Sets the reserve factor of the reserve
* @param self The reserve configuration
* @param reserveFactor The reserve factor
*/
function setReserveFactor(
DataTypes.ReserveConfigurationMap memory self,
uint256 reserveFactor
) internal pure {
require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);
self.data =
(self.data & RESERVE_FACTOR_MASK) |
(reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);
}
/**
* @notice Gets the reserve factor of the reserve
* @param self The reserve configuration
* @return The reserve factor
*/
function getReserveFactor(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;
}
/**
* @notice Sets the borrow cap of the reserve
* @param self The reserve configuration
* @param borrowCap The borrow cap
*/
function setBorrowCap(
DataTypes.ReserveConfigurationMap memory self,
uint256 borrowCap
) internal pure {
require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);
self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);
}
/**
* @notice Gets the borrow cap of the reserve
* @param self The reserve configuration
* @return The borrow cap
*/
function getBorrowCap(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;
}
/**
* @notice Sets the supply cap of the reserve
* @param self The reserve configuration
* @param supplyCap The supply cap
*/
function setSupplyCap(
DataTypes.ReserveConfigurationMap memory self,
uint256 supplyCap
) internal pure {
require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);
self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);
}
/**
* @notice Gets the supply cap of the reserve
* @param self The reserve configuration
* @return The supply cap
*/
function getSupplyCap(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;
}
/**
* @notice Sets the debt ceiling in isolation mode for the asset
* @param self The reserve configuration
* @param ceiling The maximum debt ceiling for the asset
*/
function setDebtCeiling(
DataTypes.ReserveConfigurationMap memory self,
uint256 ceiling
) internal pure {
require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);
self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);
}
/**
* @notice Gets the debt ceiling for the asset if the asset is in isolation mode
* @param self The reserve configuration
* @return The debt ceiling (0 = isolation mode disabled)
*/
function getDebtCeiling(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;
}
/**
* @notice Sets the liquidation protocol fee of the reserve
* @param self The reserve configuration
* @param liquidationProtocolFee The liquidation protocol fee
*/
function setLiquidationProtocolFee(
DataTypes.ReserveConfigurationMap memory self,
uint256 liquidationProtocolFee
) internal pure {
require(
liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,
Errors.INVALID_LIQUIDATION_PROTOCOL_FEE
);
self.data =
(self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |
(liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);
}
/**
* @dev Gets the liquidation protocol fee
* @param self The reserve configuration
* @return The liquidation protocol fee
*/
function getLiquidationProtocolFee(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return
(self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;
}
/**
* @notice Sets the unbacked mint cap of the reserve
* @param self The reserve configuration
* @param unbackedMintCap The unbacked mint cap
*/
function setUnbackedMintCap(
DataTypes.ReserveConfigurationMap memory self,
uint256 unbackedMintCap
) internal pure {
require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);
self.data =
(self.data & UNBACKED_MINT_CAP_MASK) |
(unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);
}
/**
* @dev Gets the unbacked mint cap of the reserve
* @param self The reserve configuration
* @return The unbacked mint cap
*/
function getUnbackedMintCap(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;
}
/**
* @notice Sets the eMode asset category
* @param self The reserve configuration
* @param category The asset category when the user selects the eMode
*/
function setEModeCategory(
DataTypes.ReserveConfigurationMap memory self,
uint256 category
) internal pure {
require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);
self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);
}
/**
* @dev Gets the eMode asset category
* @param self The reserve configuration
* @return The eMode category for the asset
*/
function getEModeCategory(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256) {
return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;
}
/**
* @notice Sets the flashloanable flag for the reserve
* @param self The reserve configuration
* @param flashLoanEnabled True if the asset is flashloanable, false otherwise
*/
function setFlashLoanEnabled(
DataTypes.ReserveConfigurationMap memory self,
bool flashLoanEnabled
) internal pure {
self.data =
(self.data & FLASHLOAN_ENABLED_MASK) |
(uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);
}
/**
* @notice Gets the flashloanable flag for the reserve
* @param self The reserve configuration
* @return The flashloanable flag
*/
function getFlashLoanEnabled(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool) {
return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;
}
/**
* @notice Gets the configuration flags of the reserve
* @param self The reserve configuration
* @return The state flag representing active
* @return The state flag representing frozen
* @return The state flag representing borrowing enabled
* @return The state flag representing stableRateBorrowing enabled
* @return The state flag representing paused
*/
function getFlags(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (bool, bool, bool, bool, bool) {
uint256 dataLocal = self.data;
return (
(dataLocal & ~ACTIVE_MASK) != 0,
(dataLocal & ~FROZEN_MASK) != 0,
(dataLocal & ~BORROWING_MASK) != 0,
(dataLocal & ~STABLE_BORROWING_MASK) != 0,
(dataLocal & ~PAUSED_MASK) != 0
);
}
/**
* @notice Gets the configuration parameters of the reserve from storage
* @param self The reserve configuration
* @return The state param representing ltv
* @return The state param representing liquidation threshold
* @return The state param representing liquidation bonus
* @return The state param representing reserve decimals
* @return The state param representing reserve factor
* @return The state param representing eMode category
*/
function getParams(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {
uint256 dataLocal = self.data;
return (
dataLocal & ~LTV_MASK,
(dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,
(dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,
(dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,
(dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,
(dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION
);
}
/**
* @notice Gets the caps parameters of the reserve from storage
* @param self The reserve configuration
* @return The state param representing borrow cap
* @return The state param representing supply cap.
*/
function getCaps(
DataTypes.ReserveConfigurationMap memory self
) internal pure returns (uint256, uint256) {
uint256 dataLocal = self.data;
return (
(dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,
(dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION
);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
/**
* @title Errors library
* @author Aave
* @notice Defines the error messages emitted by the different contracts of the Aave protocol
*/
library Errors {
string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'
string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'
string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'
string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'
string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'
string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'
string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'
string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'
string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'
string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'
string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'
string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'
string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'
string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'
string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'
string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'
string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'
string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'
string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'
string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'
string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'
string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'
string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'
string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'
string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'
string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'
string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'
string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'
string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'
string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'
string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'
string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'
string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'
string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'
string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'
string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'
string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'
string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'
string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'
string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'
string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'
string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'
string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'
string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'
string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'
string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'
string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'
string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'
string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'
string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'
string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'
string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'
string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'
string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'
string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'
string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'
string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'
string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'
string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'
string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'
string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'
string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'
string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'
string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'
string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'
string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'
string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'
string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'
string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'
string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'
string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'
string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve
string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'
string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'
string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'
string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'
string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'
string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'
string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'
string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'
string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'
string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'
string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'
string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'
string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'
string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'
string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'
string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'
string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0
string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.12;
import {IPool} from '../../../interfaces/IPool.sol';
import {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';
import {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';
import {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';
import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
import {DataTypes} from '../types/DataTypes.sol';
import {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';
/**
* @title ConfiguratorLogic library
* @author Aave
* @notice Implements the functions to initialize reserves and update aTokens and debtTokens
*/
library ConfiguratorLogic {
using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
// See `IPoolConfigurator` for descriptions
event ReserveInitialized(
address indexed asset,
address indexed aToken,
address stableDebtToken,
address variableDebtToken,
address interestRateStrategyAddress
);
event ATokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
event StableDebtTokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
event VariableDebtTokenUpgraded(
address indexed asset,
address indexed proxy,
address indexed implementation
);
/**
* @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token
* @dev Emits the `ReserveInitialized` event
* @param pool The Pool in which the reserve will be initialized
* @param input The needed parameters for the initialization
*/
function executeInitReserve(
IPool pool,
ConfiguratorInputTypes.InitReserveInput calldata input
) public {
address aTokenProxyAddress = _initTokenWithProxy(
input.aTokenImpl,
abi.encodeWithSelector(
IInitializableAToken.initialize.selector,
pool,
input.treasury,
input.underlyingAsset,
input.incentivesController,
input.underlyingAssetDecimals,
input.aTokenName,
input.aTokenSymbol,
input.params
)
);
address stableDebtTokenProxyAddress = _initTokenWithProxy(
input.stableDebtTokenImpl,
abi.encodeWithSelector(
IInitializableDebtToken.initialize.selector,
pool,
input.underlyingAsset,
input.incentivesController,
input.underlyingAssetDecimals,
input.stableDebtTokenName,
input.stableDebtTokenSymbol,
input.params
)
);
address variableDebtTokenProxyAddress = _initTokenWithProxy(
input.variableDebtTokenImpl,
abi.encodeWithSelector(
IInitializableDebtToken.initialize.selector,
pool,
input.underlyingAsset,
input.incentivesController,
input.underlyingAssetDecimals,
input.variableDebtTokenName,
input.variableDebtTokenSymbol,
input.params
)
);
pool.initReserve(
input.underlyingAsset,
aTokenProxyAddress,
stableDebtTokenProxyAddress,
variableDebtTokenProxyAddress,
input.interestRateStrategyAddress
);
DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);
currentConfig.setDecimals(input.underlyingAssetDecimals);
currentConfig.setActive(true);
currentConfig.setPaused(false);
currentConfig.setFrozen(false);
pool.setConfiguration(input.underlyingAsset, currentConfig);
emit ReserveInitialized(
input.underlyingAsset,
aTokenProxyAddress,
stableDebtTokenProxyAddress,
variableDebtTokenProxyAddress,
input.interestRateStrategyAddress
);
}
/**
* @notice Updates the aToken implementation and initializes it
* @dev Emits the `ATokenUpgraded` event
* @param cachedPool The Pool containing the reserve with the aToken
* @param input The parameters needed for the initialize call
*/
function executeUpdateAToken(
IPool cachedPool,
ConfiguratorInputTypes.UpdateATokenInput calldata input
) public {
DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);
(, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();
bytes memory encodedCall = abi.encodeWithSelector(
IInitializableAToken.initialize.selector,
cachedPool,
input.treasury,
input.asset,
input.incentivesController,
decimals,
input.name,
input.symbol,
input.params
);
_upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);
emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);
}
/**
* @notice Updates the stable debt token implementation and initializes it
* @dev Emits the `StableDebtTokenUpgraded` event
* @param cachedPool The Pool containing the reserve with the stable debt token
* @param input The parameters needed for the initialize call
*/
function executeUpdateStableDebtToken(
IPool cachedPool,
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) public {
DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);
(, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();
bytes memory encodedCall = abi.encodeWithSelector(
IInitializableDebtToken.initialize.selector,
cachedPool,
input.asset,
input.incentivesController,
decimals,
input.name,
input.symbol,
input.params
);
_upgradeTokenImplementation(
reserveData.stableDebtTokenAddress,
input.implementation,
encodedCall
);
emit StableDebtTokenUpgraded(
input.asset,
reserveData.stableDebtTokenAddress,
input.implementation
);
}
/**
* @notice Updates the variable debt token implementation and initializes it
* @dev Emits the `VariableDebtTokenUpgraded` event
* @param cachedPool The Pool containing the reserve with the variable debt token
* @param input The parameters needed for the initialize call
*/
function executeUpdateVariableDebtToken(
IPool cachedPool,
ConfiguratorInputTypes.UpdateDebtTokenInput calldata input
) public {
DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);
(, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();
bytes memory encodedCall = abi.encodeWithSelector(
IInitializableDebtToken.initialize.selector,
cachedPool,
input.asset,
input.incentivesController,
decimals,
input.name,
input.symbol,
input.params
);
_upgradeTokenImplementation(
reserveData.variableDebtTokenAddress,
input.implementation,
encodedCall
);
emit VariableDebtTokenUpgraded(
input.asset,
reserveData.variableDebtTokenAddress,
input.implementation
);
}
/**
* @notice Creates a new proxy and initializes the implementation
* @param implementation The address of the implementation
* @param initParams The parameters that is passed to the implementation to initialize
* @return The address of initialized proxy
*/
function _initTokenWithProxy(
address implementation,
bytes memory initParams
) internal returns (address) {
InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(
address(this)
);
proxy.initialize(implementation, initParams);
return address(proxy);
}
/**
* @notice Upgrades the implementation and makes call to the proxy
* @dev The call is used to initialize the new implementation.
* @param proxyAddress The address of the proxy
* @param implementation The address of the new implementation
* @param initParams The parameters to the call after the upgrade
*/
function _upgradeTokenImplementation(
address proxyAddress,
address implementation,
bytes memory initParams
) internal {
InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(
payable(proxyAddress)
);
proxy.upgradeToAndCall(implementation, initParams);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
/**
* @title PercentageMath library
* @author Aave
* @notice Provides functions to perform percentage calculations
* @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR
* @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.
*/
library PercentageMath {
// Maximum percentage factor (100.00%)
uint256 internal constant PERCENTAGE_FACTOR = 1e4;
// Half percentage factor (50.00%)
uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;
/**
* @notice Executes a percentage multiplication
* @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328
* @param value The value of which the percentage needs to be calculated
* @param percentage The percentage of the value to be calculated
* @return result value percentmul percentage
*/
function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {
// to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage
assembly {
if iszero(
or(
iszero(percentage),
iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))
)
) {
revert(0, 0)
}
result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)
}
}
/**
* @notice Executes a percentage division
* @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328
* @param value The value of which the percentage needs to be calculated
* @param percentage The percentage of the value to be calculated
* @return result value percentdiv percentage
*/
function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {
// to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR
assembly {
if or(
iszero(percentage),
iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))
) {
revert(0, 0)
}
result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)
}
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library ConfiguratorInputTypes {
struct InitReserveInput {
address aTokenImpl;
address stableDebtTokenImpl;
address variableDebtTokenImpl;
uint8 underlyingAssetDecimals;
address interestRateStrategyAddress;
address underlyingAsset;
address treasury;
address incentivesController;
string aTokenName;
string aTokenSymbol;
string variableDebtTokenName;
string variableDebtTokenSymbol;
string stableDebtTokenName;
string stableDebtTokenSymbol;
bytes params;
}
struct UpdateATokenInput {
address asset;
address treasury;
address incentivesController;
string name;
string symbol;
address implementation;
bytes params;
}
struct UpdateDebtTokenInput {
address asset;
address incentivesController;
string name;
string symbol;
address implementation;
bytes params;
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library DataTypes {
struct ReserveData {
//stores the reserve configuration
ReserveConfigurationMap configuration;
//the liquidity index. Expressed in ray
uint128 liquidityIndex;
//the current supply rate. Expressed in ray
uint128 currentLiquidityRate;
//variable borrow index. Expressed in ray
uint128 variableBorrowIndex;
//the current variable borrow rate. Expressed in ray
uint128 currentVariableBorrowRate;
//the current stable borrow rate. Expressed in ray
uint128 currentStableBorrowRate;
//timestamp of last update
uint40 lastUpdateTimestamp;
//the id of the reserve. Represents the position in the list of the active reserves
uint16 id;
//aToken address
address aTokenAddress;
//stableDebtToken address
address stableDebtTokenAddress;
//variableDebtToken address
address variableDebtTokenAddress;
//address of the interest rate strategy
address interestRateStrategyAddress;
//the current treasury balance, scaled
uint128 accruedToTreasury;
//the outstanding unbacked aTokens minted through the bridging feature
uint128 unbacked;
//the outstanding debt borrowed against this asset in isolation mode
uint128 isolationModeTotalDebt;
}
struct ReserveConfigurationMap {
//bit 0-15: LTV
//bit 16-31: Liq. threshold
//bit 32-47: Liq. bonus
//bit 48-55: Decimals
//bit 56: reserve is active
//bit 57: reserve is frozen
//bit 58: borrowing is enabled
//bit 59: stable rate borrowing enabled
//bit 60: asset is paused
//bit 61: borrowing in isolation mode is enabled
//bit 62: siloed borrowing enabled
//bit 63: flashloaning enabled
//bit 64-79: reserve factor
//bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap
//bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap
//bit 152-167 liquidation protocol fee
//bit 168-175 eMode category
//bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled
//bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals
//bit 252-255 unused
uint256 data;
}
struct UserConfigurationMap {
/**
* @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.
* The first bit indicates if an asset is used as collateral by the user, the second whether an
* asset is borrowed by the user.
*/
uint256 data;
}
struct EModeCategory {
// each eMode category has a custom ltv and liquidation threshold
uint16 ltv;
uint16 liquidationThreshold;
uint16 liquidationBonus;
// each eMode category may or may not have a custom oracle to override the individual assets price oracles
address priceSource;
string label;
}
enum InterestRateMode {NONE, STABLE, VARIABLE}
struct ReserveCache {
uint256 currScaledVariableDebt;
uint256 nextScaledVariableDebt;
uint256 currPrincipalStableDebt;
uint256 currAvgStableBorrowRate;
uint256 currTotalStableDebt;
uint256 nextAvgStableBorrowRate;
uint256 nextTotalStableDebt;
uint256 currLiquidityIndex;
uint256 nextLiquidityIndex;
uint256 currVariableBorrowIndex;
uint256 nextVariableBorrowIndex;
uint256 currLiquidityRate;
uint256 currVariableBorrowRate;
uint256 reserveFactor;
ReserveConfigurationMap reserveConfiguration;
address aTokenAddress;
address stableDebtTokenAddress;
address variableDebtTokenAddress;
uint40 reserveLastUpdateTimestamp;
uint40 stableDebtLastUpdateTimestamp;
}
struct ExecuteLiquidationCallParams {
uint256 reservesCount;
uint256 debtToCover;
address collateralAsset;
address debtAsset;
address user;
bool receiveAToken;
address priceOracle;
uint8 userEModeCategory;
address priceOracleSentinel;
}
struct ExecuteSupplyParams {
address asset;
uint256 amount;
address onBehalfOf;
uint16 referralCode;
}
struct ExecuteBorrowParams {
address asset;
address user;
address onBehalfOf;
uint256 amount;
InterestRateMode interestRateMode;
uint16 referralCode;
bool releaseUnderlying;
uint256 maxStableRateBorrowSizePercent;
uint256 reservesCount;
address oracle;
uint8 userEModeCategory;
address priceOracleSentinel;
}
struct ExecuteRepayParams {
address asset;
uint256 amount;
InterestRateMode interestRateMode;
address onBehalfOf;
bool useATokens;
}
struct ExecuteWithdrawParams {
address asset;
uint256 amount;
address to;
uint256 reservesCount;
address oracle;
uint8 userEModeCategory;
}
struct ExecuteSetUserEModeParams {
uint256 reservesCount;
address oracle;
uint8 categoryId;
}
struct FinalizeTransferParams {
address asset;
address from;
address to;
uint256 amount;
uint256 balanceFromBefore;
uint256 balanceToBefore;
uint256 reservesCount;
address oracle;
uint8 fromEModeCategory;
}
struct FlashloanParams {
address receiverAddress;
address[] assets;
uint256[] amounts;
uint256[] interestRateModes;
address onBehalfOf;
bytes params;
uint16 referralCode;
uint256 flashLoanPremiumToProtocol;
uint256 flashLoanPremiumTotal;
uint256 maxStableRateBorrowSizePercent;
uint256 reservesCount;
address addressesProvider;
uint8 userEModeCategory;
bool isAuthorizedFlashBorrower;
}
struct FlashloanSimpleParams {
address receiverAddress;
address asset;
uint256 amount;
bytes params;
uint16 referralCode;
uint256 flashLoanPremiumToProtocol;
uint256 flashLoanPremiumTotal;
}
struct FlashLoanRepaymentParams {
uint256 amount;
uint256 totalPremium;
uint256 flashLoanPremiumToProtocol;
address asset;
address receiverAddress;
uint16 referralCode;
}
struct CalculateUserAccountDataParams {
UserConfigurationMap userConfig;
uint256 reservesCount;
address user;
address oracle;
uint8 userEModeCategory;
}
struct ValidateBorrowParams {
ReserveCache reserveCache;
UserConfigurationMap userConfig;
address asset;
address userAddress;
uint256 amount;
InterestRateMode interestRateMode;
uint256 maxStableLoanPercent;
uint256 reservesCount;
address oracle;
uint8 userEModeCategory;
address priceOracleSentinel;
bool isolationModeActive;
address isolationModeCollateralAddress;
uint256 isolationModeDebtCeiling;
}
struct ValidateLiquidationCallParams {
ReserveCache debtReserveCache;
uint256 totalDebt;
uint256 healthFactor;
address priceOracleSentinel;
}
struct CalculateInterestRatesParams {
uint256 unbacked;
uint256 liquidityAdded;
uint256 liquidityTaken;
uint256 totalStableDebt;
uint256 totalVariableDebt;
uint256 averageStableBorrowRate;
uint256 reserveFactor;
address reserve;
address aToken;
}
struct InitReserveParams {
address asset;
address aTokenAddress;
address stableDebtAddress;
address variableDebtAddress;
address interestRateStrategyAddress;
uint16 reservesCount;
uint16 maxNumberReserves;
}
}{
"compilerPath": "/Users/esmeevankant/Library/Caches/hardhat-nodejs/compilers-v2/zksolc/zksolc-v1.3.13",
"experimental": {},
"libraries": {
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol": {
"BorrowLogic": "0x81D6b98Beb0A4288dCFab724FDeaE52E5Aa2F7b1"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol": {
"BridgeLogic": "0x6CDe8a8cEE9771A30dE4fEAB8eaccb58cb0d30aF"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol": {
"ConfiguratorLogic": "0x8731d4E5b990025143609F4A40eC80Fb482E46A0"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol": {
"EModeLogic": "0xD84E953a621bb9D81Dc998E0b1482D2916153c23"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol": {
"FlashLoanLogic": "0x424C0995114a614c12506D9A994d3eE140742f12"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol": {
"LiquidationLogic": "0x8855Fd7d577A05d04Cea2E026c5BAa4Bb47feAf9"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol": {
"PoolLogic": "0xA8D16FB0620E3376093cb89e2cD9dEF9fE47Daaa"
},
"@zerolendxyz/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol": {
"SupplyLogic": "0x9223dC9205Cf8336CA59bA0bD390647E62D487E5"
}
},
"optimizer": {
"enabled": true,
"mode": "3"
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldBorrowCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"borrowable","type":"bool"}],"name":"BorrowableInIsolationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBridgeProtocolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"BridgeProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"CollateralConfigurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDebtCeiling","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"DebtCeilingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldCategoryId","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"EModeAssetCategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"categoryId","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"EModeCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumToProtocol","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"FlashloanPremiumToProtocolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumTotal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"FlashloanPremiumTotalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidationProtocolFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"ReserveActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"}],"name":"ReserveDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldReserveFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"ReserveFactorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveFlashLoaning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"ReserveFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldStrategy","type":"address"},{"indexed":false,"internalType":"address","name":"newStrategy","type":"address"}],"name":"ReserveInterestRateStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ReservePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveStableRateBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"oldState","type":"bool"},{"indexed":false,"internalType":"bool","name":"newState","type":"bool"}],"name":"SiloedBorrowingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldUnbackedMintCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"UnbackedMintCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"},{"inputs":[],"name":"CONFIGURATOR_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"configureReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aTokenImpl","type":"address"},{"internalType":"address","name":"stableDebtTokenImpl","type":"address"},{"internalType":"address","name":"variableDebtTokenImpl","type":"address"},{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"string","name":"variableDebtTokenName","type":"string"},{"internalType":"string","name":"variableDebtTokenSymbol","type":"string"},{"internalType":"string","name":"stableDebtTokenName","type":"string"},{"internalType":"string","name":"stableDebtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.InitReserveInput[]","name":"input","type":"tuple[]"}],"name":"initReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"setAssetEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"borrowable","type":"bool"}],"name":"setBorrowableInIsolation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"setDebtCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"},{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"string","name":"label","type":"string"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPoolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setReserveActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveFlashLoaning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"setReserveFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newRateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setReservePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveStableRateBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"newSiloed","type":"bool"}],"name":"setSiloedBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateATokenInput","name":"input","type":"tuple"}],"name":"updateAToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiumToProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"updateFlashloanPremiumTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateStableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateVariableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010017c119593babae6b9c6456f68c78fa54f7d9ff603a8adb28c0f51265f60000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x000400000000000200000000030100190000006003300270000017100430019700030000004103550002000000010355000017100030019d000100000000001f0000008001000039000000400010043f00000001012001900000002a0000c13d0000000001000031000000040110008c000001e60000413d0000000201000367000000000101043b000000e001100270000017120210009c000000330000a13d000017130210009c000000490000a13d000017140210009c000000710000213d0000171a0210009c000000b90000213d0000171d0210009c000001b60000613d0000171e0110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3920810000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d000000000000041b000000200100003900000100001004430000012000000443000017110100004100005c3a0001042e000017280210009c0000005d0000213d000017320210009c000000830000a13d000017330210009c000000c90000213d000017360210009c000001090000613d000017370110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c393d8e0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000171f0210009c000000950000a13d000017200210009c000000d90000213d000017230210009c000001150000613d000017240110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3923ee0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017290210009c000000a70000a13d0000172a0210009c000000e90000213d0000172d0210009c000001210000613d0000172e0110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3912dc0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017150210009c000000f90000213d000017180210009c000001c20000613d000017190110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c3937b80000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017380210009c0000012d0000613d000017390210009c000001390000613d0000173a0110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39022e0000040f5c394c7f0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017250210009c000001450000613d000017260210009c0000015f0000613d000017270110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3902470000040f5c39568c0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000172f0210009c0000016b0000613d000017300210009c000001770000613d000017310110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c393aa30000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000171b0210009c000001ce0000613d0000171c0110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3903040000040f5c3940850000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017340210009c000001830000613d000017350110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3926b60000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017210210009c0000019e0000613d000017220110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39028d0000040f5c3910460000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000172b0210009c000001aa0000613d0000172c0110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c3902af0000040f5c394f9f0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000017160210009c000001da0000613d000017170110009c000001e60000c13d0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c391db90000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902470000040f5c39595b0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c391acf0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902780000040f5c39095a0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3901e80000040f5c3904b20000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c3949940000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d000000040100008a00000000011000310000173b02000041000000000301004b000000000300001900000000030240190000173b01100197000000000401004b000000000200a0190000173b0110009c00000000010300190000000001026019000000000101004b000001e60000c13d000000400100043d000000040200003900000000002104350000171002000041000017100310009c000000000102801900000040011002100000173c011001c700005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902c70000040f5c3915db0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3929800000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c392c480000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d000000040100008a00000000011000310000173b02000041000000200310008c000000000300001900000000030240190000173b01100197000000000401004b000000000200a0190000173b0110009c00000000010300190000000001026019000000000101004b000001e60000c13d00000004010000390000000201100367000000000101043b5c3954400000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c39025c0000040f5c3933cb0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c39028d0000040f5c390db00000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902170000040f5c392f3f0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902780000040f5c39035f0000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3902e20000040f5c390b070000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e0000000001000416000000000101004b000001e60000c13d00000000010000315c3903460000040f5c3945b70000040f0000171001000041000000400200043d000017100320009c0000000001024019000000400110021000005c3a0001042e000000000100001900005c3b00010430000000040210008a0000173b030000410000001f0420008c000000000400001900000000040320190000173b02200197000000000502004b00000000030080190000173b0220009c00000000020400190000000002036019000000000202004b000002150000613d00000002020003670000000403200370000000000303043b0000173d0430009c000002150000213d00000023043000390000173b05000041000000000614004b000000000600001900000000060580190000173b071001970000173b04400197000000000874004b0000000005008019000000000474013f0000173b0440009c00000000040600190000000004056019000000000404004b000002150000c13d0000000404300039000000000242034f000000000202043b0000173d0420009c000002150000213d000000050420021000000024033000390000000004430019000000000114004b000002150000213d0000000001030019000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000003f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b0000022c0000613d00000002020003670000000401200370000000000101043b0000173e0310009c0000022c0000213d0000002402200370000000000202043b000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000003f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b000002450000613d00000002020003670000000401200370000000000101043b0000173e0310009c000002450000213d0000002402200370000000000202043b0000173e0320009c000002450000213d000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000001f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b0000025a0000613d00000004010000390000000201100367000000000101043b0000173f0210009c0000025a0000213d000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000003f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b000002760000613d00000002020003670000000401200370000000000101043b0000173e0310009c000002760000213d0000002402200370000000000202043b000000000302004b0000000003000019000000010300c039000000000332004b000002760000c13d000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000001f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b0000028b0000613d00000004010000390000000201100367000000000101043b0000173e0210009c0000028b0000213d000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000001f0310008c000000000300001900000000030220190000173b04100197000000000504004b00000000020080190000173b0440009c000000000203c019000000000202004b000002ad0000613d00000004020000390000000202200367000000000202043b0000173d0320009c000002ad0000213d00000000012100490000173b03000041000000c00410008c000000000400001900000000040340190000173b01100197000000000501004b000000000300a0190000173b0110009c00000000010400190000000001036019000000000101004b000002ad0000c13d0000000401200039000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000001f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b000002c50000613d00000004010000390000000201100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b000002c50000c13d000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000007f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b000002e00000613d00000002040003670000000401400370000000000101043b0000173e0210009c000002e00000213d0000002402400370000000000202043b0000004403400370000000000303043b0000006404400370000000000404043b000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000001f0310008c000000000300001900000000030220190000173b04100197000000000504004b00000000020080190000173b0440009c000000000203c019000000000202004b000003020000613d00000004020000390000000202200367000000000202043b0000173d0320009c000003020000213d00000000012100490000173b03000041000000e00410008c000000000400001900000000040340190000173b01100197000000000501004b000000000300a0190000173b0110009c00000000010400190000000001036019000000000101004b000003020000c13d0000000401200039000000000001042d000000000100001900005c3b00010430000000040210008a0000173b03000041000000bf0420008c000000000400001900000000040320190000173b02200197000000000502004b00000000030080190000173b0220009c00000000020400190000000002036019000000000202004b000003440000613d00000002060003670000000402600370000000000802043b000000ff0280008c000003440000213d0000002402600370000000000202043b0000ffff0320008c000003440000213d0000004403600370000000000303043b0000ffff0430008c000003440000213d0000006404600370000000000404043b0000ffff0540008c000003440000213d0000008405600370000000000505043b0000173e0750009c000003440000213d000000a407600370000000000907043b0000173d0790009c000003440000213d00000023079000390000173b0a000041000000000b17004b000000000b000019000000000b0a80190000173b0c1001970000173b07700197000000000dc7004b000000000a0080190000000007c7013f0000173b0770009c00000000070b001900000000070a6019000000000707004b000003440000c13d0000000407900039000000000676034f000000000706043b0000173d0670009c000003440000213d00000024069000390000000009760019000000000119004b000003440000213d0000000001080019000000000001042d000000000100001900005c3b00010430000000040110008a0000173b020000410000003f0310008c000000000300001900000000030220190000173b01100197000000000401004b00000000020080190000173b0110009c00000000010300190000000001026019000000000101004b0000035d0000613d00000002020003670000000401200370000000000101043b0000173e0310009c0000035d0000213d0000002402200370000000000202043b000000ff0320008c0000035d0000213d000000000001042d000000000100001900005c3b0001043000030000000000020000000104000039000000000204041a000000ff02200190000003720000613d0000173e021001970000003401000039000000000301041a0000174003300197000000000323019f000000000031041b0000174101000041000000400900043d00000000001904350000000001000414000000040320008c0000039f0000c13d0000000103000031000003d00000013d000200000001001d000017430100004100000000001004390000000001000410000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000300000004001d5c395c2f0000040f00000003050000290000000102200190000004490000613d000000000101043b000000000101004b000003890000613d000000000100041a000000040110008c000004770000813d000000000105041a000001000600008a000000000161016f00000001011001bf000000000015041b0000000401000039000000000010041b00000002010000290000173e021001970000003401000039000000000301041a0000174003300197000000000323019f000000000031041b0000174101000041000000400900043d00000000001904350000000001000414000000040320008c000003f10000c13d0000000103000031000004250000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000003bd0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000003b50000413d000000000604004b000003cc0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000004510000613d0000001f01300039000000200200008a000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c0000044b0000213d00000001022001900000044b0000c13d000000400010043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000004490000c13d00000000010904330000173e0210009c000004490000213d0000003502000039000000000302041a0000174003300197000000000113019f000000000012041b000004480000013d000200000006001d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000004100000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000004080000413d000000000604004b0000041f0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900000002060000290000048c0000613d0000001f01300039000000200200008a000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c0000044b0000213d00000001022001900000044b0000c13d000000400010043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000004490000c13d00000000010904330000173e0210009c000004490000213d0000003502000039000000000302041a0000174003300197000000000113019f000000000012041b000000000105041a000000000161016f000000000015041b000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400200043d0000001f0430018f00000005033002720000045e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004560000413d000000000504004b0000046d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400100043d00000064021000390000174503000041000000000032043500000044021000390000174603000041000000000032043500000024021000390000002e030000390000000000320435000017470200004100000000002104350000000402100039000000200300003900000000003204350000171002000041000017100310009c0000000001028019000000400110021000001748011001c700005c3b00010430000000400200043d0000001f0430018f0000000503300272000004990000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004910000413d000000000504004b000004a80000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300008000000000002000500000002001d000800000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000004c00000c13d0000000103000031000004f10000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000700000009001d5c395c2f0000040f0000000709000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000004de0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000004d60000413d000000000604004b000004ed0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000008e80000613d0000001f01300039000000200800008a000000000181016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000008a70000213d0000000101100190000008a70000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000008a50000613d00000000050904330000173e0150009c000008a50000213d0000174c0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000400000008001d000005180000c13d00000001030000310000054f0000013d000300000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000700000005001d000000000205001900060000000a001d5c395c2f0000040f000000060a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000005390000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000005310000413d000000000604004b0000000408000029000005490000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000070500002900000003060000290000090e0000613d0000001f01300039000000000181016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000008a70000213d0000000101100190000008a70000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000008a50000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000008a50000c13d000000000201004b000005c80000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c000005770000c13d0000000103000031000005aa0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000700000009001d5c395c2f0000040f0000000709000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000005960000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000058e0000413d000000000604004b0000000408000029000005a60000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000009340000613d0000001f01300039000000000181016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000008a70000213d0000000101100190000008a70000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000008a50000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000008a50000c13d0000174e0290009c000008a70000213d0000004002900039000000400020043f00000020029000390000174f03000041000000000032043500000001020000390000000000290435000000000101004b000008d30000613d0000003501000039000000000101041a0000173e01100197000300000001001d0000000501000029000000000101004b000008a40000613d000001df0100008a00000008020000290000000001210049000200000001001d0000800201000039000100000001001d0000000002000019000600000002001d0000000501200210000000080200002900000000012100190000000201100367000000000401043b000000020100002900000000011000310000173b02000041000000000314004b000000000300001900000000030280190000173b01100197000700000004001d0000173b04400197000000000514004b0000000002008019000000000114013f0000173b0110009c00000000010300190000000001026019000000000101004b000008a50000c13d000017430100004100000000001004390000175001000041000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700000001020000295c395c2f0000040f000000040e0000290000000102200190000008a50000613d000000000101043b000000000101004b000008a50000613d000000400f00043d0000002401f0003900000040020000390000000000210435000017510100004100000000001f04350000000401f00039000000030200002900000000002104350000000801000029000000070200002900000000011200190000000202100367000000000202043b0000173e0320009c000008a50000213d0000004403f00039000000000023043500000020021000390000000202200367000000000202043b0000173e0320009c000008a50000213d0000006403f00039000000000023043500000040021000390000000202200367000000000202043b0000173e0320009c000008a50000213d0000008403f00039000000000023043500000060021000390000000202200367000000000202043b000000ff0320008c000008a50000213d000000a403f00039000000000023043500000080021000390000000202200367000000000202043b0000173e0320009c000008a50000213d000000c403f000390000000000230435000000a0021000390000000202200367000000000202043b0000173e0320009c000008a50000213d000000e403f000390000000000230435000000c0021000390000000202200367000000000202043b0000173e0320009c000008a50000213d0000010403f000390000000000230435000000e0021000390000000202200367000000000202043b0000173e0320009c000008a50000213d0000012403f0003900000000002304350000001f0200008a000000000212004900000100031000390000000204000367000000000334034f000000000303043b000000000500003100000000062500190000173b07000041000000000863004b000000000800001900000000080780190000173b066001970000173b09300197000000000a69004b0000000007008019000000000669013f0000173b0660009c00000000060800190000000006076019000000000606004b000008a50000c13d0000000003130019000000000434034f000000000404043b0000173d0640009c000008a50000213d00000000054500490000173b06000041000000000715004b000000000700001900000000070640190000173b081001970000173b05500197000000000985004b000000000600a019000000000585013f0000173b0550009c00000000050700190000000005066019000000000505004b000008a50000c13d0000014405f00039000001e00600003900000000006504350000022405f0003900000000004504350000024405f000390000002003300039000000020330036700000005064002720000068a0000613d000000000700001900000005087002100000000009850019000000000883034f000000000808043b00000000008904350000000107700039000000000867004b000006820000413d0000001f07400190000006990000613d0000000506600210000000000363034f00000000066500190000000307700210000000000806043300000000087801cf000000000878022f000000000303043b0000010007700089000000000373022f00000000037301cf000000000383019f0000000000360435000000000354001900000000000304350000000007000031000000000827001900000120061000390000000203000367000000000663034f000000000606043b0000173b09000041000000000a86004b000000000a000019000000000a0980190000173b088001970000173b0b600197000000000c8b004b000000000900801900000000088b013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000000006160019000000000363034f000000000303043b0000173d0830009c000008a50000213d00000000073700490000173b08000041000000000917004b000000000900001900000000090840190000173b0a1001970000173b07700197000000000ba7004b000000000800a0190000000007a7013f0000173b0770009c00000000070900190000000007086019000000000707004b000008a50000c13d0000001f044000390000000004e4016f000000000554001900000200044000390000016407f0003900000000004704350000000005350436000000200460003900000002044003670000000506300272000006d70000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000006cf0000413d0000001f07300190000006e60000613d0000000506600210000000000464034f00000000066500190000000307700210000000000806043300000000087801cf000000000878022f000000000404043b0000010007700089000000000474022f00000000047401cf000000000484019f0000000000460435000000000453001900000000000404350000000006000031000000000826001900000140071000390000000204000367000000000774034f000000000707043b0000173b09000041000000000a87004b000000000a000019000000000a0980190000173b088001970000173b0b700197000000000c8b004b000000000900801900000000088b013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000000007170019000000000474034f000000000404043b0000173d0840009c000008a50000213d00000000064600490000173b08000041000000000916004b000000000900001900000000090840190000173b0a1001970000173b06600197000000000ba6004b000000000800a0190000000006a6013f0000173b0660009c00000000060900190000000006086019000000000606004b000008a50000c13d0000001f033000390000000003e3016f0000000005530019000000440300008a0000000003f300490000018406f00039000000000835001900000000008604350000000006450436000000200570003900000002055003670000000507400272000007260000613d00000000080000190000000509800210000000000a960019000000000995034f000000000909043b00000000009a04350000000108800039000000000978004b0000071e0000413d0000001f08400190000007350000613d0000000507700210000000000575034f00000000077600190000000308800210000000000907043300000000098901cf000000000989022f000000000505043b0000010008800089000000000585022f00000000058501cf000000000595019f0000000000570435000000000564001900000000000504350000000008000031000000000928001900000160071000390000000205000367000000000775034f000000000707043b0000173b0a000041000000000b97004b000000000b000019000000000b0a80190000173b099001970000173b0c700197000000000d9c004b000000000a00801900000000099c013f0000173b0990009c00000000090b001900000000090a6019000000000909004b000008a50000c13d0000000007170019000000000575034f000000000505043b0000173d0950009c000008a50000213d00000000085800490000173b09000041000000000a18004b000000000a000019000000000a0940190000173b0b1001970000173b08800197000000000cb8004b000000000900a0190000000008b8013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000001f044000390000000004e4016f00000000046400190000000006340019000001a408f0003900000000006804350000000006540436000000200470003900000002044003670000000507500272000007730000613d00000000080000190000000509800210000000000a960019000000000994034f000000000909043b00000000009a04350000000108800039000000000978004b0000076b0000413d0000001f08500190000007820000613d0000000507700210000000000474034f00000000077600190000000308800210000000000907043300000000098901cf000000000989022f000000000404043b0000010008800089000000000484022f00000000048401cf000000000494019f0000000000470435000000000465001900000000000404350000000008000031000000000928001900000180071000390000000204000367000000000774034f000000000707043b0000173b0a000041000000000b97004b000000000b000019000000000b0a80190000173b099001970000173b0c700197000000000d9c004b000000000a00801900000000099c013f0000173b0990009c00000000090b001900000000090a6019000000000909004b000008a50000c13d0000000007170019000000000474034f000000000404043b0000173d0940009c000008a50000213d00000000084800490000173b09000041000000000a18004b000000000a000019000000000a0940190000173b0b1001970000173b08800197000000000cb8004b000000000900a0190000000008b8013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000001f055000390000000005e5016f00000000056500190000000006350019000001c408f0003900000000006804350000000006450436000000200570003900000002055003670000000507400272000007c00000613d00000000080000190000000509800210000000000a960019000000000995034f000000000909043b00000000009a04350000000108800039000000000978004b000007b80000413d0000001f08400190000007cf0000613d0000000507700210000000000575034f00000000077600190000000308800210000000000907043300000000098901cf000000000989022f000000000505043b0000010008800089000000000585022f00000000058501cf000000000595019f00000000005704350000000005640019000000000005043500000000080000310000000009280019000001a0071000390000000205000367000000000775034f000000000707043b0000173b0a000041000000000b97004b000000000b000019000000000b0a80190000173b099001970000173b0c700197000000000d9c004b000000000a00801900000000099c013f0000173b0990009c00000000090b001900000000090a6019000000000909004b000008a50000c13d0000000007170019000000000575034f000000000505043b0000173d0950009c000008a50000213d00000000085800490000173b09000041000000000a18004b000000000a000019000000000a0940190000173b0b1001970000173b08800197000000000cb8004b000000000900a0190000000008b8013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000001f044000390000000004e4016f00000000046400190000000006340019000001e408f00039000000000068043500000000045404360000002006700039000000020660036700000005075002720000080d0000613d00000000080000190000000509800210000000000a940019000000000996034f000000000909043b00000000009a04350000000108800039000000000978004b000008050000413d0000001f085001900000081c0000613d0000000507700210000000000676034f00000000077400190000000308800210000000000907043300000000098901cf000000000989022f000000000606043b0000010008800089000000000686022f00000000068601cf000000000696019f00000000006704350000000006450019000000000006043500000000070000310000000008270019000001c0061000390000000202000367000000000662034f000000000606043b0000173b09000041000000000a86004b000000000a000019000000000a0980190000173b088001970000173b0b600197000000000c8b004b000000000900801900000000088b013f0000173b0880009c00000000080a00190000000008096019000000000808004b000008a50000c13d0000000006160019000000000262034f000000000202043b0000173d0820009c000008a50000213d00000000072700490000173b08000041000000000917004b000000000900001900000000090840190000173b011001970000173b07700197000000000a17004b000000000800a019000000000117013f0000173b0110009c00000000010900190000000001086019000000000101004b000008a50000c13d0000001f015000390000000001e1016f000000000141001900000000033100190000020404f00039000000000034043500000000012104360000002003600039000000020330036700000005042002720000085a0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000008520000413d0000001f05200190000008690000613d0000000504400210000000000343034f00000000044100190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f00000000003404350000001f032000390000000003e3016f000000000212001900000000000204350000000001f1004900000000013100190000171002000041000017100310009c000000000102801900000060011002100000171003f0009c000000000302001900000000030f40190000004003300210000000000131019f0000000003000414000017100430009c0000000002034019000000c002200210000000000112019f000017500200004100070000000f001d5c395c340000040f00000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000008ad0000613d0000001f01400039000017520210019700000007010000290000000001120019000000000221004b000000000200001900000001020040390000173d0310009c000008a70000213d0000000102200190000008a70000c13d000000400010043f0000173b010000410000000102000031000000000302004b000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000008a50000c13d000000060200002900000001022000390000000501000029000000000112004b000005e10000413d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400200043d0000001f0340018f0000000504400272000008ba0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008b20000413d000000000503004b000008c90000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400300043d000800000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000080400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000008f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000008ed0000413d000000000504004b000009040000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000091b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000009130000413d000000000504004b0000092a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000009410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000009390000413d000000000504004b000009500000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300003000000000002000200000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c000009670000c13d0000000103000031000009980000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700030000000a001d5c395c2f0000040f000000030a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000009850000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000097d0000413d000000000604004b000009940000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000a950000613d0000001f01300039000000200200008a000300000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00000a7b0000213d000000010110019000000a7b0000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00000a790000613d00000000020a04330000173e0120009c00000a790000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000009bf0000c13d0000000103000031000009f00000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000009dd0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000009d50000413d000000000604004b000009ec0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000abb0000613d0000001f013000390000000302000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00000a7b0000213d000000010220019000000a7b0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00000a790000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b00000a790000c13d0000174e0310009c00000a7b0000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000000202004b00000a810000613d0000003501000039000000000101041a000017430200004100000000002004390000173e01100197000100000001001d000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f000000010220019000000a790000613d000000000101043b000000000101004b00000a790000613d000000400600043d0000175401000041000000000016043500000002010000290000173e051001970000000401600039000000000051043500000000010004140000000102000029000000040320008c00000a3a0000c13d000000010400003100000a500000013d0000171004000041000017100310009c0000000001048019000017100360009c000000000304001900000000030640190000004003300210000000c001100210000000000131019f0000174a011001c7000200000005001d000100000006001d5c395c2a0000040f0000000106000029000000020500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000000ae10000613d0000001f014000390000000302000029000000000221016f0000000001620019000000000221004b000000000200001900000001020040390000173d0310009c00000a7b0000213d000000010220019000000a7b0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000603004b000000000200a0190000173b0330009c000000000204c019000000000202004b00000a790000c13d00001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001755011001c70000800d02000039000000020300003900001756040000415c395c2a0000040f000000010120019000000a790000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400400043d000300000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000030400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200000aa20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000a9a0000413d000000000504004b00000ab10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200000ac80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000ac00000413d000000000504004b00000ad70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200000aee0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ae60000413d000000000503004b00000afd0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300003000000000002000200000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c00000b140000c13d000000010300003100000b450000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700030000000a001d5c395c2f0000040f000000030a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000b320000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000b2a0000413d000000000604004b00000b410000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000d640000613d0000001f01300039000000200800008a000000000181016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00000d240000213d000000010110019000000d240000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00000d220000613d00000000020a04330000173e0120009c00000d220000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000300000008001d00000b6c0000c13d000000010300003100000b9e0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000b8a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000b820000413d000000000604004b000000030800002900000b9a0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000d8a0000613d0000001f01300039000000000281016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00000d240000213d000000010220019000000d240000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00000d220000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b00000d220000c13d0000174e0310009c00000d240000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000000202004b00000d2a0000613d0000003501000039000000000101041a000100000001001d000017430100004100000000001004390000175001000041000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f0000000102200190000000020c000029000000030d00002900000d220000613d000000000101043b000000000101004b00000d220000613d000000400e00043d0000002401e0003900000040020000390000000000210435000017570100004100000000001e043500000001010000290000173e011001970000000402e0003900000000001204350000000201c00367000000000101043b0000173e0210009c00000d220000213d0000004402e0003900000000001204350000002001c000390000000201100367000000000101043b0000173e0210009c00000d220000213d0000006402e0003900000000001204350000004001c000390000000201100367000000000101043b0000173e0210009c00000d220000213d0000008402e0003900000000001204350000001f0100008a0000000001c100490000006002c000390000000203000367000000000223034f000000000402043b000000000200003100000000051200190000173b06000041000000000754004b000000000700001900000000070680190000173b055001970000173b08400197000000000958004b0000000006008019000000000558013f0000173b0550009c00000000050700190000000005066019000000000505004b00000d220000c13d0000000005c40019000000000353034f000000000303043b0000173d0430009c00000d220000213d00000000023200490000173b040000410000000006c2004b000000000600001900000000060440190000173b07c001970000173b02200197000000000872004b000000000400a019000000000272013f0000173b0220009c00000000020600190000000002046019000000000202004b00000d220000c13d000000a402e00039000000e00400003900000000004204350000012402e0003900000000003204350000001f0230018f0000014404e0003900000020055000390000000205500367000000050630027200000c380000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000c300000413d000000000702004b00000c470000613d0000000506600210000000000565034f00000000066400190000000302200210000000000706043300000000072701cf000000000727022f000000000505043b0000010002200089000000000525022f00000000022501cf000000000272019f000000000026043500000000024300190000000000020435000000000600003100000000071600190000008005c000390000000202000367000000000552034f000000000505043b0000173b08000041000000000975004b000000000900001900000000090880190000173b077001970000173b0a500197000000000b7a004b000000000800801900000000077a013f0000173b0770009c00000000070900190000000007086019000000000707004b00000d220000c13d0000000005c50019000000000252034f000000000202043b0000173d0720009c00000d220000213d00000000062600490000173b070000410000000008c6004b000000000800001900000000080740190000173b09c001970000173b06600197000000000a96004b000000000700a019000000000696013f0000173b0660009c00000000060800190000000006076019000000000606004b00000d220000c13d0000001f033000390000000003d3016f00000000064300190000010003300039000000c404e0003900000000003404350000001f0420018f000000000326043600000020055000390000000205500367000000050620027200000c860000613d000000000700001900000005087002100000000009830019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000c7e0000413d000000000704004b00000c950000613d0000000506600210000000000565034f00000000066300190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f000000000046043500000000043200190000000000040435000000a004c000390000000204400367000000000404043b0000173e0540009c00000d220000213d000000e405e00039000000000045043500000000050000310000000006150019000000c004c000390000000201000367000000000441034f000000000404043b0000173b07000041000000000864004b000000000800001900000000080780190000173b066001970000173b09400197000000000a69004b0000000007008019000000000669013f0000173b0660009c00000000060800190000000006076019000000000606004b00000d220000c13d0000000004c40019000000000141034f000000000101043b0000173d0610009c00000d220000213d00000000051500490000173b060000410000000007c5004b000000000700001900000000070640190000173b08c001970000173b05500197000000000985004b000000000600a019000000000585013f0000173b0550009c00000000050700190000000005066019000000000505004b00000d220000c13d0000001f022000390000000002d2016f00000000023200190000000003e20049000000440330008a0000010405e0003900000000003504350000001f0310018f000000000212043600000020044000390000000204400367000000050510027200000cdc0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000cd40000413d000000000603004b00000ceb0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000001f031000390000000003d3016f000000000121001900000000000104350000000001e2004900000000013100190000171002000041000017100310009c000000000102801900000060011002100000171003e0009c000000000302001900000000030e40190000004003300210000000000131019f0000000003000414000017100430009c0000000002034019000000c002200210000000000112019f000017500200004100030000000e001d5c395c340000040f00000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000000d3e0000613d0000001f01400039000017520210019700000003010000290000000001120019000000000221004b000000000200001900000001020040390000173d0310009c00000d240000213d000000010220019000000d240000c13d000000400010043f0000173b010000410000000102000031000000000302004b000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00000d220000c13d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400400043d000300000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000030400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200000d4b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000d430000413d000000000503004b00000d5a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200000d710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d690000413d000000000504004b00000d800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200000d970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d8f0000413d000000000504004b00000da60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300003000000000002000200000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c00000dbd0000c13d000000010300003100000dee0000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700030000000a001d5c395c2f0000040f000000030a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000ddb0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000dd30000413d000000000604004b00000dea0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000ffa0000613d0000001f01300039000000200800008a000000000181016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00000fba0000213d000000010110019000000fba0000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00000fb80000613d00000000020a04330000173e0120009c00000fb80000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000300000008001d00000e150000c13d000000010300003100000e470000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200000e330000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000e2b0000413d000000000604004b000000030800002900000e430000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000010200000613d0000001f01300039000000000281016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00000fba0000213d000000010220019000000fba0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00000fb80000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b00000fb80000c13d0000174e0310009c00000fba0000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000000202004b00000fc00000613d0000003501000039000000000101041a000100000001001d000017430100004100000000001004390000175001000041000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f0000000102200190000000020c000029000000030d00002900000fb80000613d000000000101043b000000000101004b00000fb80000613d000000400e00043d0000002401e0003900000040020000390000000000210435000017580100004100000000001e043500000001010000290000173e011001970000000402e0003900000000001204350000000201c00367000000000101043b0000173e0210009c00000fb80000213d0000004402e0003900000000001204350000002001c000390000000201100367000000000101043b0000173e0210009c00000fb80000213d0000006402e0003900000000001204350000001f0100008a0000000001c100490000004002c000390000000203000367000000000223034f000000000402043b000000000200003100000000051200190000173b06000041000000000754004b000000000700001900000000070680190000173b055001970000173b08400197000000000958004b0000000006008019000000000558013f0000173b0550009c00000000050700190000000005066019000000000505004b00000fb80000c13d0000000005c40019000000000353034f000000000303043b0000173d0430009c00000fb80000213d00000000023200490000173b040000410000000006c2004b000000000600001900000000060440190000173b07c001970000173b02200197000000000872004b000000000400a019000000000272013f0000173b0220009c00000000020600190000000002046019000000000202004b00000fb80000c13d0000008402e00039000000c00400003900000000004204350000010402e0003900000000003204350000001f0230018f0000012404e0003900000020055000390000000205500367000000050630027200000eda0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000ed20000413d000000000702004b00000ee90000613d0000000506600210000000000565034f00000000066400190000000302200210000000000706043300000000072701cf000000000727022f000000000505043b0000010002200089000000000525022f00000000022501cf000000000272019f000000000026043500000000024300190000000000020435000000000600003100000000071600190000006005c000390000000202000367000000000552034f000000000505043b0000173b08000041000000000975004b000000000900001900000000090880190000173b077001970000173b0a500197000000000b7a004b000000000800801900000000077a013f0000173b0770009c00000000070900190000000007086019000000000707004b00000fb80000c13d0000000005c50019000000000252034f000000000202043b0000173d0720009c00000fb80000213d00000000062600490000173b070000410000000008c6004b000000000800001900000000080740190000173b09c001970000173b06600197000000000a96004b000000000700a019000000000696013f0000173b0660009c00000000060800190000000006076019000000000606004b00000fb80000c13d0000001f033000390000000003d3016f0000000006430019000000e003300039000000a404e0003900000000003404350000001f0420018f000000000326043600000020055000390000000205500367000000050620027200000f280000613d000000000700001900000005087002100000000009830019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000f200000413d000000000704004b00000f370000613d0000000506600210000000000565034f00000000066300190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000432001900000000000404350000008004c000390000000204400367000000000404043b0000173e0540009c00000fb80000213d000000c405e00039000000000045043500000000050000310000000006150019000000a004c000390000000201000367000000000441034f000000000404043b0000173b07000041000000000864004b000000000800001900000000080780190000173b066001970000173b09400197000000000a69004b0000000007008019000000000669013f0000173b0660009c00000000060800190000000006076019000000000606004b00000fb80000c13d0000000004c40019000000000141034f000000000101043b0000173d0610009c00000fb80000213d00000000051500490000173b060000410000000007c5004b000000000700001900000000070640190000173b08c001970000173b05500197000000000985004b000000000600a019000000000585013f0000173b0550009c00000000050700190000000005066019000000000505004b00000fb80000c13d0000001f022000390000000002d2016f00000000023200190000000003e20049000000440330008a000000e405e0003900000000003504350000001f0310018f000000000212043600000020044000390000000204400367000000050510027200000f7e0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000f760000413d000000000603004b00000f8d0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000001f031000390000000003d3016f000000000121001900000000000104350000000001e2004900000000013100190000171002000041000017100310009c000000000102801900000060011002100000171003e0009c000000000302001900000000030e40190000004003300210000000000131019f0000000003000414000017100430009c0000000002034019000000c002200210000000000112019f000017500200004100030000000e001d5c395c340000040f00000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000000fd40000613d0000001f01400039000017520210019700000003010000290000000001120019000000000221004b000000000200001900000001020040390000173d0310009c00000fba0000213d000000010220019000000fba0000c13d000000400010043f000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400400043d000300000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000030400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200000fe10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000fd90000413d000000000503004b00000ff00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000010070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000fff0000413d000000000504004b000010160000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000102d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000010250000413d000000000504004b0000103c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300003000000000002000200000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c000010530000c13d0000000103000031000010840000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700030000000a001d5c395c2f0000040f000000030a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000010710000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010690000413d000000000604004b000010800000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000012900000613d0000001f01300039000000200800008a000000000181016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000012500000213d0000000101100190000012500000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b0000124e0000613d00000000020a04330000173e0120009c0000124e0000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000300000008001d000010ab0000c13d0000000103000031000010dd0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000010c90000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010c10000413d000000000604004b0000000308000029000010d90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000012b60000613d0000001f01300039000000000281016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000012500000213d0000000102200190000012500000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000124e0000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b0000124e0000c13d0000174e0310009c000012500000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000000202004b000012560000613d0000003501000039000000000101041a000100000001001d000017430100004100000000001004390000175001000041000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f0000000102200190000000020c000029000000030d0000290000124e0000613d000000000101043b000000000101004b0000124e0000613d000000400e00043d0000002401e0003900000040020000390000000000210435000017590100004100000000001e043500000001010000290000173e011001970000000402e0003900000000001204350000000201c00367000000000101043b0000173e0210009c0000124e0000213d0000004402e0003900000000001204350000002001c000390000000201100367000000000101043b0000173e0210009c0000124e0000213d0000006402e0003900000000001204350000001f0100008a0000000001c100490000004002c000390000000203000367000000000223034f000000000402043b000000000200003100000000051200190000173b06000041000000000754004b000000000700001900000000070680190000173b055001970000173b08400197000000000958004b0000000006008019000000000558013f0000173b0550009c00000000050700190000000005066019000000000505004b0000124e0000c13d0000000005c40019000000000353034f000000000303043b0000173d0430009c0000124e0000213d00000000023200490000173b040000410000000006c2004b000000000600001900000000060440190000173b07c001970000173b02200197000000000872004b000000000400a019000000000272013f0000173b0220009c00000000020600190000000002046019000000000202004b0000124e0000c13d0000008402e00039000000c00400003900000000004204350000010402e0003900000000003204350000001f0230018f0000012404e00039000000200550003900000002055003670000000506300272000011700000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000011680000413d000000000702004b0000117f0000613d0000000506600210000000000565034f00000000066400190000000302200210000000000706043300000000072701cf000000000727022f000000000505043b0000010002200089000000000525022f00000000022501cf000000000272019f000000000026043500000000024300190000000000020435000000000600003100000000071600190000006005c000390000000202000367000000000552034f000000000505043b0000173b08000041000000000975004b000000000900001900000000090880190000173b077001970000173b0a500197000000000b7a004b000000000800801900000000077a013f0000173b0770009c00000000070900190000000007086019000000000707004b0000124e0000c13d0000000005c50019000000000252034f000000000202043b0000173d0720009c0000124e0000213d00000000062600490000173b070000410000000008c6004b000000000800001900000000080740190000173b09c001970000173b06600197000000000a96004b000000000700a019000000000696013f0000173b0660009c00000000060800190000000006076019000000000606004b0000124e0000c13d0000001f033000390000000003d3016f0000000006430019000000e003300039000000a404e0003900000000003404350000001f0420018f0000000003260436000000200550003900000002055003670000000506200272000011be0000613d000000000700001900000005087002100000000009830019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000011b60000413d000000000704004b000011cd0000613d0000000506600210000000000565034f00000000066300190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000432001900000000000404350000008004c000390000000204400367000000000404043b0000173e0540009c0000124e0000213d000000c405e00039000000000045043500000000050000310000000006150019000000a004c000390000000201000367000000000441034f000000000404043b0000173b07000041000000000864004b000000000800001900000000080780190000173b066001970000173b09400197000000000a69004b0000000007008019000000000669013f0000173b0660009c00000000060800190000000006076019000000000606004b0000124e0000c13d0000000004c40019000000000141034f000000000101043b0000173d0610009c0000124e0000213d00000000051500490000173b060000410000000007c5004b000000000700001900000000070640190000173b08c001970000173b05500197000000000985004b000000000600a019000000000585013f0000173b0550009c00000000050700190000000005066019000000000505004b0000124e0000c13d0000001f022000390000000002d2016f00000000023200190000000003e20049000000440330008a000000e405e0003900000000003504350000001f0310018f0000000002120436000000200440003900000002044003670000000505100272000012140000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000120c0000413d000000000603004b000012230000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000001f031000390000000003d3016f000000000121001900000000000104350000000001e2004900000000013100190000171002000041000017100310009c000000000102801900000060011002100000171003e0009c000000000302001900000000030e40190000004003300210000000000131019f0000000003000414000017100430009c0000000002034019000000c002200210000000000112019f000017500200004100030000000e001d5c395c340000040f00000000030100190000006003300270000117100030019d0000171004300197000300000001035500000001022001900000126a0000613d0000001f01400039000017520210019700000003010000290000000001120019000000000221004b000000000200001900000001020040390000173d0310009c000012500000213d0000000102200190000012500000c13d000000400010043f000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400400043d000300000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000030400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000012770000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000126f0000413d000000000503004b000012860000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000129d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012950000413d000000000504004b000012ac0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000012c30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012bb0000413d000000000504004b000012d20000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000012ea0000c13d00000001030000310000131b0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000013080000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000013000000413d000000000604004b000013170000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000014f40000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000014d90000213d0000000101100190000014d90000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000014d70000613d00000000050904330000173e0150009c000014d70000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000013420000c13d0000000103000031000013780000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000013630000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000135b0000413d000000000604004b000013720000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900000001060000290000151a0000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000014d90000213d0000000101100190000014d90000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000014d70000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000014d70000c13d000000000201004b000013f20000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c000013a10000c13d0000000103000031000013d30000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000013c00000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000013b80000413d000000000604004b000013cf0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000015a00000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000014d90000213d0000000101100190000014d90000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000014d70000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000014d70000c13d0000174e0290009c000014d90000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000014df0000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d0000140e0000c13d0000000103000031000014410000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000142d0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000014250000413d000000000604004b0000143c0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000015400000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c000014d90000213d0000000101100190000014d90000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000014d70000c13d0000175d0160009c000014d90000213d0000002001600039000000400010043f000000000209043300000000002604350000000501000029000000000101004b000014640000613d0000175e012001c7000014720000013d000000400100043d0000174e0310009c000014d90000213d0000004003100039000000400030043f00000020031000390000175f0400004100000000004304350000000203000039000000000031043500001760022001980000158c0000c13d00000000010604330000176101100197000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f000000020300002900000003040000290000000102200190000014d70000613d000000000101043b000000000101004b000014d70000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000014940000c13d0000000104000031000014a80000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000015660000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000014d90000213d0000000102200190000014d90000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000014d70000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d020000390000000203000039000017650400004100000004050000295c395c2a0000040f0000000101200190000014d70000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000015010000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014f90000413d000000000504004b000015100000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000015270000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000151f0000413d000000000504004b000015360000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000154d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000015450000413d000000000504004b0000155c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000015730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000156b0000413d000000000503004b000015820000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000015ad0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000015a50000413d000000000504004b000015bc0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b0001043000000000030104330000000002320436000000000403004b000015d60000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000015cb0000413d000000000134004b000015d60000a13d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000a0000000000020000000006030019000700000002001d000600000001001d0000003401000039000200000001001d000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000900000006001d000800000004001d000015ed0000c13d0000000103000031000016200000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000a00000009001d5c395c2f0000040f0000000a09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000160b0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000016030000413d000000000604004b0000161a0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000090600002900000008040000290000199d0000613d0000001f01300039000000200200008a000a00000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c0000191c0000213d00000001011001900000191c0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000502004b00000000010080190000173b0220009c000000000103c019000000000101004b000019220000613d00000000070904330000173e0170009c000019220000213d0000175a0100004100000000001a043500000000010004110000173e081001970000000401a0003900000000008104350000000001000414000000040270008c000016470000c13d00000001030000310000167f0000013d000300000008001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000500000007001d000000000207001900040000000a001d5c395c2f0000040f000000040a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000016680000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000016600000413d000000000604004b000016770000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000906000029000000080400002900000005070000290000000308000029000019c30000613d0000001f013000390000000a02000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000191c0000213d00000001011001900000191c0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000502004b000000000100a0190000173b0220009c000000000103c019000000000101004b000019220000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000019220000c13d000000000201004b000016fb0000c13d0000174d010000410000000000190435000000040190003900000000008104350000000001000414000000040270008c000016a80000c13d0000000103000031000016dc0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002070019000500000009001d5c395c2f0000040f0000000509000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000016c70000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000016bf0000413d000000000604004b000016d60000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000906000029000000080400002900001a5d0000613d0000001f013000390000000a02000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c0000191c0000213d00000001011001900000191c0000c13d000000400020043f0000173b010000410000000103000031000000200530008c000000000700001900000000070140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000107c019000000000101004b000019220000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000019220000c13d0000174e0290009c0000191c0000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000400300043d000000000101004b000019240000613d0000174e0130009c0000191c0000213d0000004001300039000000400010043f000000200130003900001766020000410000000000210435000000020900003900000000009304350000000701000029000000000161004b000019380000213d0000003501000039000000000201041a000000400b00043d0000175c0100004100000000001b043500000006010000290000173e031001970000000401b00039000600000003001d000000000031043500000000010004140000173e08200197000000040280008c000500000008001d000017240000c13d00000001030000310000175b0000013d000300000009001d0000171002000041000017100310009c00000000010280190000171003b0009c00000000020b40190000004002200210000000c001100210000000000121019f0000174a011001c7000000000208001900040000000b001d5c395c2f0000040f000000040b000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000017440000613d0000000006000019000000050760021000000000087b0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000173c0000413d000000000604004b000017530000613d0000000505500210000000000651034f00000000055b00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000906000029000000080400002900000005080000290000000309000029000019e90000613d0000001f013000390000000a02000029000000000121016f000000000ab1001900000000011a004b000000000100001900000001010040390000173d02a0009c0000191c0000213d00000001011001900000191c0000c13d0000004000a0043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000502004b000000000100a0190000173b0220009c000000000103c019000000000101004b000019220000c13d0000175d01a0009c0000191c0000213d0000002001a00039000000400010043f00000000010b043300000000001a0435000000400100043d000000000206004b00040000000a001d000017ac0000613d0000174e0210009c0000191c0000213d0000004002100039000000400020043f0000002002100039000017660300004100000000003204350000000000910435000027100240008c000019890000a13d000013890100008a00000000214100d9000000000161004b000019220000413d000000400100043d0000174e0210009c0000191c0000213d0000004002100039000000400020043f000000200210003900001766030000410000000000320435000000000091043500000000326400a90000176702200041000017680220009c000018840000213d000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b000104300000174e0210009c0000191c0000213d0000004002100039000000400020043f0000002002100039000017660300004100000000003204350000000000910435000000000204004b00001a350000c13d0000000201000029000000000201041a000000400c00043d000017690100004100000000001c043500000000010004140000173e02200197000000040320008c000300000009001d000017c20000c13d0000000103000031000017f80000013d0000171003000041000017100410009c00000000010380190000171004c0009c00000000030c40190000004003300210000000c001100210000000000131019f00001742011001c700020000000c001d5c395c2f0000040f000000020c000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000017e00000613d0000000006000019000000050760021000000000087c0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000017d80000413d000000000604004b0000000508000029000000040a000029000017f10000613d0000000505500210000000000651034f00000000055c00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000009060000290000000804000029000000030900002900001a830000613d0000001f013000390000000a02000029000000000121016f000000000bc1001900000000011b004b000000000100001900000001010040390000173d02b0009c0000191c0000213d00000001011001900000191c0000c13d0000004000b0043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000502004b000000000100a0190000173b0220009c000000000103c019000000000101004b000019220000c13d00000000020c04330000173e0120009c000019220000213d0000176a01000041000000000c1b04360000000401b00039000000060300002900000000003104350000000001000414000000040320008c0000181d0000c13d0000000103000031000018550000013d00010000000c001d0000171003000041000017100410009c00000000010380190000171004b0009c00000000030b40190000004003300210000000c001100210000000000131019f0000174a011001c700020000000b001d5c395c2f0000040f000000020b000029000000000301001900000060033002700000171003300197000001800430008c000001800500003900000000050340190000001f0450018f00000005055002720000183c0000613d0000000006000019000000050760021000000000087b0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000018340000413d000000000604004b000000050800002900000003090000290000184d0000613d0000000505500210000000000651034f00000000055b00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000009060000290000000804000029000000040a000029000000010c00002900001aa90000613d0000001f013000390000000a02000029000000000221016f0000000001b20019000000000221004b000000000200001900000001020040390000173d0310009c0000191c0000213d00000001022001900000191c0000c13d000000400010043f0000173b020000410000000103000031000001800530008c000000000700001900000000070240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000207c019000000000202004b000019220000c13d0000016002b0003900000000020204330000176b0220009c000019220000213d0000004002b000390000000002020433000000000202004b00000000020000190000187a0000c13d00000000020c0433000000000202004b000000000200001900000001020060390000174e0310009c0000191c0000213d0000004003100039000000400030043f00000020031000390000176c0500004100000000005304350000000000910435000000010220019000001a490000613d000000400100043d0000174e0210009c0000191c0000213d0000004002100039000000400020043f00000020021000390000176d030000410000000000320435000000000091043500000007030000290000176e0230009c0000194d0000813d00000000010a04330000176f01100197000000000131019f00000000001a0435000000400100043d0000174e0210009c0000191c0000213d0000004002100039000000400020043f00000020021000390000177003000041000000000032043500000000009104350000176e0260009c000019610000813d000000100160021000000000020a04330000177102200197000000000112019f00000000001a0435000000400100043d0000174e0210009c0000191c0000213d0000004002100039000000400020043f00000020021000390000177203000041000000000032043500000000009104350000176e0240009c000019750000813d000000200140021000000000020a04330000177302200197000000000112019f00000000001a043500001743010000410000000000100439000000040080044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f00000004030000290000000504000029000000080700002900000001022001900000000906000029000019220000613d000000000101043b000000000101004b000019220000613d000000400500043d000017620100004100000000001504350000000401500039000000060200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000018d60000c13d0000000104000031000018ec0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000500000005001d5c395c2a0000040f00000005050000290000000807000029000000090600002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000001a0f0000613d0000001f014000390000000a02000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c0000191c0000213d00000001022001900000191c0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000019220000c13d00000040021000390000000000720435000000200210003900000000006204350000000702000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001774011001c70000800d020000390000000203000039000017750400004100000006050000295c395c2a0000040f0000000101200190000019220000613d000000000001042d000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000000100001900005c3b000104300000174701000041000000000013043500000004013000390000002002000039000000000021043500000024023000390000000001090019000a00000003001d5c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000019aa0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000019a20000413d000000000504004b000019b90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000019d00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000019c80000413d000000000504004b000019df0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000019f60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000019ee0000413d000000000504004b00001a050000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200001a1c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001a140000413d000000000503004b00001a2b0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000a00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000a0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001a6a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001a620000413d000000000504004b00001a790000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001a900000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001a880000413d000000000504004b00001a9f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001ab60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001aae0000413d000000000504004b00001ac50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00001add0000c13d000000010300003100001b0e0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001afb0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001af30000413d000000000604004b00001b0a0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000001cfb0000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00001ccc0000213d000000010110019000001ccc0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00001cca0000613d00000000050904330000173e0150009c00001cca0000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00001b350000c13d000000010300003100001b6b0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001b560000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001b4e0000413d000000000604004b00001b650000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900001d210000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00001ccc0000213d000000010110019000001ccc0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00001cca0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00001cca0000c13d000000000201004b00001be50000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00001b940000c13d000000010300003100001bc60000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001bb30000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bab0000413d000000000604004b00001bc20000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000001d930000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00001ccc0000213d000000010110019000001ccc0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00001cca0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900001cca0000c13d0000174e0290009c00001ccc0000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b00001cd20000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00001c010000c13d000000010300003100001c340000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001c200000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001c180000413d000000000604004b00001c2f0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900001d470000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c00001ccc0000213d000000010110019000001ccc0000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00001cca0000c13d0000175d0160009c00001ccc0000213d0000002001600039000000400010043f000000000209043300000000002604350000000501000029000000000101004b00001c640000613d000000400100043d0000174e0310009c00001ccc0000213d0000004003100039000000400030043f000000200310003900001776040000410000000000430435000000020300003900000000003104350000175e0220019800001ce70000613d000000000106043300001760011001c700001c650000013d0000177701200197000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f00000002030000290000000304000029000000010220019000001cca0000613d000000000101043b000000000101004b00001cca0000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00001c870000c13d000000010400003100001c9b0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000001d6d0000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00001ccc0000213d000000010220019000001ccc0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00001cca0000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d020000390000000203000039000017780400004100000004050000295c395c2a0000040f000000010120019000001cca0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001d080000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001d000000413d000000000504004b00001d170000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001d2e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001d260000413d000000000504004b00001d3d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001d540000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001d4c0000413d000000000504004b00001d630000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200001d7a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001d720000413d000000000503004b00001d890000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001da00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001d980000413d000000000504004b00001daf0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00001dc70000c13d000000010300003100001df80000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001de50000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001ddd0000413d000000000604004b00001df40000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000001fc30000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00001fa80000213d000000010110019000001fa80000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00001fa60000613d00000000050904330000173e0150009c00001fa60000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00001e1f0000c13d000000010300003100001e550000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001e400000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001e380000413d000000000604004b00001e4f0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900001fe90000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00001fa80000213d000000010110019000001fa80000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00001fa60000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00001fa60000c13d000000000201004b00001ecf0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00001e7e0000c13d000000010300003100001eb00000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001e9d0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001e950000413d000000000604004b00001eac0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000205b0000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00001fa80000213d000000010110019000001fa80000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00001fa60000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900001fa60000c13d0000174e0290009c00001fa80000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b00001fae0000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00001eeb0000c13d000000010300003100001f1e0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200001f0a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001f020000413d000000000604004b00001f190000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003050000290000200f0000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c00001fa80000213d000000010110019000001fa80000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00001fa60000c13d0000175d0160009c00001fa80000213d0000002001600039000000400010043f00001779010000410000000502000029000000000202004b000000000100601900000000020904330000177a02200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f00000002030000290000000304000029000000010220019000001fa60000613d000000000101043b000000000101004b00001fa60000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00001f630000c13d000000010400003100001f770000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000020350000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00001fa80000213d000000010220019000001fa80000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00001fa60000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d0200003900000002030000390000177b0400004100000004050000295c395c2a0000040f000000010120019000001fa60000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001fd00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001fc80000413d000000000504004b00001fdf0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200001ff60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001fee0000413d000000000504004b000020050000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000201c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000020140000413d000000000504004b0000202b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000020420000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000203a0000413d000000000503004b000020510000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000020680000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000020600000413d000000000504004b000020770000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300005000000000002000400000002001d000300000001001d0000003401000039000200000001001d000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c000020900000c13d0000000103000031000020c10000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700050000000a001d5c395c2f0000040f000000050a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000020ae0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000020a60000413d000000000604004b000020bd0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000022f60000613d0000001f01300039000000200200008a000500000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000022dc0000213d0000000101100190000022dc0000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000022da0000613d00000000020a04330000173e0120009c000022da0000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000020e80000c13d0000000103000031000021190000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000021060000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000020fe0000413d000000000604004b000021150000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000231c0000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000022dc0000213d0000000102200190000022dc0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000022da0000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b000022da0000c13d0000174e0310009c000022dc0000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000000202004b000022e20000613d0000000401000029000000000101004b000021480000613d00000003010000290000173e061001970000220f0000013d0000000201000029000000000201041a000000400a00043d000017690100004100000000001a043500000000010004140000173e02200197000000040320008c000021530000c13d0000000103000031000021840000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000021710000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000021690000413d000000000604004b000021800000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000023a20000613d0000001f013000390000000502000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000022dc0000213d0000000101100190000022dc0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000022da0000c13d00000000020a04330000173e0120009c000022da0000213d0000176a01000041000000000719043600000003010000290000173e06100197000000040190003900000000006104350000000001000414000000040320008c000021aa0000c13d0000000103000031000021df0000013d000100000007001d000300000006001d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000001800430008c000001800500003900000000050340190000001f0450018f0000000505500272000021ca0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000021c20000413d000000000604004b000021d90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003060000290000000107000029000023c80000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000022dc0000213d0000000102200190000022dc0000c13d000000400010043f0000173b020000410000000103000031000001800430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000022da0000c13d000001600290003900000000020204330000176b0220009c000022da0000213d00000040029000390000000002020433000000000202004b0000000002000019000022040000c13d0000000002070433000000000202004b000000000200001900000001020060390000174e0310009c000022dc0000213d0000004003100039000000400030043f00000020031000390000176c0400004100000000004304350000000203000039000000000031043500000001022001900000238e0000613d0000003501000039000000000201041a000000400900043d0000175c0100004100000000001904350000000401900039000000000061043500000000010004140000173e05200197000000040250008c000300000006001d000200000005001d0000221e0000c13d0000000103000031000022520000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000223d0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000022350000413d000000000604004b0000224c0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003060000290000000205000029000023420000613d0000001f013000390000000502000029000000000121016f0000000007910019000000000117004b000000000100001900000001010040390000173d0270009c000022dc0000213d0000000101100190000022dc0000c13d000000400070043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000022da0000c13d0000175d0170009c000022dc0000213d0000002001700039000000400010043f0000177c010000410000000402000029000000000202004b000000000100601900000000020904330000177d02200197000000000112019f000000000017043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000100000007001d5c395c2f0000040f0000000103000029000000020400002900000003050000290000000102200190000022da0000613d000000000101043b000000000101004b000022da0000613d000000400600043d00001762010000410000000000160435000000040160003900000000005104350000000001030433000000240260003900000000001204350000000001000414000000040240008c000022970000c13d0000000104000031000022ac0000013d0000171002000041000017100310009c0000000001028019000017100360009c00000000020640190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000200000006001d5c395c2a0000040f0000000206000029000000030500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000023680000613d0000001f014000390000000502000029000000000221016f0000000001620019000000000221004b000000000200001900000001020040390000173d0310009c000022dc0000213d0000000102200190000022dc0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000603004b000000000200a0190000173b0330009c000000000204c019000000000202004b000022da0000c13d0000000402000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d0200003900000002030000390000177e040000415c395c2a0000040f0000000101200190000022da0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400400043d000500000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000050400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000023030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000022fb0000413d000000000504004b000023120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000023290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000023210000413d000000000504004b000023380000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000234f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000023470000413d000000000504004b0000235e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000023750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000236d0000413d000000000503004b000023840000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400400043d000500000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000050400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000023af0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000023a70000413d000000000504004b000023be0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000023d50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000023cd0000413d000000000504004b000023e40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000023fc0000c13d00000001030000310000242d0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000241a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024120000413d000000000604004b000024290000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000025f80000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000025dd0000213d0000000101100190000025dd0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000025db0000613d00000000050904330000173e0150009c000025db0000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000024540000c13d00000001030000310000248a0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000024750000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000246d0000413d000000000604004b000024840000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900000001060000290000261e0000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000025dd0000213d0000000101100190000025dd0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000025db0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000025db0000c13d000000000201004b000025040000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c000024b30000c13d0000000103000031000024e50000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000024d20000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024ca0000413d000000000604004b000024e10000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000026900000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000025dd0000213d0000000101100190000025dd0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000025db0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000025db0000c13d0000174e0290009c000025dd0000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000025e30000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d000025200000c13d0000000103000031000025530000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000253f0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000025370000413d000000000604004b0000254e0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000026440000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c000025dd0000213d0000000101100190000025dd0000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000025db0000c13d0000175d0160009c000025dd0000213d0000002001600039000000400010043f0000177f010000410000000502000029000000000202004b000000000100601900000000020904330000178002200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f000000020300002900000003040000290000000102200190000025db0000613d000000000101043b000000000101004b000025db0000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000025980000c13d0000000104000031000025ac0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d0000171004300197000300000001035500000001022001900000266a0000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000025dd0000213d0000000102200190000025dd0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000025db0000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d020000390000000203000039000017810400004100000004050000295c395c2a0000040f0000000101200190000025db0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000026050000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000025fd0000413d000000000504004b000026140000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000262b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000026230000413d000000000504004b0000263a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000026510000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000026490000413d000000000504004b000026600000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000026770000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000266f0000413d000000000503004b000026860000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000269d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000026950000413d000000000504004b000026ac0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000026c40000c13d0000000103000031000026f50000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000026e20000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000026da0000413d000000000604004b000026f10000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000028c20000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000028a70000213d0000000101100190000028a70000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000028a50000613d00000000050904330000173e0150009c000028a50000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c0000271c0000c13d0000000103000031000027520000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000273d0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000027350000413d000000000604004b0000274c0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003050000290000000106000029000028e80000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000028a70000213d0000000101100190000028a70000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000028a50000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000028a50000c13d000000000201004b000027cc0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c0000277b0000c13d0000000103000031000027ad0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000279a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000027920000413d000000000604004b000027a90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000295a0000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000028a70000213d0000000101100190000028a70000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000028a50000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000028a50000c13d0000174e0290009c000028a70000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000028ad0000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d000027e80000c13d00000001030000310000281b0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000028070000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000027ff0000413d000000000604004b000028160000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003050000290000290e0000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c000028a70000213d0000000101100190000028a70000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000028a50000c13d0000175d0160009c000028a70000213d0000002001600039000000400010043f00001782010000410000000502000029000000000202004b000000000100601900000000020904330000178302200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f000000020300002900000003040000290000000102200190000028a50000613d000000000101043b000000000101004b000028a50000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000028600000c13d0000000104000031000028740000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000029340000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000028a70000213d0000000102200190000028a70000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000028a50000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000200310003900000000002304350000000402000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d02000039000000010300003900001785040000415c395c2a0000040f0000000101200190000028a50000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000028cf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000028c70000413d000000000504004b000028de0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000028f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000028ed0000413d000000000504004b000029040000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000291b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000029130000413d000000000504004b0000292a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000029410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000029390000413d000000000503004b000029500000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000029670000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000295f0000413d000000000504004b000029760000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c0000298e0000c13d0000000103000031000029bf0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000029ac0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000029a40000413d000000000604004b000029bb0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000002b8a0000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00002b6f0000213d000000010110019000002b6f0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00002b6d0000613d00000000050904330000173e0150009c00002b6d0000213d0000174d0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000029e60000c13d000000010300003100002a1c0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002a070000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000029ff0000413d000000000604004b00002a160000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900002bb00000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00002b6f0000213d000000010110019000002b6f0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00002b6d0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00002b6d0000c13d000000000201004b00002a960000c13d00001786010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00002a450000c13d000000010300003100002a770000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002a640000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a5c0000413d000000000604004b00002a730000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000002c220000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00002b6f0000213d000000010110019000002b6f0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00002b6d0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900002b6d0000c13d0000174e0290009c00002b6f0000213d0000004002900039000000400020043f00000020029000390000178703000041000000000032043500000001020000390000000000290435000000000101004b00002b750000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00002ab20000c13d000000010300003100002ae50000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002ad10000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002ac90000413d000000000604004b00002ae00000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900002bd60000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c00002b6f0000213d000000010110019000002b6f0000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00002b6d0000c13d0000175d0160009c00002b6f0000213d0000002001600039000000400010043f00001788010000410000000502000029000000000202004b000000000100601900000000020904330000178902200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f00000002030000290000000304000029000000010220019000002b6d0000613d000000000101043b000000000101004b00002b6d0000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00002b2a0000c13d000000010400003100002b3e0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000002bfc0000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00002b6f0000213d000000010220019000002b6f0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00002b6d0000c13d0000000502000029000000000202004b0000000002000019000000010200c039000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d0200003900000002030000390000178a0400004100000004050000295c395c2a0000040f000000010120019000002b6d0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002b970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002b8f0000413d000000000504004b00002ba60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002bbd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002bb50000413d000000000504004b00002bcc0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002be30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002bdb0000413d000000000504004b00002bf20000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200002c090000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00002c010000413d000000000503004b00002c180000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002c2f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002c270000413d000000000504004b00002c3e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00002c560000c13d000000010300003100002c870000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002c740000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002c6c0000413d000000000604004b00002c830000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000002e810000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00002e520000213d000000010110019000002e520000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00002e500000613d00000000050904330000173e0150009c00002e500000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00002cae0000c13d000000010300003100002ce40000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002ccf0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002cc70000413d000000000604004b00002cde0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900002ea70000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00002e520000213d000000010110019000002e520000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00002e500000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00002e500000c13d000000000201004b00002d5e0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00002d0d0000c13d000000010300003100002d3f0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002d2c0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002d240000413d000000000604004b00002d3b0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000002f190000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00002e520000213d000000010110019000002e520000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00002e500000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900002e500000c13d0000174e0290009c00002e520000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000400300043d000000000101004b00002e580000613d0000174e0130009c00002e520000213d0000004001300039000000400010043f00000020013000390000178b020000410000000000210435000000020600003900000000006304350000000501000029000027110110008c00002e6c0000813d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00002d870000c13d000000010300003100002dbc0000013d000200000006001d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002da70000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002d9f0000413d000000000604004b00002db60000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000020600002900002ecd0000613d0000001f013000390000000602000029000000000121016f0000000007910019000000000117004b000000000100001900000001010040390000173d0270009c00002e520000213d000000010110019000002e520000c13d000000400070043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00002e500000c13d0000175d0170009c00002e520000213d0000002001700039000000400010043f0000000001090433000100000001001d0000000000170435000000400100043d0000174e0210009c00002e520000213d0000004002100039000000400020043f00000020021000390000178b03000041000000000032043500000000006104350000000501000029000000400110021000000000020704330000178c02200197000000000112019f000000000017043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000007001d5c395c2f0000040f00000002030000290000000304000029000000010220019000002e500000613d000000000101043b000000000101004b00002e500000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00002e0b0000c13d000000010400003100002e1f0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000002ef30000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00002e520000213d000000010220019000002e520000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00002e500000c13d000000010200002900000040022002700000ffff0220018f000000200310003900000005040000290000000000430435000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d0200003900000002030000390000178d0400004100000004050000295c395c2a0000040f000000010120019000002e500000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b000104300000174701000041000000000013043500000004013000390000002002000039000000000021043500000024023000390000000001090019000600000003001d5c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002e8e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002e860000413d000000000504004b00002e9d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002eb40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002eac0000413d000000000504004b00002ec30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002eda0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002ed20000413d000000000504004b00002ee90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200002f000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00002ef80000413d000000000503004b00002f0f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200002f260000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00002f1e0000413d000000000504004b00002f350000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b0001043000090000000000020000000004020019000700000001001d0000003401000039000300000001001d000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000800000004001d00002f4f0000c13d000000010300003100002f800000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000900000009001d5c395c2f0000040f0000000909000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002f6d0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002f650000413d000000000604004b00002f7c0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000032870000613d0000001f01300039000000200200008a000900000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000032580000213d0000000101100190000032580000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000032560000613d00000000050904330000173e0150009c000032560000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00002fa70000c13d000000010300003100002fdd0000013d000400000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000600000005001d000000000205001900050000000a001d5c395c2f0000040f000000050a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200002fc80000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002fc00000413d000000000604004b00002fd70000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000006050000290000000406000029000032ad0000613d0000001f013000390000000902000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000032580000213d0000000101100190000032580000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000032560000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000032560000c13d000000000201004b000030570000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c000030060000c13d0000000103000031000030380000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000030250000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000301d0000413d000000000604004b000030340000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000033330000613d0000001f013000390000000902000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000032580000213d0000000101100190000032580000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000032560000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000032560000c13d0000174e0290009c000032580000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b0000325e0000613d0000003501000039000200000001001d000000000201041a000000400900043d0000175c01000041000000000019043500000007010000290000173e031001970000000401900039000700000003001d000000000031043500000000010004140000173e06200197000000040260008c000600000006001d000030740000c13d0000000103000031000030a70000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002060019000500000009001d5c395c2f0000040f0000000509000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000030930000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000308b0000413d000000000604004b000030a20000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000606000029000032d30000613d0000001f013000390000000902000029000000000121016f0000000007910019000000000117004b000000000100001900000001010040390000173d0270009c000032580000213d0000000101100190000032580000c13d000000400070043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000032560000c13d0000175d0170009c000032580000213d0000002001700039000000400010043f00000000010904330000000000170435000000d4011002700000176b01100198000400000001001d000500000007001d000031920000c13d0000000301000029000000000201041a000000400a00043d000017690100004100000000001a043500000000010004140000173e02200197000000040320008c000030d50000c13d0000000103000031000031080000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700030000000a001d5c395c2f0000040f000000030a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000030f30000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000030eb0000413d000000000604004b000031020000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000006060000290000000507000029000033590000613d0000001f013000390000000902000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000032580000213d0000000101100190000032580000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000032560000c13d00000000020a04330000173e0120009c000032560000213d0000176a0100004100000000081904360000000401900039000000070300002900000000003104350000000001000414000000040320008c0000312d0000c13d0000000103000031000031620000013d000100000008001d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000001800430008c000001800500003900000000050340190000001f0450018f00000005055002720000314c0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031440000413d000000000604004b0000315b0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000606000029000000050700002900000001080000290000337f0000613d0000001f013000390000000902000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000032580000213d0000000102200190000032580000c13d000000400010043f0000173b020000410000000103000031000001800430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000032560000c13d000001600290003900000000020204330000176b0220009c000032560000213d00000040029000390000000002020433000000000202004b0000000002000019000031870000c13d0000000002080433000000000202004b000000000200001900000001020060390000174e0310009c000032580000213d0000004003100039000000400030043f00000020031000390000176c0400004100000000004304350000000203000039000000000031043500000001022001900000331f0000613d000000400100043d0000174e0210009c000032580000213d0000004002100039000000400020043f00000020021000390000178e0300004100000000003204350000000202000039000000000021043500000008030000290000178f0230009c000032730000813d000000d40130021000000000020704330000179002200197000000000112019f000000000017043500001743010000410000000000100439000000040060044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f000000050300002900000006040000290000000102200190000032560000613d000000000101043b000000000101004b000032560000613d000000400500043d000017620100004100000000001504350000000401500039000000070200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000031c40000c13d0000000104000031000031d80000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000600000005001d5c395c2a0000040f000000060500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000032f90000613d0000001f014000390000000902000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000032580000213d0000000102200190000032580000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000032560000c13d0000000802000029000000000202004b0000323f0000c13d0000000201000029000000000101041a000017430200004100000000002004390000173e01100197000600000001001d000000040010044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f0000000102200190000032560000613d000000000101043b000000000101004b000032560000613d000000400500043d0000179101000041000000000015043500000004015000390000000702000029000000000021043500000000010004140000000602000029000000040320008c000032130000c13d0000000104000031000032270000013d0000171004000041000017100310009c0000000001048019000017100350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f0000174a011001c7000600000005001d5c395c2a0000040f000000060500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000033a50000613d0000001f014000390000000902000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000032580000213d0000000102200190000032580000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000032560000c13d0000002002100039000000080300002900000000003204350000000402000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000203000039000017920400004100000007050000295c395c2a0000040f0000000101200190000032560000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000900000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000090400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000900000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000090400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000032940000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000328c0000413d000000000504004b000032a30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000032ba0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000032b20000413d000000000504004b000032c90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000032e00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000032d80000413d000000000504004b000032ef0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000033060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000032fe0000413d000000000503004b000033150000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400400043d000900000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000090400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000033400000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000033380000413d000000000504004b0000334f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000033660000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000335e0000413d000000000504004b000033750000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000338c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000033840000413d000000000504004b0000339b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000033b20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000033aa0000413d000000000503004b000033c10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300007000000000002000600000002001d000500000001001d0000003401000039000400000001001d000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000033da0000c13d00000001030000310000340b0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000700000009001d5c395c2f0000040f0000000709000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000033f80000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000033f00000413d000000000604004b000034070000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000036ae0000613d0000001f01300039000000200200008a000700000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c0000367f0000213d00000001011001900000367f0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b0000367d0000613d00000000050904330000173e0150009c0000367d0000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000034320000c13d0000000103000031000034680000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000034530000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000344b0000413d000000000604004b000034620000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003050000290000000106000029000036d40000613d0000001f013000390000000702000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000367f0000213d00000001011001900000367f0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000367d0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b0000367d0000c13d000000000201004b000034e20000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c000034910000c13d0000000103000031000034c30000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000034b00000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000034a80000413d000000000604004b000034bf0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000037920000613d0000001f013000390000000702000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c0000367f0000213d00000001011001900000367f0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b0000367d0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b00000000090200190000367d0000c13d0000174e0290009c0000367f0000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000036850000613d0000000601000029000000000101004b000034fb0000613d0000000401000029000000000201041a000000400a00043d000017690100004100000000001a043500000000010004140000173e02200197000000040320008c000034fe0000c13d00000001030000310000352f0000013d00000005010000290000173e06100197000035ac0000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700040000000a001d5c395c2f0000040f000000040a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000351c0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000035140000413d000000000604004b0000352b0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000037460000613d0000001f013000390000000702000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000367f0000213d00000001011001900000367f0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000367d0000c13d00000000020a04330000173e0120009c0000367d0000213d0000179301000041000000000019043500000005010000290000173e06100197000000040190003900000000006104350000000001000414000000040320008c000035550000c13d0000000103000031000035880000013d000500000006001d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000400000009001d5c395c2f0000040f0000000409000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000035740000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000356c0000413d000000000604004b000035830000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000005060000290000376c0000613d0000001f013000390000000702000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c0000367f0000213d00000001022001900000367f0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000367d0000c13d0000174e0210009c0000367f0000213d00000000020904330000004003100039000000400030043f00000020031000390000179404000041000000000043043500000002030000390000000000310435000000000202004b0000369a0000c13d0000003501000039000000000201041a000000400900043d0000175c0100004100000000001904350000000401900039000000000061043500000000010004140000173e05200197000000040250008c000500000006001d000400000005001d000035bb0000c13d0000000103000031000035ef0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000035da0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000035d20000413d000000000604004b000035e90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000005060000290000000405000029000036fa0000613d0000001f013000390000000702000029000000000121016f0000000007910019000000000117004b000000000100001900000001010040390000173d0270009c0000367f0000213d00000001011001900000367f0000c13d000000400070043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000367d0000c13d0000175d0170009c0000367f0000213d0000002001700039000000400010043f00001795010000410000000602000029000000000202004b00000000010060190000000002090433000200000002001d0000179602200197000000000112019f000000000017043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000300000007001d5c395c2f0000040f00000003030000290000000404000029000000050500002900000001022001900000367d0000613d000000000101043b000000000101004b0000367d0000613d000000400600043d00001762010000410000000000160435000000040160003900000000005104350000000001030433000000240260003900000000001204350000000001000414000000040240008c000036350000c13d00000001040000310000364a0000013d0000171002000041000017100310009c0000000001028019000017100360009c00000000020640190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000400000006001d5c395c2a0000040f0000000406000029000000050500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000037200000613d0000001f014000390000000702000029000000000221016f0000000001620019000000000221004b000000000200001900000001020040390000173d0310009c0000367f0000213d00000001022001900000367f0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000603004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000367d0000c13d0000000602000029000000000202004b0000000002000019000000010200c0390000002003100039000000000023043500000002020000290000003e02200270000000010220018f000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d02000039000000020300003900001797040000415c395c2a0000040f00000001012001900000367d0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000700000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000070400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000700000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000070400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000036bb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000036b30000413d000000000504004b000036ca0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000036e10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000036d90000413d000000000504004b000036f00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000037070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000036ff0000413d000000000504004b000037160000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f00000005044002720000372d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000037250000413d000000000503004b0000373c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000037530000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000374b0000413d000000000504004b000037620000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000037790000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000037710000413d000000000504004b000037880000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000379f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000037970000413d000000000504004b000037ae0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000037c60000c13d0000000103000031000037f70000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000037e40000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000037dc0000413d000000000604004b000037f30000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000039e50000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000039b60000213d0000000101100190000039b60000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000039b40000613d00000000050904330000173e0150009c000039b40000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c0000381e0000c13d0000000103000031000038540000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000383f0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000038370000413d000000000604004b0000384e0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900003a0b0000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000039b60000213d0000000101100190000039b60000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000039b40000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000039b40000c13d000000000201004b000038ce0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c0000387d0000c13d0000000103000031000038af0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000389c0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000038940000413d000000000604004b000038ab0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000003a7d0000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000039b60000213d0000000101100190000039b60000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000039b40000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000039b40000c13d0000174e0290009c000039b60000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000039bc0000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d000038ea0000c13d00000001030000310000391d0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000039090000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000039010000413d000000000604004b000039180000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900003a310000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c000039b60000213d0000000101100190000039b60000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000039b40000c13d0000175d0160009c000039b60000213d0000002001600039000000400010043f0000000001090433000000000016043500000050011002700000179801100197000100000001001d000000400100043d0000174e0210009c000039b60000213d0000004002100039000000400020043f0000002002100039000017990300004100000000003204350000000202000039000000000021043500000005030000290000179a0230009c000039d10000813d000000500130021000000000020604330000179b02200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f000000020300002900000003040000290000000102200190000039b40000613d000000000101043b000000000101004b000039b40000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c000039710000c13d0000000104000031000039850000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000003a570000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000039b60000213d0000000102200190000039b60000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000039b40000c13d0000002002100039000000050300002900000000003204350000000102000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d0200003900000002030000390000179c0400004100000004050000295c395c2a0000040f0000000101200190000039b40000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000039f20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000039ea0000413d000000000504004b00003a010000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003a180000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003a100000413d000000000504004b00003a270000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003a3e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003a360000413d000000000504004b00003a4d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200003a640000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00003a5c0000413d000000000503004b00003a730000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003a8a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003a820000413d000000000504004b00003a990000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00003ab10000c13d000000010300003100003ae20000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003acf0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003ac70000413d000000000604004b00003ade0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000003cd00000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00003ca10000213d000000010110019000003ca10000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00003c9f0000613d00000000050904330000173e0150009c00003c9f0000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00003b090000c13d000000010300003100003b3f0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003b2a0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003b220000413d000000000604004b00003b390000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900003cf60000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00003ca10000213d000000010110019000003ca10000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00003c9f0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00003c9f0000c13d000000000201004b00003bb90000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00003b680000c13d000000010300003100003b9a0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003b870000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003b7f0000413d000000000604004b00003b960000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000003d680000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00003ca10000213d000000010110019000003ca10000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00003c9f0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900003c9f0000c13d0000174e0290009c00003ca10000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b00003ca70000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00003bd50000c13d000000010300003100003c080000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003bf40000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003bec0000413d000000000604004b00003c030000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900003d1c0000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c00003ca10000213d000000010110019000003ca10000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00003c9f0000c13d0000175d0160009c00003ca10000213d0000002001600039000000400010043f0000000001090433000000000016043500000074011002700000179801100197000100000001001d000000400100043d0000174e0210009c00003ca10000213d0000004002100039000000400020043f00000020021000390000179d0300004100000000003204350000000202000039000000000021043500000005030000290000179a0230009c00003cbc0000813d000000740130021000000000020604330000179e02200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f00000002030000290000000304000029000000010220019000003c9f0000613d000000000101043b000000000101004b00003c9f0000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00003c5c0000c13d000000010400003100003c700000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000003d420000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00003ca10000213d000000010220019000003ca10000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00003c9f0000c13d0000002002100039000000050300002900000000003204350000000102000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d0200003900000002030000390000179f0400004100000004050000295c395c2a0000040f000000010120019000003c9f0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003cdd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003cd50000413d000000000504004b00003cec0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003d030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003cfb0000413d000000000504004b00003d120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003d290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003d210000413d000000000504004b00003d380000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200003d4f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00003d470000413d000000000503004b00003d5e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003d750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003d6d0000413d000000000504004b00003d840000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00003d9c0000c13d000000010300003100003dcd0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003dba0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003db20000413d000000000604004b00003dc90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000003fc70000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00003f980000213d000000010110019000003f980000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00003f960000613d00000000050904330000173e0150009c00003f960000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00003df40000c13d000000010300003100003e2a0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003e150000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003e0d0000413d000000000604004b00003e240000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900003fed0000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00003f980000213d000000010110019000003f980000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00003f960000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00003f960000c13d000000000201004b00003ea40000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00003e530000c13d000000010300003100003e850000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003e720000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003e6a0000413d000000000604004b00003e810000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000405f0000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00003f980000213d000000010110019000003f980000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00003f960000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900003f960000c13d0000174e0290009c00003f980000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000400300043d000000000101004b00003f9e0000613d0000174e0130009c00003f980000213d0000004001300039000000400010043f0000002001300039000017a0020000410000000000210435000000020600003900000000006304350000000501000029000027110110008c00003fb20000813d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00003ecd0000c13d000000010300003100003f020000013d000200000006001d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200003eed0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00003ee50000413d000000000604004b00003efc0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000003050000290000000206000029000040130000613d0000001f013000390000000602000029000000000121016f0000000007910019000000000117004b000000000100001900000001010040390000173d0270009c00003f980000213d000000010110019000003f980000c13d000000400070043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00003f960000c13d0000175d0170009c00003f980000213d0000002001700039000000400010043f0000000001090433000100000001001d0000000000170435000000400100043d0000174e0210009c00003f980000213d0000004002100039000000400020043f0000002002100039000017a00300004100000000003204350000000000610435000000050100002900000098011002100000000002070433000017a102200197000000000112019f000000000017043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000007001d5c395c2f0000040f00000002030000290000000304000029000000010220019000003f960000613d000000000101043b000000000101004b00003f960000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00003f510000c13d000000010400003100003f650000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000040390000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00003f980000213d000000010220019000003f980000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00003f960000c13d000000010200002900000098022002700000ffff0220018f000000200310003900000005040000290000000000430435000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000203000039000017a20400004100000004050000295c395c2a0000040f000000010120019000003f960000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b000104300000174701000041000000000013043500000004013000390000002002000039000000000021043500000024023000390000000001090019000600000003001d5c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003fd40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003fcc0000413d000000000504004b00003fe30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200003ffa0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00003ff20000413d000000000504004b000040090000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000040200000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000040180000413d000000000504004b0000402f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000040460000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000403e0000413d000000000503004b000040550000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000406c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000040640000413d000000000504004b0000407b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300010000000000002000600000007001d000400000006001d000300000005001d000d00000004001d000e00000003001d000f00000002001d001000000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000040980000c13d0000000103000031000040c90000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000c00000009001d5c395c2f0000040f0000000c09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000040b60000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000040ae0000413d000000000604004b000040c50000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000044f90000613d0000001f01300039000000200800008a000000000181016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c0000443d0000213d00000001011001900000443d0000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000044430000613d00000000050904330000173e0150009c000044430000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000c00000008001d000040f00000c13d0000000103000031000041270000013d000900000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000b00000005001d0000000002050019000a0000000a001d5c395c2f0000040f0000000a0a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000041110000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000041090000413d000000000604004b0000000c08000029000041210000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000b0500002900000009060000290000451f0000613d0000001f01300039000000000181016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000443d0000213d00000001011001900000443d0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000044430000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000044430000c13d000000000201004b000041a00000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c0000414f0000c13d0000000103000031000041820000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000b00000009001d5c395c2f0000040f0000000b09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000416e0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000041660000413d000000000604004b0000000c080000290000417e0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000045910000613d0000001f01300039000000000181016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c0000443d0000213d00000001011001900000443d0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000044430000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000044430000c13d0000174e0290009c0000443d0000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b0000447e0000613d000000400100043d0000174e0210009c0000443d0000213d0000000f020000290000ffff02200190000900000002001d0000004002100039000000400020043f0000002002100039000017a30300004100000000003204350000000202000039000f00000002001d0000000000210435000044930000613d000000400100043d0000174e0210009c0000443d0000213d0000000e020000290000ffff02200190000b00000002001d0000004002100039000000400020043f0000002002100039000017a30300004100000000003204350000000f020000290000000000210435000000400300043d000044a70000613d0000174e0130009c0000443d0000213d0000004001300039000000400010043f0000002001300039000017a30200004100000000002104350000000f01000029000000000013043500000009010000290000000b02000029000000000121004b000044bb0000213d000000400100043d0000174e0210009c0000443d0000213d0000000d020000290000ffff0420018f0000004002100039000000400020043f0000002002100039000017a30300004100000000003204350000000f020000290000000000210435000000400300043d000500000004001d000027100240008c000044d00000a13d0000174e0130009c0000443d0000213d0000004001300039000000400010043f0000002001300039000017a30200004100000000002104350000000f0100002900000000001304350000000b01000029000000050200002900000000211200a900001767011000410000171001100197000017a40110009c000044e40000a13d0000003501000039000000000201041a000000400700043d000017a501000041000000000017043500000000010004140000173e09200197000000040290008c000a00000009001d000042030000c13d00000003010003670000000104000031000042190000013d0000171002000041000017100310009c0000000001028019000017100370009c00000000020740190000004002200210000000c001100210000000000121019f00001742011001c70000000002090019000e00000007001d5c395c2f0000040f0000000e070000290000000a090000290000000c0800002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000045450000613d0000001f0240018f0000000503400272000042250000613d000000000400001900000005054002100000000006570019000000000551034f000000000505043b00000000005604350000000104400039000000000534004b0000421d0000413d000000000402004b000042340000613d0000000503300210000000000131034f00000000033700190000000302200210000000000403043300000000042401cf000000000424022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000141019f00000000001304350000001f010000390000000101100031000000000181016f000000000a71001900000000011a004b000000000100001900000001010040390000173d02a0009c0000443d0000213d00000001011001900000443d0000c13d0000004000a0043f0000173b020000410000000101000031000000200310008c000000000300001900000000030240190000173b04100197000000000504004b000000000200a0190000173b0440009c000000000203c019000000000202004b000044430000c13d00000000030704330000173d0230009c000044430000213d000000000271001900000000017300190000001f031000390000173b04000041000000000523004b000000000500001900000000050480190000173b033001970000173b06200197000000000763004b0000000004008019000000000363013f0000173b0330009c00000000030500190000000003046019000000000303004b000044430000c13d00000000130104340000173d0430009c0000443d0000213d00000005043002100000003f05400039000000000585016f0000000005a500190000173d0650009c0000443d0000213d000000400050043f00000000063a04360000000004140019000000000224004b000044430000213d000000000241004b00080000000a001d000700000006001d0000427b0000813d00000000020a001900000000130104340000173e0530009c000044430000213d00000020022000390000000000320435000000000341004b000042730000413d00000000030a0433000000000103004b0000431d0000613d0000000007000019000042830000013d000000010770003900000000010a0433000000000117004b0000431d0000813d000000050170021000000000011600190000000001010433000000400b00043d0000175c0200004100000000002b04350000173e011001970000000402b0003900000000001204350000000001000414000000040290008c000042910000c13d0000000103000031000042c80000013d000e00000007001d0000171002000041000017100310009c00000000010280190000171003b0009c00000000020b40190000004002200210000000c001100210000000000121019f0000174a011001c70000000002090019000d0000000b001d5c395c2f0000040f0000000d0b000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000000504500272000042b00000613d0000000006000019000000050760021000000000087b0019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000042a80000413d0000001f055001900000000c08000029000042c00000613d0000000504400210000000000641034f00000000044b00190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000a09000029000000080a00002900000007060000290000000e07000029000044450000613d0000001f01300039000000000181016f0000000002b10019000000000112004b000000000100001900000001010040390000173d0320009c0000443d0000213d00000001011001900000443d0000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000044430000c13d0000175d0120009c0000443d0000213d0000002001200039000000400010043f00000000030b04330000000000320435000000a8013002700000001004000029000000000141013f000000ff011001900000427f0000c13d000000400100043d0000174e0410009c0000443d0000213d0000004004100039000000400040043f0000002004100039000017a30500004100000000005404350000000f040000290000000000410435000000400500043d0000ffff0330018f0000000904000029000000000334004b0000446b0000a13d0000174e0150009c0000443d0000213d00000000010204330000004002500039000000400020043f0000002002500039000017a30300004100000000003204350000000f02000029000000000025043500000010011002700000ffff0110018f0000000b02000029000000000112004b0000427f0000213d000000400300043d001000000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010500195c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400a00043d000017a601a0009c0000443d0000213d000000a001a00039000000400010043f0000004006a0003900000005010000290000000000160435000000200ca000390000000b0100002900000000001c0435000000090100002900000000001a043500000003010000290000173e01100197000000600ba00039000700000001001d00000000001b0435000000000300003100000006010000290000173d0110009c0000443d0000213d00000006010000290000003f01100039000000000281016f000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000173d0520009c0000443d0000213d00000001044001900000443d0000c13d000800000006001d000000400020043f0000000604000029000000000241043600000004050000290000000004540019000000000334004b000044430000213d00000006040000290000001f0740018f000000040300002900000002033003670000000508400272000043560000613d000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000584004b0000434e0000413d000d0000000c001d000e0000000b001d000000000407004b000043670000613d0000000504800210000000000343034f00000000044200190000000305700210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000100000008001d000200000007001d0000000603000029000000000232001900000000000204350000008002a00039000300000002001d000000000012043500001743010000410000000000100439000000040090044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000f0000000a001d5c395c2f0000040f0000000f030000290000000a0800002900000001022001900000000c070000290000000e040000290000000d05000029000044430000613d000000000101043b000000000101004b000044430000613d000000400a00043d0000002401a0003900000040020000390000000000210435000017a70100004100000000001a04350000001001000029000000ff0910018f0000000401a00039000000000091043500000000010304330000ffff0110018f0000004402a00039000000000012043500000000010504330000ffff0110018f0000006402a000390000000000120435000000080100002900000000010104330000ffff0110018f0000008402a00039000000000012043500000000010404330000173e01100197000000a402a00039000000000012043500000003010000290000000002010433000000c401a00039000000a00b0000390000000000b10435000000e403a0003900000000010204330000000000130435000000000301004b000043b70000613d0000010403a00039000000000400001900000000053400190000002004400039000000000624001900000000060604330000000000650435000000000514004b000043ac0000413d000000000214004b000043b70000a13d000000000231001900000000000204350000000002000414000000040380008c000043bc0000c13d0000000104000031000043dc0000013d0000001f01100039000000000171016f00001710030000410000171004a0009c000000000403001900000000040a401900000040044002100000010401100039000017100510009c00000000010380190000006001100210000000000141019f000017100420009c0000000002038019000000c002200210000000000112019f0000000002080019001000000009001d000f0000000a001d000e0000000b001d5c395c2a0000040f0000000e0b0000290000000f0a00002900000010090000290000000c0700002900000000030100190000006003300270000117100030019d0000171004300197000300000001035500000001022001900000456b0000613d0000001f01400039000000000271016f0000000001a20019000000000221004b000000000200001900000001020040390000173d0310009c0000443d0000213d00000001022001900000443d0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000044430000c13d00000080021000390000000000b2043500000060021000390000000703000029000000000032043500000040021000390000000503000029000000000032043500000020021000390000000b03000029000000000032043500000009020000290000000000210435000000a00210003900000006030000290000000000320435000000c002100039000000040300002900000002033003670000000108000029000000000408004b000044120000613d000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000584004b0000440a0000413d0000000205000029000000000405004b000044220000613d0000000504800210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000060300002900000000023200190000000000020435000000df02300039000000000272016f0000171003000041000017100410009c00000000010380190000004001100210000017100420009c00000000020380190000006002200210000000000112019f0000000002000414000017100420009c0000000002038019000000c002200210000000000112019f00001755011001c70000800d020000390000000203000039000017a80400004100000000050900195c395c2a0000040f0000000101200190000044430000613d000000000001042d000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000000100001900005c3b00010430000000400200043d0000001f0430018f0000000503300272000044520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000444a0000413d000000000504004b000044610000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000017470200004100000000002504350000000402500039000000200300003900000000003204350000002402500039001000000005001d5c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400300043d001000000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d001000000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b000104300000174702000041000000000023043500000004023000390000000004030019000e00000004001d0000002003000039000000000032043500000024024000395c3915c60000040f0000000e0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d001000000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b000104300000174702000041000000000023043500000004023000390000000004030019000e00000004001d0000002003000039000000000032043500000024024000395c3915c60000040f0000000e0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d001000000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000100400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000045060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000044fe0000413d000000000504004b000045150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000452c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000045240000413d000000000504004b0000453b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000045520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000454a0000413d000000000503004b000045610000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000045780000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000045700000413d000000000503004b000045870000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000459e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000045960000413d000000000504004b000045ad0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000300000002001d000500000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000045c50000c13d0000000103000031000045f60000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000045e30000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000045db0000413d000000000604004b000045f20000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000048b00000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000048810000213d0000000101100190000048810000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b0000487f0000613d00000000050904330000173e0150009c0000487f0000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c0000461d0000c13d0000000103000031000046530000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000400000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000463e0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000046360000413d000000000604004b0000464d0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000004050000290000000106000029000048d60000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000048810000213d0000000101100190000048810000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000487f0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b0000487f0000c13d000000000201004b000046cd0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c0000467c0000c13d0000000103000031000046ae0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000400000009001d5c395c2f0000040f0000000409000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000469b0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000046930000413d000000000604004b000046aa0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000496e0000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000048810000213d0000000101100190000048810000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b0000487f0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b00000000090200190000487f0000c13d0000174e0290009c000048810000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b000048870000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000005010000290000173e031001970000000401900039000500000003001d000000000031043500000000010004140000173e0a2001970000000402a0008c00040000000a001d000046e90000c13d00000001030000310000471c0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c700000000020a0019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000047080000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000047000000413d000000000604004b000047170000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000040a000029000048fc0000613d0000001f013000390000000602000029000000000121016f000000000c91001900000000011c004b000000000100001900000001010040390000173d02c0009c000048810000213d0000000101100190000048810000c13d0000004000c0043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000487f0000c13d0000175d01c0009c000048810000213d0000002001c00039000000400010043f000000000209043300000000002c04350000000301000029000000ff0b10019000030000000b001d00020000000c001d000048090000613d000000400700043d000017a901000041000000000017043500000004017000390000000000b1043500000000010004140000000402a0008c0000474a0000c13d00000003010003670000000104000031000047610000013d0000171002000041000017100310009c0000000001028019000017100370009c00000000020740190000004002200210000000c001100210000000000121019f0000174a011001c700000000020a0019000100000007001d5c395c2f0000040f0000000107000029000000020c000029000000030b000029000000040a00002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000049480000613d0000001f0240018f00000005034002720000476d0000613d000000000400001900000005054002100000000006570019000000000551034f000000000505043b00000000005604350000000104400039000000000534004b000047650000413d000000000402004b0000477c0000613d0000000503300210000000000131034f00000000033700190000000302200210000000000403043300000000042401cf000000000424022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000141019f00000000001304350000001f0100003900000001011000310000000602000029000000000221016f0000000001720019000000000221004b000000000200001900000001020040390000173d0310009c000048810000213d0000000102200190000048810000c13d000000400010043f0000173b030000410000000102000031000000200420008c000000000400001900000000040340190000173b05200197000000000605004b000000000300a0190000173b0550009c000000000304c019000000000303004b0000487f0000c13d00000000040704330000173d0340009c0000487f0000213d0000000003720019000000000474001900000000024300490000173b05000041000000a00620008c000000000600001900000000060540190000173b02200197000000000702004b000000000500a0190000173b0220009c00000000020600190000000002056019000000000202004b0000487f0000c13d000017a60210009c000048810000213d000000a002100039000000400020043f00000000520404340000ffff0620008c0000487f0000213d000000000221043600000000050504330000ffff0650008c0000487f0000213d0000000000520435000000400540003900000000050504330000ffff0650008c0000487f0000213d00000040061000390000000000560435000000600540003900000000050504330000173e0650009c0000487f0000213d00000060061000390000000000560435000000800540003900000000050504330000173d0650009c0000487f0000213d00000000044500190000001f054000390000173b06000041000000000735004b000000000700001900000000070680190000173b055001970000173b08300197000000000985004b0000000006008019000000000585013f0000173b0550009c00000000050700190000000005066019000000000505004b0000487f0000c13d00000000640404340000173d0540009c000048810000213d0000003f054000390000000607000029000000000775016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000173d0970009c000048810000213d0000000108800190000048810000c13d000000400070043f00000000074504360000000008640019000000000338004b0000487f0000213d000000000304004b000047f50000613d000000000300001900000000087300190000000009630019000000000909043300000000009804350000002003300039000000000843004b000047ea0000413d000000000343004b000047f50000a13d0000000003470019000000000003043500000080011000390000000000510435000000400100043d0000174e0310009c000048810000213d00000000030c043300000000020204330000004004100039000000400040043f0000002004100039000017aa050000410000000000540435000000020400003900000000004104350000ffff0220018f00000010033002700000ffff0330018f000000000232004b0000489c0000a13d00000000020c0433000100000002001d000000400100043d0000174e0210009c000048810000213d0000004002100039000000400020043f0000002002100039000017ab03000041000000000032043500000002020000390000000000210435000000a801b0021000000000020c0433000017ac02200197000000000112019f00000000001c0435000017430100004100000000001004390000000400a0044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f00000002030000290000000306000029000000040400002900000001022001900000487f0000613d000000000101043b000000000101004b0000487f0000613d000000400500043d000017620100004100000000001504350000000401500039000000050200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c0000483a0000c13d00000001040000310000484f0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000400000005001d5c395c2a0000040f0000000405000029000000030600002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000049220000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000048810000213d0000000102200190000048810000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000487f0000c13d0000000102000029000000a802200270000000ff0220018f00000020031000390000000000630435000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000203000039000017ad0400004100000005050000295c395c2a0000040f00000001012001900000487f0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000048bd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000048b50000413d000000000504004b000048cc0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000048e30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000048db0000413d000000000504004b000048f20000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000049090000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000049010000413d000000000504004b000049180000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f00000005044002720000492f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000049270000413d000000000503004b0000493e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000049550000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000494d0000413d000000000503004b000049640000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000497b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000049730000413d000000000504004b0000498a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000500000002001d000400000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c000049a20000c13d0000000103000031000049d30000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000049c00000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000049b80000413d000000000604004b000049cf0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000004bc10000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00004b920000213d000000010110019000004b920000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00004b900000613d00000000050904330000173e0150009c00004b900000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c000049fa0000c13d000000010300003100004a300000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000300000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004a1b0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004a130000413d000000000604004b00004a2a0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000305000029000000010600002900004be70000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00004b920000213d000000010110019000004b920000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00004b900000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00004b900000c13d000000000201004b00004aaa0000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00004a590000c13d000000010300003100004a8b0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004a780000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004a700000413d000000000604004b00004a870000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000004c590000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00004b920000213d000000010110019000004b920000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00004b900000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900004b900000c13d0000174e0290009c00004b920000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b00004b980000613d0000003501000039000000000201041a000000400900043d0000175c01000041000000000019043500000004010000290000173e031001970000000401900039000400000003001d000000000031043500000000010004140000173e05200197000000040250008c000300000005001d00004ac60000c13d000000010300003100004af90000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004ae50000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004add0000413d000000000604004b00004af40000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000030500002900004c0d0000613d0000001f013000390000000602000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c00004b920000213d000000010110019000004b920000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00004b900000c13d0000175d0160009c00004b920000213d0000002001600039000000400010043f00000000010904330000000000160435000000b0011002700000179801100197000100000001001d000000400100043d0000174e0210009c00004b920000213d0000004002100039000000400020043f0000002002100039000017ae0300004100000000003204350000000202000039000000000021043500000005030000290000179a0230009c00004bad0000813d000000b0013002100000000002060433000017af02200197000000000112019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000200000006001d5c395c2f0000040f00000002030000290000000304000029000000010220019000004b900000613d000000000101043b000000000101004b00004b900000613d000000400500043d000017620100004100000000001504350000000401500039000000040200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c00004b4d0000c13d000000010400003100004b610000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000300000005001d5c395c2a0000040f000000030500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000004c330000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00004b920000213d000000010220019000004b920000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00004b900000c13d0000002002100039000000050300002900000000003204350000000102000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000203000039000017b00400004100000004050000295c395c2a0000040f000000010120019000004b900000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000600000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004bce0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004bc60000413d000000000504004b00004bdd0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004bf40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004bec0000413d000000000504004b00004c030000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004c1a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004c120000413d000000000504004b00004c290000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200004c400000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00004c380000413d000000000503004b00004c4f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004c660000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004c5e0000413d000000000504004b00004c750000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300006000000000002000300000002001d000500000001001d0000003401000039000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c00004c8d0000c13d000000010300003100004cbe0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000600000009001d5c395c2f0000040f0000000609000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004cab0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004ca30000413d000000000604004b00004cba0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000004ee10000613d0000001f01300039000000200200008a000600000002001d000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c00004ec60000213d000000010110019000004ec60000c13d0000004000a0043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00004ec40000613d00000000050904330000173e0150009c00004ec40000213d0000175a0100004100000000001a043500000000010004110000173e061001970000000401a0003900000000006104350000000001000414000000040250008c00004ce50000c13d000000010300003100004d1b0000013d000100000006001d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000400000005001d000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004d060000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004cfe0000413d000000000604004b00004d150000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000405000029000000010600002900004f070000613d0000001f013000390000000602000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00004ec60000213d000000010110019000004ec60000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00004ec40000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b00004ec40000c13d000000000201004b00004d950000c13d0000174d010000410000000000190435000000040190003900000000006104350000000001000414000000040250008c00004d440000c13d000000010300003100004d760000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000400000009001d5c395c2f0000040f0000000409000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004d630000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004d5b0000413d000000000604004b00004d720000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000004f790000613d0000001f013000390000000602000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c00004ec60000213d000000010110019000004ec60000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b00004ec40000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b000000000902001900004ec40000c13d0000174e0290009c00004ec60000213d0000004002900039000000400020043f00000020029000390000175b03000041000000000032043500000001020000390000000000290435000000000101004b00004ecc0000613d0000003501000039000000000201041a000000400900043d0000176a01000041000000000719043600000005010000290000173e031001970000000401900039000500000003001d000000000031043500000000010004140000173e06200197000000040260008c000400000006001d00004db10000c13d000000010300003100004de60000013d000100000007001d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002060019000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000001e00430008c000001e00500003900000000050340190000001f0450018f000000050550027200004dd10000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004dc90000413d000000000604004b00004de00000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000406000029000000010700002900004f2d0000613d0000001f013000390000000602000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00004ec60000213d000000010220019000004ec60000c13d000000400010043f0000173b020000410000000103000031000001e00430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00004ec40000c13d000017b10210009c00004ec60000213d000001e002100039000000400020043f000017b20310009c00004ec60000213d0000020003100039000000400030043f00000000030904330000000000320435000000000221043600000000030704330000173f0430009c00004ec40000213d0000000000320435000000400290003900000000020204330000173f0320009c00004ec40000213d00000040031000390000000000230435000000600290003900000000020204330000173f0320009c00004ec40000213d00000060031000390000000000230435000000800290003900000000020204330000173f0320009c00004ec40000213d00000080031000390000000000230435000000a00290003900000000020204330000173f0320009c00004ec40000213d000000a0031000390000000000230435000000c00290003900000000020204330000176b0320009c00004ec40000213d000000c0031000390000000000230435000000e00290003900000000020204330000ffff0320008c00004ec40000213d000000e0031000390000000000230435000001000290003900000000020204330000173e0320009c00004ec40000213d00000100031000390000000000230435000001200290003900000000020204330000173e0320009c00004ec40000213d00000120031000390000000000230435000001400290003900000000020204330000173e0320009c00004ec40000213d00000140031000390000000000230435000001600290003900000000030204330000173e0230009c00004ec40000213d00000160021000390000000000320435000001800390003900000000030304330000173f0430009c00004ec40000213d00000180041000390000000000340435000001a00390003900000000030304330000173f0430009c00004ec40000213d000001a0041000390000000000340435000001c00390003900000000030304330000173f0430009c00004ec40000213d000001c00110003900000000003104350000000001020433000200000001001d00001743010000410000000000100439000000040060044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f000000040400002900000002030000290000173e06300197000000010220019000004ec40000613d000000000101043b000000000101004b00004ec40000613d000000400500043d000017b301000041000000000015043500000004015000390000000502000029000000000021043500000003010000290000173e07100197000000240150003900000000007104350000000001000414000000040240008c00004e7f0000c13d000000010400003100004e970000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000400000006001d000300000007001d000200000005001d5c395c2a0000040f00000002050000290000000307000029000000040600002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000004f530000613d0000001f014000390000000602000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00004ec60000213d000000010220019000004ec60000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00004ec40000c13d00000020021000390000000000720435000000000061043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000203000039000017b40400004100000005050000295c395c2a0000040f000000010120019000004ec40000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000600000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f000000060400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004eee0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004ee60000413d000000000504004b00004efd0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004f140000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004f0c0000413d000000000504004b00004f230000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004f3a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004f320000413d000000000504004b00004f490000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200004f600000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00004f580000413d000000000503004b00004f6f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200004f860000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00004f7e0000413d000000000504004b00004f950000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000d000000000002000c00000001001d0000003401000039000500000001001d000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c00004fad0000c13d000000010300003100004fde0000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c7000d0000000a001d5c395c2f0000040f0000000d0a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200004fcb0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00004fc30000413d000000000604004b00004fda0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000053ce0000613d0000001f01300039000000200200008a000d00000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000052e10000213d0000000101100190000052e10000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000052df0000613d00000000020a04330000173e0120009c000052df0000213d0000178601000041000000000019043500000000010004110000173e031001970000000401900039000700000003001d00000000003104350000000001000414000000040320008c000050060000c13d0000000103000031000050370000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000b00000009001d5c395c2f0000040f0000000b09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000050240000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000501c0000413d000000000604004b000050330000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000053f40000613d0000001f013000390000000d02000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000052e10000213d0000000102200190000052e10000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000052df0000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b000052df0000c13d0000174e0310009c000052e10000213d0000004003100039000000400030043f0000002003100039000017b50400004100000000004304350000000103000039000400000003001d0000000000310435000000000202004b000053ba0000613d0000003501000039000300000001001d000000000201041a000000400700043d000017a501000041000000000017043500000000010004140000173e02200197000000040320008c0000506e0000c13d00000003010003670000000104000031000050810000013d0000171003000041000017100410009c0000000001038019000017100470009c00000000030740190000004003300210000000c001100210000000000131019f00001742011001c7000b00000007001d5c395c2f0000040f0000000b0700002900000000030100190000006003300270000117100030019d0000171004300197000300000001035500000001022001900000541a0000613d0000001f0240018f00000005034002720000508d0000613d000000000400001900000005054002100000000006570019000000000551034f000000000505043b00000000005604350000000104400039000000000534004b000050850000413d000000000402004b0000509c0000613d0000000503300210000000000131034f00000000033700190000000302200210000000000403043300000000042401cf000000000424022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000141019f00000000001304350000001f0100003900000001011000310000000d02000029000000000121016f0000000002710019000000000112004b00000000010000190000000101004039000600000002001d0000173d0220009c000052e10000213d0000000101100190000052e10000c13d0000000601000029000000400010043f0000173b020000410000000101000031000000200310008c000000000300001900000000030240190000173b04100197000000000504004b000000000200a0190000173b0440009c000000000203c019000000000202004b000052df0000c13d00000000020704330000173d0320009c000052df0000213d000000000371001900000000017200190000001f021000390000173b04000041000000000532004b000000000500001900000000050480190000173b022001970000173b06300197000000000762004b0000000004008019000000000262013f0000173b0220009c00000000020500190000000002046019000000000202004b000052df0000c13d00000000210104340000173d0410009c000052e10000213d00000005041002100000003f054000390000000d06000029000000000565016f000000060600002900000000056500190000173d0650009c000052e10000213d000000400050043f00000006050000290000000005150436000800000005001d0000000004240019000000000334004b000052df0000213d000000000342004b000050e90000813d000000060100002900000000230204340000173e0530009c000052df0000213d00000020011000390000000000310435000000000342004b000050e00000413d00000006010000290000000001010433000000000201004b000052de0000613d00001788020000410000000c03000029000000000303004b0000000002006019000200000002001d0000000002000019000000010200c039000100000002001d0000000004000019000050f80000013d0000000104400039000000000214004b000052de0000813d00000005024002100000000803000029000000000223001900000000020204330000173e02200198000c00000002001d000050f50000613d000a00000004001d0000000501000029000000000201041a000000400900043d0000174b01000041000000000019043500000000010004140000173e02200197000000040320008c0000510b0000c13d00000001030000310000513b0000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f00001742011001c7000b00000009001d5c395c2f0000040f0000000b09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000000504500272000051280000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000051200000413d0000001f05500190000051370000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000052fc0000613d0000001f013000390000000d02000029000000000121016f000000000a91001900000000011a004b000000000100001900000001010040390000173d02a0009c000052e10000213d0000000101100190000052e10000c13d0000004000a0043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000052df0000c13d00000000050904330000173e0150009c000052df0000213d0000174d0100004100000000001a04350000000401a00039000000070200002900000000002104350000000001000414000000040250008c000051600000c13d0000000103000031000051930000013d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f0000174a011001c7000b00000005001d000000000205001900090000000a001d5c395c2f0000040f000000090a000029000000000301001900000060033002700000171003300197000000200430008c0000002005000039000000000503401900000005045002720000517f0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000051770000413d0000001f055001900000518e0000613d0000000504400210000000000641034f00000000044a00190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000b05000029000053220000613d0000001f013000390000000d02000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000052e10000213d0000000101100190000052e10000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000052df0000c13d00000000010a0433000000000201004b0000000002000019000000010200c039000000000221004b000052df0000c13d000000000201004b0000520d0000c13d000017860100004100000000001904350000000401900039000000070200002900000000002104350000000001000414000000040250008c000051bd0000c13d0000000103000031000051ee0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000b00000009001d5c395c2f0000040f0000000b09000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000000504500272000051db0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000051d30000413d0000001f05500190000051ea0000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000102200190000053940000613d0000001f013000390000000d02000029000000000121016f0000000002910019000000000112004b000000000100001900000001010040390000173d0320009c000052e10000213d0000000101100190000052e10000c13d000000400020043f0000173b010000410000000103000031000000200430008c000000000400001900000000040140190000173b03300197000000000503004b000000000100a0190000173b0330009c000000000104c019000000000101004b000052df0000c13d0000000001090433000000000301004b0000000003000019000000010300c039000000000331004b0000000009020019000052df0000c13d0000174e0290009c000052e10000213d0000004002900039000000400020043f00000020029000390000178703000041000000000032043500000004020000290000000000290435000000000101004b000052e70000613d0000000301000029000000000201041a000000400900043d0000175c01000041000000000019043500000004019000390000000c03000029000000000031043500000000010004140000173e05200197000000040250008c000b00000005001d000052270000c13d0000000103000031000052590000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f0000174a011001c70000000002050019000900000009001d5c395c2f0000040f0000000909000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000000504500272000052450000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b0000523d0000413d0000001f05500190000052540000613d0000000504400210000000000641034f00000000044900190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001022001900000000b05000029000053480000613d0000001f013000390000000d02000029000000000121016f0000000006910019000000000116004b000000000100001900000001010040390000173d0260009c000052e10000213d0000000101100190000052e10000c13d000000400060043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000052df0000c13d0000175d0160009c000052e10000213d0000002001600039000000400010043f000000000109043300001789011001970000000202000029000000000121019f000000000016043500001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c70000800202000039000900000006001d5c395c2f0000040f00000009030000290000000b040000290000000102200190000052df0000613d000000000101043b000000000101004b000052df0000613d000000400500043d0000176201000041000000000015043500000004015000390000000c0200002900000000002104350000000001030433000000240250003900000000001204350000000001000414000000040240008c0000529b0000c13d0000000104000031000052af0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000b00000005001d5c395c2a0000040f0000000b0500002900000000030100190000006003300270000117100030019d0000171004300197000300000001035500000001022001900000536e0000613d0000001f014000390000000d02000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000052e10000213d0000000102200190000052e10000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000052df0000c13d0000000102000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001764011001c70000800d0200003900000002030000390000178a040000410000000c050000295c395c2a0000040f0000000101200190000052df0000613d000000060100002900000000010104330000000a04000029000050f50000013d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b00010430000000400300043d000d00000003001d00001747010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000000010900195c3915c60000040f0000000d0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000053090000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000053010000413d000000000504004b000053180000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000532f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000053270000413d000000000504004b0000533e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000053550000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000534d0000413d000000000504004b000053640000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f00000005044002720000537b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000053730000413d000000000503004b0000538a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000053a10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000053990000413d000000000504004b000053b00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400400043d000d00000004001d0000174702000041000000000024043500000004024000390000002003000039000000000032043500000024024000395c3915c60000040f0000000d0400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000053db0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000053d30000413d000000000504004b000053ea0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000054010000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000053f90000413d000000000504004b000054100000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000054270000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000541f0000413d000000000503004b000054360000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300004000000000002000300000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c0000544d0000c13d00000001030000310000547e0000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700040000000a001d5c395c2f0000040f000000040a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000546b0000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000054630000413d000000000604004b0000547a0000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000055f40000613d0000001f01300039000000200200008a000400000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c000055c50000213d0000000101100190000055c50000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b000055c30000613d00000000020a04330000173e0120009c000055c30000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000054a50000c13d0000000103000031000054d60000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000200000009001d5c395c2f0000040f0000000209000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000054c30000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000054bb0000413d000000000604004b000054d20000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000561a0000613d0000001f013000390000000402000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000055c50000213d0000000102200190000055c50000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000055c30000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b000055c30000c13d0000174e0310009c000055c50000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000400300043d000000000202004b000055cb0000613d0000174e0130009c000055c50000213d0000004001300039000000400010043f0000002001300039000017b6020000410000000000210435000000020100003900000000001304350000000301000029000027110110008c000055df0000813d0000003501000039000000000201041a000000400900043d000017b701000041000000000019043500000000010004140000173e05200197000000040250008c000200000005001d000055180000c13d00000001030000310000554b0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f00001742011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000055370000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000552f0000413d000000000604004b000055460000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000205000029000056400000613d0000001f013000390000000402000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c000055c50000213d0000000102200190000055c50000c13d000000400010043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b000055c30000c13d0000000001090433000100000001001d00001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f00000002040000290000000102200190000055c30000613d000000000101043b000000000101004b000055c30000613d000000400500043d000017b80100004100000000001504350000000401500039000000030200002900000000002104350000000001000414000000040240008c000055810000c13d0000000104000031000055950000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f0000174a011001c70000000002040019000200000005001d5c395c2a0000040f000000020500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000056660000613d0000001f014000390000000402000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c000055c50000213d0000000102200190000055c50000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b000055c30000c13d0000002002100039000000030300002900000000003204350000000102000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000103000039000017b9040000415c395c2a0000040f0000000101200190000055c30000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b000104300000174702000041000000000023043500000004023000390000000004030019000200000004001d0000002003000039000000000032043500000024024000395c3915c60000040f000000020400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000400000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000040400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000056010000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000055f90000413d000000000504004b000056100000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000056270000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000561f0000413d000000000504004b000056360000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000564d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000056450000413d000000000504004b0000565c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000056730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000566b0000413d000000000503004b000056820000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300005000000000002000400000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c000056990000c13d0000000103000031000056ca0000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700050000000a001d5c395c2f0000040f000000050a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000056b70000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000056af0000413d000000000604004b000056c60000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000589d0000613d0000001f01300039000000200200008a000500000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000586e0000213d00000001011001900000586e0000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b0000586c0000613d00000000020a04330000173e0120009c0000586c0000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000056f10000c13d0000000103000031000057220000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000570f0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000057070000413d000000000604004b0000571e0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000058c30000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c0000586e0000213d00000001022001900000586e0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000586c0000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b0000586c0000c13d0000174e0310009c0000586e0000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000400300043d000000000202004b000058740000613d0000174e0130009c0000586e0000213d0000004001300039000000400010043f0000002001300039000017ba0200004100000000002104350000000201000039000000000013043500000004010000290000173f01100197000300000001001d000027110110008c000058880000813d0000003501000039000000000201041a000000400a00043d000017bb0100004100000000001a043500000000010004140000173e05200197000000040250008c000400000005001d000057660000c13d0000000103000031000057990000013d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f00001742011001c7000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000057850000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000577d0000413d000000000604004b000057940000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001022001900000000405000029000058e90000613d0000001f013000390000000502000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c0000586e0000213d00000001011001900000586e0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000586c0000c13d00000000010a0433000200000001001d0000173f0110009c0000586c0000213d000017bc0100004100000000001904350000000001000414000000040250008c000057bc0000c13d0000000103000031000057ef0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f00001742011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000057db0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000057d30000413d000000000604004b000057ea0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000000004050000290000590f0000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c0000586e0000213d00000001022001900000586e0000c13d000000400010043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b0000586c0000c13d0000000001090433000100000001001d0000173f0110009c0000586c0000213d00001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f000000040400002900000001022001900000586c0000613d000000000101043b000000000101004b0000586c0000613d000000400500043d000000240150003900000001020000290000000000210435000017bd0100004100000000001504350000000401500039000000030200002900000000002104350000000001000414000000040240008c0000582a0000c13d00000001040000310000583e0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000400000005001d5c395c2a0000040f000000040500002900000000030100190000006003300270000117100030019d000017100430019700030000000103550000000102200190000059350000613d0000001f014000390000000502000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c0000586e0000213d00000001022001900000586e0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b0000586c0000c13d0000002002100039000000030300002900000000003204350000000202000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000103000039000017be040000415c395c2a0000040f00000001012001900000586c0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b000104300000174702000041000000000023043500000004023000390000000004030019000200000004001d0000002003000039000000000032043500000024024000395c3915c60000040f000000020400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000500000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000050400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000058aa0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000058a20000413d000000000504004b000058b90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000058d00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000058c80000413d000000000504004b000058df0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f0000000503300272000058f60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000058ee0000413d000000000504004b000059050000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f00000005033002720000591c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000059140000413d000000000504004b0000592b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f0000000504400272000059420000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000593a0000413d000000000503004b000059510000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b000104300005000000000002000400000001001d0000003401000039000000000201041a000000400a00043d0000174b0100004100000000001a043500000000010004140000173e02200197000000040320008c000059680000c13d0000000103000031000059990000013d0000171003000041000017100410009c00000000010380190000171004a0009c00000000030a40190000004003300210000000c001100210000000000131019f00001742011001c700050000000a001d5c395c2f0000040f000000050a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000059860000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000597e0000413d000000000604004b000059950000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000005b6c0000613d0000001f01300039000000200200008a000500000002001d000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00005b3d0000213d000000010110019000005b3d0000c13d000000400090043f0000173b0100004100000001020000310000001f0320008c000000000300001900000000030120190000173b02200197000000000402004b00000000010080190000173b0220009c000000000103c019000000000101004b00005b3b0000613d00000000020a04330000173e0120009c00005b3b0000213d0000174d01000041000000000019043500000000010004110000173e01100197000000040390003900000000001304350000000001000414000000040320008c000059c00000c13d0000000103000031000059f10000013d0000171003000041000017100410009c0000000001038019000017100490009c00000000030940190000004003300210000000c001100210000000000131019f0000174a011001c7000300000009001d5c395c2f0000040f0000000309000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f0000000505500272000059de0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000059d60000413d000000000604004b000059ed0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010220019000005b920000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00005b3d0000213d000000010220019000005b3d0000c13d000000400010043f0000173b020000410000000103000031000000200430008c000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00005b3b0000c13d0000000002090433000000000302004b0000000003000019000000010300c039000000000332004b00005b3b0000c13d0000174e0310009c00005b3d0000213d0000004003100039000000400030043f00000020031000390000175304000041000000000043043500000001030000390000000000310435000000400300043d000000000202004b00005b430000613d0000174e0130009c00005b3d0000213d0000004001300039000000400010043f0000002001300039000017ba0200004100000000002104350000000201000039000000000013043500000004010000290000173f01100197000300000001001d000027110110008c00005b570000813d0000003501000039000000000201041a000000400a00043d000017bc0100004100000000001a043500000000010004140000173e05200197000000040250008c000400000005001d00005a350000c13d000000010300003100005a680000013d0000171002000041000017100310009c00000000010280190000171003a0009c00000000020a40190000004002200210000000c001100210000000000121019f00001742011001c7000000000205001900020000000a001d5c395c2f0000040f000000020a000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200005a540000613d0000000006000019000000050760021000000000087a0019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00005a4c0000413d000000000604004b00005a630000613d0000000505500210000000000651034f00000000055a00190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000040500002900005bb80000613d0000001f013000390000000502000029000000000121016f0000000009a10019000000000119004b000000000100001900000001010040390000173d0290009c00005b3d0000213d000000010110019000005b3d0000c13d000000400090043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00005b3b0000c13d00000000010a0433000200000001001d0000173f0110009c00005b3b0000213d000017bb0100004100000000001904350000000001000414000000040250008c00005a8b0000c13d000000010300003100005abe0000013d0000171002000041000017100310009c0000000001028019000017100390009c00000000020940190000004002200210000000c001100210000000000121019f00001742011001c70000000002050019000100000009001d5c395c2f0000040f0000000109000029000000000301001900000060033002700000171003300197000000200430008c000000200500003900000000050340190000001f0450018f000000050550027200005aaa0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00005aa20000413d000000000604004b00005ab90000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000102200190000000040500002900005bde0000613d0000001f013000390000000502000029000000000221016f0000000001920019000000000221004b000000000200001900000001020040390000173d0310009c00005b3d0000213d000000010220019000005b3d0000c13d000000400010043f0000173b010000410000000102000031000000200320008c000000000300001900000000030140190000173b02200197000000000402004b000000000100a0190000173b0220009c000000000103c019000000000101004b00005b3b0000c13d0000000001090433000100000001001d0000173f0110009c00005b3b0000213d00001743010000410000000000100439000000040050044300001710010000410000000002000414000017100320009c0000000001024019000000c00110021000001744011001c700008002020000395c395c2f0000040f0000000404000029000000010220019000005b3b0000613d000000000101043b000000000101004b00005b3b0000613d000000400500043d000000240150003900000003020000290000000000210435000017bd0100004100000000001504350000000401500039000000010200002900000000002104350000000001000414000000040240008c00005af90000c13d000000010400003100005b0d0000013d0000171002000041000017100310009c0000000001028019000017100350009c00000000020540190000004002200210000000c001100210000000000121019f00001763011001c70000000002040019000400000005001d5c395c2a0000040f000000040500002900000000030100190000006003300270000117100030019d00001710043001970003000000010355000000010220019000005c040000613d0000001f014000390000000502000029000000000221016f0000000001520019000000000221004b000000000200001900000001020040390000173d0310009c00005b3d0000213d000000010220019000005b3d0000c13d000000400010043f0000173b020000410000000103000031000000000403004b000000000400001900000000040240190000173b03300197000000000503004b000000000200a0190000173b0330009c000000000204c019000000000202004b00005b3b0000c13d0000002002100039000000030300002900000000003204350000000202000029000000000021043500001710020000410000000003000414000017100430009c0000000003028019000017100410009c00000000010280190000004001100210000000c002300210000000000112019f00001784011001c70000800d020000390000000103000039000017bf040000415c395c2a0000040f000000010120019000005b3b0000613d000000000001042d000000000100001900005c3b00010430000017490100004100000000001004350000004101000039000000040010043f0000174a0100004100005c3b000104300000174702000041000000000023043500000004023000390000000004030019000200000004001d0000002003000039000000000032043500000024024000395c3915c60000040f000000020400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400400043d000500000004001d00001747010000410000000000140435000000040140003900000020020000390000000000210435000000240240003900000000010300195c3915c60000040f000000050400002900000000014100490000171002000041000017100310009c0000000001028019000017100340009c000000000204401900000040022002100000006001100210000000000121019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200005b790000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00005b710000413d000000000504004b00005b880000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200005b9f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00005b970000413d000000000504004b00005bae0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200005bc50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00005bbd0000413d000000000504004b00005bd40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0430018f000000050330027200005beb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00005be30000413d000000000504004b00005bfa0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b00010430000000400200043d0000001f0340018f000000050440027200005c110000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00005c090000413d000000000503004b00005c200000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500001710010000410000000103000031000017100430009c0000000003018019000017100420009c000000000102401900000040011002100000006002300210000000000112019f00005c3b0001043000005c2d002104210000000102000039000000000001042d0000000002000019000000000001042d00005c32002104230000000102000039000000000001042d0000000002000019000000000001042d00005c37002104250000000102000039000000000001042d0000000002000019000000000001042d00005c390000043200005c3a0001042e00005c3b00010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000007af635a500000000000000000000000000000000000000000000000000000000aeb4fcc000000000000000000000000000000000000000000000000000000000c4d66de700000000000000000000000000000000000000000000000000000000d4fe3f9800000000000000000000000000000000000000000000000000000000d4fe3f9900000000000000000000000000000000000000000000000000000000f213ef0e00000000000000000000000000000000000000000000000000000000c4d66de800000000000000000000000000000000000000000000000000000000d14a098300000000000000000000000000000000000000000000000000000000bb01c37b00000000000000000000000000000000000000000000000000000000bb01c37c00000000000000000000000000000000000000000000000000000000c19d61e400000000000000000000000000000000000000000000000000000000aeb4fcc100000000000000000000000000000000000000000000000000000000b736aaeb000000000000000000000000000000000000000000000000000000008a751a5f00000000000000000000000000000000000000000000000000000000a7fa83b600000000000000000000000000000000000000000000000000000000a7fa83b700000000000000000000000000000000000000000000000000000000ad4e6432000000000000000000000000000000000000000000000000000000008a751a600000000000000000000000000000000000000000000000000000000096e957c4000000000000000000000000000000000000000000000000000000007af635a6000000000000000000000000000000000000000000000000000000007c4e560b000000000000000000000000000000000000000000000000000000008a4936760000000000000000000000000000000000000000000000000000000048d9fba80000000000000000000000000000000000000000000000000000000063c9b85f000000000000000000000000000000000000000000000000000000007626cde2000000000000000000000000000000000000000000000000000000007626cde3000000000000000000000000000000000000000000000000000000007641f3d90000000000000000000000000000000000000000000000000000000063c9b86000000000000000000000000000000000000000000000000000000000682cf2640000000000000000000000000000000000000000000000000000000048d9fba9000000000000000000000000000000000000000000000000000000004b4e675300000000000000000000000000000000000000000000000000000000571f03e5000000000000000000000000000000000000000000000000000000001df970bc000000000000000000000000000000000000000000000000000000003036b438000000000000000000000000000000000000000000000000000000003036b4390000000000000000000000000000000000000000000000000000000038ae0cc3000000000000000000000000000000000000000000000000000000001df970bd0000000000000000000000000000000000000000000000000000000026d2cec20000000000000000000000000000000000000000000000000000000002fb45e600000000000000000000000000000000000000000000000000000000145f5892000000000000000000000000000000000000000000000000000000001d2118f980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000026b1d5f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000656e20696e697469616c697a6564000000000000000000000000000000000000436f6e747261637420696e7374616e63652068617320616c726561647920626508c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000707cd7160000000000000000000000000000000000000000000000000000000013ee32e0000000000000000000000000000000000000000000000000000000007be53ca100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf35000000000000000000000000000000000000000000000000000000000000000000000000000000000000008731d4e5b990025143609f4a40ec80fb482e46a0df59b8b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0310000000000000000000000000000000000000000000000000000000000000063c9b860000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000eeec4c06f7adad215cbdb4d2960896c83c26aedce02dde76d36fa28588d62da4b13c96a800000000000000000000000000000000000000000000000000000000f5b50e7000000000000000000000000000000000000000000000000000000000b0f0935500000000000000000000000000000000000000000000000000000000674b5e4d000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000c44b11f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf000000000000000000000000000000000000000000000000040000000000000038380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000fffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff51e435b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000002000000000000000000000000000000000000200000000000000000000000002443ba28e8d1d88d531a3d90b981816a4f3b3c7f1fd4085c6029e81d1b7a570d3230000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0a0b78fffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09f7efe860accb0000000000000000000000000000000000000000000000000000000035ea6a7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffff313800000000000000000000000000000000000000000000000000000000000036330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00003634000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff3635000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff0200000000000000000000000000000000000060000000000000000000000000637febbda9275aea2e85c0ff690444c8d87eb2e8339bbede9715abcc89cb09953330000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff0b64d0941719acd363f1a6be3d8525d8ec9d71738f7445aabcd88d7939b472e70000000000000000000000000000000000000000000000008000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffc8ff3cc5b0fddaa3e6ebbbd7438f43393e4ea30e88b80ad016c1bc094655034d0000000000000000000000000000000000000000000000000100000000000000fffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffc36c7d11ba01a5869d52aa4a3781939dab851cbc9ee6e7fdcedc7d58898a3f1e0000000000000000000000000000000000000000000000000200000000000000fffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0c4443d258a350d27dc50c378b2ebf165e6469725f786d21b30cab16823f55870000000000000000000000000000000000000000000000002000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff020000000000000000000000000000000000004000000000000000000000000074adf6aaf58c08bc4f993640385e136522375ea3d1589a10d02adbb906c67d1c2500f2b60000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffe188d542a5f11925d3a3af33703cdd30a43cb3e8066a3cf68b1b57f61a5a94b53637000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffb46e2b82b0c2cf3d7d9dece53635e165c53e0eaa7a44f904d61a2b7174826aef37330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000f0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffe43e88a1000000000000000000000000000000000000000000000000000000006824a6c7fbc10d2979b1f1ccf2dd4ed0436541679a661dedb5c10bd4be8306824d44ac4f0000000000000000000000000000000000000000000000000000000039300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff842a280b07e8e502a9101f32a3b768ebaba3655556dd674f0831900861fc674b0000000000000000000000000000000000000000000000000000000fffffffff36380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000fffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffffc51aca575985d521c5072ad11549bad77013bb786d57f30f94b40ed8f8dc9bc43639000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff0263602682188540a2d633561c0b4453b7d8566285e99f9f6018b8ef2facef493730000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffb5b0a963825337808b6e3154de8e98027595a5cad4219bb3a9bc55b192f4b391323100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa09f7efd1946dbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5fd579ea7d000000000000000000000000000000000000000000000000000000000acf8b4a3cace10779798a89a206a0ae73a71b63acdd3be2801d39c2ef7ab3cb6c6f6ae10000000000000000000000000000000000000000000000000000000031370000000000000000000000000000000000000000000000000000000000003731000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff5bb69795b6a2ea222d73a5f8939c23471a1f85a99c7ca43c207f1b71f10c62643732000000000000000000000000000000000000000000000000000000000000fffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff09808b1fc5abde94edf02fdde393bea0d2e4795999ba31695472848638b5c29f000000000000000000000000000000000000000000000000fffffffffffffe1f000000000000000000000000000000000000000000000000fffffffffffffdff1d2118f900000000000000000000000000000000000000000000000000000000db8dada53709ce4988154324196790c2e4a60c377e1256790946f83b87db3c3332000000000000000000000000000000000000000000000000000000000000003232000000000000000000000000000000000000000000000000000000000000272d9072000000000000000000000000000000000000000000000000000000003036b4390000000000000000000000000000000000000000000000000000000030b17cb587a89089d003457c432f73e22aeee93de425e92224ba01080260ecd93139000000000000000000000000000000000000000000000000000000000000074b2e43000000000000000000000000000000000000000000000000000000006a99c03600000000000000000000000000000000000000000000000000000000bcb6e5220000000000000000000000000000000000000000000000000000000071aba182c9d0529b516de7a78bed74d49c207ef7e152f52f7ea5d8730138f643e7e0c75e1fc2d0bd83dc85d59f085b3e763107c392fb368e85572b292f1f5576aa3a3c24f8ba283aaf994d1b0dbcbe812711c901fbff4da01e2eba12c6487d15
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.