Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- JustInTimeCompiler
- Optimization enabled
- false
- Compiler version
- v0.8.20+commit.a1b79de6
- EVM Version
- shanghai
- Verified at
- 2025-02-13T00:13:56.833720Z
Constructor Arguments
0000000000000000000000006c8fdfd2cec0b83d69045074d57a87fa1525225a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Arg [0] (address) : 0x6c8fdfd2cec0b83d69045074d57a87fa1525225a
Arg [1] (uint256) : 0
Arg [2] (uint256) : 0
Compiler.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
/* ========== OpenZeppelin Context ========== */
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/* ========== OpenZeppelin Ownable ========== */
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
/* ========== OpenZeppelin IERC20 Interfaces ========== */
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
/* ========== OpenZeppelin ERC20 Implementation ========== */
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
_transfer(sender, recipient, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/// @dev Internal function to transfer tokens from one account to another.
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
/// @dev Internal function to mint tokens to an account.
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
/// @dev Internal function to burn tokens from an account.
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
}
/// @dev Internal function to set allowances.
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}
/* ========== Just-in-time Compiler Contract ========== */
/*
The Just-in-time Compiler contract converts HolyC tokens into JIT tokens using a process reminiscent of Terry Davis' Just-In-Time (JIT) compilation.
In this system, users "compile" their HolyC tokens into JIT tokens and can later "restore" them back to HolyC.
Two types of fees are applied to manage the token supply:
1. Compile/Restore Fee:
- When compiling (converting HolyC to JIT), a fee is deducted from the deposited HolyC tokens.
- When restoring (converting JIT back to HolyC), a fee is similarly deducted from the amount returned.
- In both cases, the deducted fee is sent directly to a burn address (0x0000000000000000000000000000000000000369), effectively removing those tokens from circulation.
2. Transfer Fee:
- A fee is applied on every JIT token transfer, and this fee is burned (i.e., removed from the total supply).
The contract owner can adjust these fee percentages (up to 50% each) and designate certain addresses as fee-exempt.
The naming of the contract as "Just-in-time Compiler" and the use of JIT tokens is a thematic nod to Just-In-Time compilation.
*/
/// @notice Minimal interface for the underlying HolyC token.
interface IHolyC is IERC20 {}
contract JustInTimeCompiler is ERC20, Ownable {
// Underlying HolyC token that is being compiled.
IHolyC public holyC;
// Global fee percentages expressed on a fixed denominator basis.
// E.g., 1000 equals a 1% fee because 1000/100000 = 1%.
uint256 public compileRestoreFee; // Fee applied on compiling and restoring (HolyC tokens).
uint256 public transferFee; // Fee applied on every JIT transfer.
// Denominator for fee calculations.
uint256 public constant FEE_DENOMINATOR = 100000;
// Burn address where HolyC tokens will be sent.
address public constant BURN_ADDRESS = 0x0000000000000000000000000000000000000369;
// Mapping of addresses that are exempt from fees.
mapping(address => bool) public feeExempt;
// -------------------- Events --------------------
event CompileRestoreFeeUpdated(uint256 newFee);
event TransferFeeUpdated(uint256 newFee);
event FeeExemptionUpdated(address indexed account, bool isExempt);
/// @notice Constructor sets the underlying HolyC token and initial fee values.
/// @param holyCAddress Address of the HolyC token contract.
/// @param initialCompileRestoreFee Initial fee (in basis points) for compiling/restoring (max 50000).
/// @param initialTransferFee Initial fee (in basis points) for JIT transfers (max 50000).
constructor(
address holyCAddress,
uint256 initialCompileRestoreFee,
uint256 initialTransferFee
) ERC20("Just-in-time Compiler", "JIT") {
require(holyCAddress != address(0), "HolyC address cannot be zero");
require(initialCompileRestoreFee <= 50000, "Compile/Restore fee cannot exceed 50%");
require(initialTransferFee <= 50000, "Transfer fee cannot exceed 50%");
holyC = IHolyC(holyCAddress);
compileRestoreFee = initialCompileRestoreFee;
transferFee = initialTransferFee;
}
// -------------------- Owner Functions --------------------
/// @notice Updates the global fee percentage for compiling and restoring.
/// @param newFee The new fee (in basis points, e.g. 1000 for 1%). Maximum allowed is 50000 (50%).
function setCompileRestoreFee(uint256 newFee) external onlyOwner {
require(newFee <= 50000, "Compile/Restore fee cannot exceed 50%");
compileRestoreFee = newFee;
emit CompileRestoreFeeUpdated(newFee);
}
/// @notice Updates the global fee percentage for JIT transfers.
/// @param newFee The new fee (in basis points, e.g. 1000 for 1%). Maximum allowed is 50000 (50%).
function setTransferFee(uint256 newFee) external onlyOwner {
require(newFee <= 50000, "Transfer fee cannot exceed 50%");
transferFee = newFee;
emit TransferFeeUpdated(newFee);
}
/// @notice Sets or unsets fee exemption for a specific address.
/// Exempt addresses pay no fee on any operation.
/// @param account The address to update.
/// @param exempt True to exempt the address from fees, false otherwise.
function setFeeExemption(address account, bool exempt) external onlyOwner {
feeExempt[account] = exempt;
emit FeeExemptionUpdated(account, exempt);
}
// -------------------- Compile/Restore Functions --------------------
/// @notice Compiles HolyC tokens into JIT.
/// The HolyC tokens are transferred from the user, a fee is deducted,
/// and only the net amount is minted as JIT for the user.
/// The deducted fee (HolyC tokens) is immediately sent to the burn address.
/// @param amount The amount of HolyC tokens to compile.
function compile(uint256 amount) external {
require(amount > 0, "Amount must be greater than 0");
// Transfer HolyC tokens from the sender to this contract.
require(holyC.transferFrom(msg.sender, address(this), amount), "HolyC transfer failed");
uint256 fee;
uint256 netAmount;
// If sender is fee-exempt or fee is zero, no fee is deducted.
if (feeExempt[msg.sender] || compileRestoreFee == 0) {
fee = 0;
netAmount = amount;
} else {
fee = (amount * compileRestoreFee) / FEE_DENOMINATOR;
netAmount = amount - fee;
// Send the fee HolyC tokens directly to the burn address.
require(holyC.transfer(BURN_ADDRESS, fee), "HolyC fee transfer failed");
}
// Mint JIT tokens corresponding to the net HolyC compiled.
_mint(msg.sender, netAmount);
}
/// @notice Restores JIT tokens to redeem HolyC tokens.
/// The user burns their JIT tokens; a fee is deducted from the underlying HolyC,
/// and the net amount is transferred back to the user.
/// The deducted HolyC fee is sent to the burn address.
/// @param amount The amount of JIT tokens to restore.
function restore(uint256 amount) external {
require(amount > 0, "Amount must be greater than 0");
uint256 fee;
uint256 netAmount;
// Determine fee and net amount based on fee exemption.
if (feeExempt[msg.sender] || compileRestoreFee == 0) {
fee = 0;
netAmount = amount;
} else {
fee = (amount * compileRestoreFee) / FEE_DENOMINATOR;
netAmount = amount - fee;
}
// Burn the full amount of JIT tokens from the sender.
_burn(msg.sender, amount);
// Transfer the net HolyC tokens back to the user.
require(holyC.transfer(msg.sender, netAmount), "HolyC transfer failed");
// Send the fee HolyC tokens to the burn address.
if (fee > 0) {
require(holyC.transfer(BURN_ADDRESS, fee), "HolyC fee transfer failed");
}
}
// -------------------- JIT Transfer Function --------------------
/// @dev Overrides ERC20 _transfer to apply the transfer fee on every JIT token transfer.
/// The fee is burned (removed from circulation) by reducing the total supply.
/// Fee-exempt addresses or zero-amount transfers bypass the fee.
function _transfer(
address sender,
address recipient,
uint256 amount
) internal override {
// If sender is exempt, fee is zero.
if (feeExempt[sender] || transferFee == 0 || amount == 0) {
super._transfer(sender, recipient, amount);
} else {
// Calculate fee on JIT tokens.
uint256 feeAmount = (amount * transferFee) / FEE_DENOMINATOR;
uint256 netAmount = amount - feeAmount;
// Burn the fee portion from the sender (reducing total supply).
_burn(sender, feeAmount);
// Transfer the remaining tokens to the recipient.
super._transfer(sender, recipient, netAmount);
}
}
// -------------------- Hardcoded Metadata Functions --------------------
// Override name() and symbol() to return constant values.
function name() public pure override returns (string memory) {
return "Just-in-time Compiler";
}
function symbol() public pure override returns (string memory) {
return "JIT";
}
}
/*
████████████████████████████████████████
██████████████ FAQ - Just-in-time Compiler Contract ██████████████
████████████████████████████████████████
✅ How does HolyC convert into JIT?
- 1 HolyC is "compiled" into 1 JIT, minus the burn fee.
- The HolyC supply always backs the JIT supply.
✅ Can JIT supply ever exceed HolyC supply?
- No, JIT is only minted when HolyC is deposited.
- JIT is burned when converted back to HolyC.
✅ Do all JIT transfers burn tokens?
- Yes, every JIT transfer burns a portion of the tokens.
- Exceptions: Fee-exempt wallets do not burn.
✅ Is JIT a standard ERC20 token?
- Yes, JIT functions like a normal ERC20 token.
- The only difference is an automatic burn on transfers.
✅ Where do the burned tokens go?
- HolyC fees are sent to the burn address: 0x0000000000000000000000000000000000000369.
- JIT fees are removed from total supply (burned).
✅ What happens when I restore JIT into HolyC?
- JIT is burned, and HolyC is returned minus the burn fee.
✅ Who controls the contract?
- The owner (deployer) can adjust fees and fee exemptions.
- Ownership can be transferred or renounced.
████████████████████████████████████████
*/
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"shanghai","compilationTarget":{"Compiler.sol":"JustInTimeCompiler"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"holyCAddress","internalType":"address"},{"type":"uint256","name":"initialCompileRestoreFee","internalType":"uint256"},{"type":"uint256","name":"initialTransferFee","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"CompileRestoreFeeUpdated","inputs":[{"type":"uint256","name":"newFee","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FeeExemptionUpdated","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"bool","name":"isExempt","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TransferFeeUpdated","inputs":[{"type":"uint256","name":"newFee","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"BURN_ADDRESS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"FEE_DENOMINATOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"compile","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"compileRestoreFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"feeExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IHolyC"}],"name":"holyC","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"restore","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setCompileRestoreFee","inputs":[{"type":"uint256","name":"newFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeExemption","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTransferFee","inputs":[{"type":"uint256","name":"newFee","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"transferFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x608060405234801562000010575f80fd5b506040516200332e3803806200332e8339818101604052810190620000369190620003a7565b6040518060400160405280601581526020017f4a7573742d696e2d74696d6520436f6d70696c657200000000000000000000008152506040518060400160405280600381526020017f4a495400000000000000000000000000000000000000000000000000000000008152508160039081620000b391906200065b565b508060049081620000c591906200065b565b505050620000e8620000dc6200024060201b60201c565b6200024760201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000150906200079d565b60405180910390fd5b61c350821115620001a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001989062000831565b60405180910390fd5b61c350811115620001e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e0906200089f565b60405180910390fd5b8260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160078190555080600881905550505050620008bf565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000339826200030e565b9050919050565b6200034b816200032d565b811462000356575f80fd5b50565b5f81519050620003698162000340565b92915050565b5f819050919050565b62000383816200036f565b81146200038e575f80fd5b50565b5f81519050620003a18162000378565b92915050565b5f805f60608486031215620003c157620003c06200030a565b5b5f620003d08682870162000359565b9350506020620003e38682870162000391565b9250506040620003f68682870162000391565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200047c57607f821691505b60208210810362000492576200049162000437565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004b9565b620005028683620004b9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620005436200053d62000537846200036f565b6200051a565b6200036f565b9050919050565b5f819050919050565b6200055e8362000523565b620005766200056d826200054a565b848454620004c5565b825550505050565b5f90565b6200058c6200057e565b6200059981848462000553565b505050565b5b81811015620005c057620005b45f8262000582565b6001810190506200059f565b5050565b601f8211156200060f57620005d98162000498565b620005e484620004aa565b81016020851015620005f4578190505b6200060c6200060385620004aa565b8301826200059e565b50505b505050565b5f82821c905092915050565b5f620006315f198460080262000614565b1980831691505092915050565b5f6200064b838362000620565b9150826002028217905092915050565b620006668262000400565b67ffffffffffffffff8111156200068257620006816200040a565b5b6200068e825462000464565b6200069b828285620005c4565b5f60209050601f831160018114620006d1575f8415620006bc578287015190505b620006c885826200063e565b86555062000737565b601f198416620006e18662000498565b5f5b828110156200070a57848901518255600182019150602085019450602081019050620006e3565b868310156200072a578489015162000726601f89168262000620565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f486f6c794320616464726573732063616e6e6f74206265207a65726f000000005f82015250565b5f62000785601c836200073f565b915062000792826200074f565b602082019050919050565b5f6020820190508181035f830152620007b68162000777565b9050919050565b7f436f6d70696c652f526573746f7265206665652063616e6e6f742065786365655f8201527f6420353025000000000000000000000000000000000000000000000000000000602082015250565b5f620008196025836200073f565b91506200082682620007bd565b604082019050919050565b5f6020820190508181035f8301526200084a816200080b565b9050919050565b7f5472616e73666572206665652063616e6e6f74206578636565642035302500005f82015250565b5f62000887601e836200073f565b9150620008948262000851565b602082019050919050565b5f6020820190508181035f830152620008b88162000879565b9050919050565b612a6180620008cd5f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c80638f02bb5b116100dc578063acb2ad6f11610095578063d9666e8d1161006f578063d9666e8d1461044b578063dd62ed3e14610469578063f2fde38b14610499578063fccc2813146104b557610171565b8063acb2ad6f146103f3578063b534f47114610411578063d73792a91461042d57610171565b80638f02bb5b1461032157806395d89b411461033d57806396b67a6d1461035b5780639bea62ad14610377578063a457c2d714610393578063a9059cbb146103c357610171565b8063395093511161012e578063395093511461024d578063398daa851461027d57806370a08231146102ad578063715018a6146102dd578063751fd179146102e75780638da5cb5b1461030357610171565b806306fdde0314610175578063095ea7b31461019357806318160ddd146101c35780631bac444f146101e157806323b872dd146101ff578063313ce5671461022f575b5f80fd5b61017d6104d3565b60405161018a9190611c6f565b60405180910390f35b6101ad60048036038101906101a89190611d20565b610510565b6040516101ba9190611d78565b60405180910390f35b6101cb61052d565b6040516101d89190611da0565b60405180910390f35b6101e9610536565b6040516101f69190611e14565b60405180910390f35b61021960048036038101906102149190611e2d565b61055b565b6040516102269190611d78565b60405180910390f35b61023761064d565b6040516102449190611e98565b60405180910390f35b61026760048036038101906102629190611d20565b610655565b6040516102749190611d78565b60405180910390f35b61029760048036038101906102929190611eb1565b6106fc565b6040516102a49190611d78565b60405180910390f35b6102c760048036038101906102c29190611eb1565b610719565b6040516102d49190611da0565b60405180910390f35b6102e561075e565b005b61030160048036038101906102fc9190611f06565b6107e5565b005b61030b610907565b6040516103189190611f53565b60405180910390f35b61033b60048036038101906103369190611f6c565b61092f565b005b610345610a31565b6040516103529190611c6f565b60405180910390f35b61037560048036038101906103709190611f6c565b610a6e565b005b610391600480360381019061038c9190611f6c565b610b70565b005b6103ad60048036038101906103a89190611d20565b610e17565b6040516103ba9190611d78565b60405180910390f35b6103dd60048036038101906103d89190611d20565b610efd565b6040516103ea9190611d78565b60405180910390f35b6103fb610f1a565b6040516104089190611da0565b60405180910390f35b61042b60048036038101906104269190611f6c565b610f20565b005b6104356111c0565b6040516104429190611da0565b60405180910390f35b6104536111c7565b6040516104609190611da0565b60405180910390f35b610483600480360381019061047e9190611f97565b6111cd565b6040516104909190611da0565b60405180910390f35b6104b360048036038101906104ae9190611eb1565b61124f565b005b6104bd611345565b6040516104ca9190611f53565b60405180910390f35b60606040518060400160405280601581526020017f4a7573742d696e2d74696d6520436f6d70696c65720000000000000000000000815250905090565b5f61052361051c61134b565b8484611352565b6001905092915050565b5f600254905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6105a361134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990612045565b60405180910390fd5b6106368561062e61134b565b858403611352565b610641858585611515565b60019150509392505050565b5f6012905090565b5f6106f261066161134b565b848460015f61066e61134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106ed9190612090565b611352565b6001905092915050565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61076661134b565b73ffffffffffffffffffffffffffffffffffffffff16610784610907565b73ffffffffffffffffffffffffffffffffffffffff16146107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d19061210d565b60405180910390fd5b6107e35f6115d5565b565b6107ed61134b565b73ffffffffffffffffffffffffffffffffffffffff1661080b610907565b73ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108589061210d565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f69e34a174b4a0cce59950c4c852317e9797bdcae125fbf8b5dd8b4311384412f826040516108fb9190611d78565b60405180910390a25050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61093761134b565b73ffffffffffffffffffffffffffffffffffffffff16610955610907565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061210d565b60405180910390fd5b61c3508111156109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e790612175565b60405180910390fd5b806008819055507ff9f635b7cf851af6071aaf78ef8a5f752dc52f19d556fea4512b0c2ad4baea7281604051610a269190611da0565b60405180910390a150565b60606040518060400160405280600381526020017f4a49540000000000000000000000000000000000000000000000000000000000815250905090565b610a7661134b565b73ffffffffffffffffffffffffffffffffffffffff16610a94610907565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061210d565b60405180910390fd5b61c350811115610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612203565b60405180910390fd5b806007819055507f6720edeb1e54413dbb9ab80c08b35269492f6eb5793c06abe20b12a7f80952d081604051610b659190611da0565b60405180910390a150565b5f8111610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba99061226b565b60405180910390fd5b5f8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610c0a57505f600754145b15610c1a575f9150829050610c47565b620186a060075484610c2c9190612289565b610c3691906122f7565b91508183610c449190612327565b90505b610c513384611698565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610cad92919061235a565b6020604051808303815f875af1158015610cc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ced9190612395565b610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d239061240a565b60405180910390fd5b5f821115610e125760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401610d9292919061235a565b6020604051808303815f875af1158015610dae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd29190612395565b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890612472565b60405180910390fd5b5b505050565b5f8060015f610e2461134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590612500565b60405180910390fd5b610ef2610ee961134b565b85858403611352565b600191505092915050565b5f610f10610f0961134b565b8484611515565b6001905092915050565b60085481565b5f8111610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f599061226b565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610fc09392919061251e565b6020604051808303815f875af1158015610fdc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110009190612395565b61103f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110369061240a565b60405180910390fd5b5f8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061109757505f600754145b156110a7575f91508290506111b1565b620186a0600754846110b99190612289565b6110c391906122f7565b915081836110d19190612327565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b815260040161113192919061235a565b6020604051808303815f875af115801561114d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111719190612395565b6111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a790612472565b60405180910390fd5b5b6111bb3382611845565b505050565b620186a081565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61125761134b565b73ffffffffffffffffffffffffffffffffffffffff16611275610907565b73ffffffffffffffffffffffffffffffffffffffff16146112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29061210d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906125c3565b60405180910390fd5b611342816115d5565b50565b61036981565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790612651565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361142e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611425906126df565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115089190611da0565b60405180910390a3505050565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061156b57505f600854145b8061157557505f81145b1561158a57611585838383611986565b6115d0565b5f620186a06008548361159d9190612289565b6115a791906122f7565b90505f81836115b69190612327565b90506115c28583611698565b6115cd858583611986565b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061276d565b60405180910390fd5b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906127fb565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118389190611da0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90612863565b60405180910390fd5b8060025f8282546118c49190612090565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119169190612090565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161197a9190611da0565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906128f1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a599061297f565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90612a0d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b739190612090565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bd79190611da0565b60405180910390a350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611c1c578082015181840152602081019050611c01565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611c4182611be5565b611c4b8185611bef565b9350611c5b818560208601611bff565b611c6481611c27565b840191505092915050565b5f6020820190508181035f830152611c878184611c37565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611cbc82611c93565b9050919050565b611ccc81611cb2565b8114611cd6575f80fd5b50565b5f81359050611ce781611cc3565b92915050565b5f819050919050565b611cff81611ced565b8114611d09575f80fd5b50565b5f81359050611d1a81611cf6565b92915050565b5f8060408385031215611d3657611d35611c8f565b5b5f611d4385828601611cd9565b9250506020611d5485828601611d0c565b9150509250929050565b5f8115159050919050565b611d7281611d5e565b82525050565b5f602082019050611d8b5f830184611d69565b92915050565b611d9a81611ced565b82525050565b5f602082019050611db35f830184611d91565b92915050565b5f819050919050565b5f611ddc611dd7611dd284611c93565b611db9565b611c93565b9050919050565b5f611ded82611dc2565b9050919050565b5f611dfe82611de3565b9050919050565b611e0e81611df4565b82525050565b5f602082019050611e275f830184611e05565b92915050565b5f805f60608486031215611e4457611e43611c8f565b5b5f611e5186828701611cd9565b9350506020611e6286828701611cd9565b9250506040611e7386828701611d0c565b9150509250925092565b5f60ff82169050919050565b611e9281611e7d565b82525050565b5f602082019050611eab5f830184611e89565b92915050565b5f60208284031215611ec657611ec5611c8f565b5b5f611ed384828501611cd9565b91505092915050565b611ee581611d5e565b8114611eef575f80fd5b50565b5f81359050611f0081611edc565b92915050565b5f8060408385031215611f1c57611f1b611c8f565b5b5f611f2985828601611cd9565b9250506020611f3a85828601611ef2565b9150509250929050565b611f4d81611cb2565b82525050565b5f602082019050611f665f830184611f44565b92915050565b5f60208284031215611f8157611f80611c8f565b5b5f611f8e84828501611d0c565b91505092915050565b5f8060408385031215611fad57611fac611c8f565b5b5f611fba85828601611cd9565b9250506020611fcb85828601611cd9565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61202f602883611bef565b915061203a82611fd5565b604082019050919050565b5f6020820190508181035f83015261205c81612023565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61209a82611ced565b91506120a583611ced565b92508282019050808211156120bd576120bc612063565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6120f7602083611bef565b9150612102826120c3565b602082019050919050565b5f6020820190508181035f830152612124816120eb565b9050919050565b7f5472616e73666572206665652063616e6e6f74206578636565642035302500005f82015250565b5f61215f601e83611bef565b915061216a8261212b565b602082019050919050565b5f6020820190508181035f83015261218c81612153565b9050919050565b7f436f6d70696c652f526573746f7265206665652063616e6e6f742065786365655f8201527f6420353025000000000000000000000000000000000000000000000000000000602082015250565b5f6121ed602583611bef565b91506121f882612193565b604082019050919050565b5f6020820190508181035f83015261221a816121e1565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f612255601d83611bef565b915061226082612221565b602082019050919050565b5f6020820190508181035f83015261228281612249565b9050919050565b5f61229382611ced565b915061229e83611ced565b92508282026122ac81611ced565b915082820484148315176122c3576122c2612063565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61230182611ced565b915061230c83611ced565b92508261231c5761231b6122ca565b5b828204905092915050565b5f61233182611ced565b915061233c83611ced565b925082820390508181111561235457612353612063565b5b92915050565b5f60408201905061236d5f830185611f44565b61237a6020830184611d91565b9392505050565b5f8151905061238f81611edc565b92915050565b5f602082840312156123aa576123a9611c8f565b5b5f6123b784828501612381565b91505092915050565b7f486f6c7943207472616e73666572206661696c656400000000000000000000005f82015250565b5f6123f4601583611bef565b91506123ff826123c0565b602082019050919050565b5f6020820190508181035f830152612421816123e8565b9050919050565b7f486f6c794320666565207472616e73666572206661696c6564000000000000005f82015250565b5f61245c601983611bef565b915061246782612428565b602082019050919050565b5f6020820190508181035f83015261248981612450565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6124ea602583611bef565b91506124f582612490565b604082019050919050565b5f6020820190508181035f830152612517816124de565b9050919050565b5f6060820190506125315f830186611f44565b61253e6020830185611f44565b61254b6040830184611d91565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6125ad602683611bef565b91506125b882612553565b604082019050919050565b5f6020820190508181035f8301526125da816125a1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61263b602483611bef565b9150612646826125e1565b604082019050919050565b5f6020820190508181035f8301526126688161262f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6126c9602283611bef565b91506126d48261266f565b604082019050919050565b5f6020820190508181035f8301526126f6816126bd565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612757602183611bef565b9150612762826126fd565b604082019050919050565b5f6020820190508181035f8301526127848161274b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6127e5602283611bef565b91506127f08261278b565b604082019050919050565b5f6020820190508181035f830152612812816127d9565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61284d601f83611bef565b915061285882612819565b602082019050919050565b5f6020820190508181035f83015261287a81612841565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6128db602583611bef565b91506128e682612881565b604082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612969602383611bef565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6129f7602683611bef565b9150612a028261299d565b604082019050919050565b5f6020820190508181035f830152612a24816129eb565b905091905056fea2646970667358221220dcd228aba30978b66f24e53b4425d7a5daf9438a9fca0e9ff9382ff554b5bc4764736f6c634300081400330000000000000000000000006c8fdfd2cec0b83d69045074d57a87fa1525225a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x608060405234801561000f575f80fd5b5060043610610171575f3560e01c80638f02bb5b116100dc578063acb2ad6f11610095578063d9666e8d1161006f578063d9666e8d1461044b578063dd62ed3e14610469578063f2fde38b14610499578063fccc2813146104b557610171565b8063acb2ad6f146103f3578063b534f47114610411578063d73792a91461042d57610171565b80638f02bb5b1461032157806395d89b411461033d57806396b67a6d1461035b5780639bea62ad14610377578063a457c2d714610393578063a9059cbb146103c357610171565b8063395093511161012e578063395093511461024d578063398daa851461027d57806370a08231146102ad578063715018a6146102dd578063751fd179146102e75780638da5cb5b1461030357610171565b806306fdde0314610175578063095ea7b31461019357806318160ddd146101c35780631bac444f146101e157806323b872dd146101ff578063313ce5671461022f575b5f80fd5b61017d6104d3565b60405161018a9190611c6f565b60405180910390f35b6101ad60048036038101906101a89190611d20565b610510565b6040516101ba9190611d78565b60405180910390f35b6101cb61052d565b6040516101d89190611da0565b60405180910390f35b6101e9610536565b6040516101f69190611e14565b60405180910390f35b61021960048036038101906102149190611e2d565b61055b565b6040516102269190611d78565b60405180910390f35b61023761064d565b6040516102449190611e98565b60405180910390f35b61026760048036038101906102629190611d20565b610655565b6040516102749190611d78565b60405180910390f35b61029760048036038101906102929190611eb1565b6106fc565b6040516102a49190611d78565b60405180910390f35b6102c760048036038101906102c29190611eb1565b610719565b6040516102d49190611da0565b60405180910390f35b6102e561075e565b005b61030160048036038101906102fc9190611f06565b6107e5565b005b61030b610907565b6040516103189190611f53565b60405180910390f35b61033b60048036038101906103369190611f6c565b61092f565b005b610345610a31565b6040516103529190611c6f565b60405180910390f35b61037560048036038101906103709190611f6c565b610a6e565b005b610391600480360381019061038c9190611f6c565b610b70565b005b6103ad60048036038101906103a89190611d20565b610e17565b6040516103ba9190611d78565b60405180910390f35b6103dd60048036038101906103d89190611d20565b610efd565b6040516103ea9190611d78565b60405180910390f35b6103fb610f1a565b6040516104089190611da0565b60405180910390f35b61042b60048036038101906104269190611f6c565b610f20565b005b6104356111c0565b6040516104429190611da0565b60405180910390f35b6104536111c7565b6040516104609190611da0565b60405180910390f35b610483600480360381019061047e9190611f97565b6111cd565b6040516104909190611da0565b60405180910390f35b6104b360048036038101906104ae9190611eb1565b61124f565b005b6104bd611345565b6040516104ca9190611f53565b60405180910390f35b60606040518060400160405280601581526020017f4a7573742d696e2d74696d6520436f6d70696c65720000000000000000000000815250905090565b5f61052361051c61134b565b8484611352565b6001905092915050565b5f600254905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6105a361134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990612045565b60405180910390fd5b6106368561062e61134b565b858403611352565b610641858585611515565b60019150509392505050565b5f6012905090565b5f6106f261066161134b565b848460015f61066e61134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106ed9190612090565b611352565b6001905092915050565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61076661134b565b73ffffffffffffffffffffffffffffffffffffffff16610784610907565b73ffffffffffffffffffffffffffffffffffffffff16146107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d19061210d565b60405180910390fd5b6107e35f6115d5565b565b6107ed61134b565b73ffffffffffffffffffffffffffffffffffffffff1661080b610907565b73ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108589061210d565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f69e34a174b4a0cce59950c4c852317e9797bdcae125fbf8b5dd8b4311384412f826040516108fb9190611d78565b60405180910390a25050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61093761134b565b73ffffffffffffffffffffffffffffffffffffffff16610955610907565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061210d565b60405180910390fd5b61c3508111156109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e790612175565b60405180910390fd5b806008819055507ff9f635b7cf851af6071aaf78ef8a5f752dc52f19d556fea4512b0c2ad4baea7281604051610a269190611da0565b60405180910390a150565b60606040518060400160405280600381526020017f4a49540000000000000000000000000000000000000000000000000000000000815250905090565b610a7661134b565b73ffffffffffffffffffffffffffffffffffffffff16610a94610907565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061210d565b60405180910390fd5b61c350811115610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612203565b60405180910390fd5b806007819055507f6720edeb1e54413dbb9ab80c08b35269492f6eb5793c06abe20b12a7f80952d081604051610b659190611da0565b60405180910390a150565b5f8111610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba99061226b565b60405180910390fd5b5f8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610c0a57505f600754145b15610c1a575f9150829050610c47565b620186a060075484610c2c9190612289565b610c3691906122f7565b91508183610c449190612327565b90505b610c513384611698565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610cad92919061235a565b6020604051808303815f875af1158015610cc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ced9190612395565b610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d239061240a565b60405180910390fd5b5f821115610e125760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401610d9292919061235a565b6020604051808303815f875af1158015610dae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd29190612395565b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890612472565b60405180910390fd5b5b505050565b5f8060015f610e2461134b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590612500565b60405180910390fd5b610ef2610ee961134b565b85858403611352565b600191505092915050565b5f610f10610f0961134b565b8484611515565b6001905092915050565b60085481565b5f8111610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f599061226b565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610fc09392919061251e565b6020604051808303815f875af1158015610fdc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110009190612395565b61103f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110369061240a565b60405180910390fd5b5f8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061109757505f600754145b156110a7575f91508290506111b1565b620186a0600754846110b99190612289565b6110c391906122f7565b915081836110d19190612327565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b815260040161113192919061235a565b6020604051808303815f875af115801561114d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111719190612395565b6111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a790612472565b60405180910390fd5b5b6111bb3382611845565b505050565b620186a081565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61125761134b565b73ffffffffffffffffffffffffffffffffffffffff16611275610907565b73ffffffffffffffffffffffffffffffffffffffff16146112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29061210d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906125c3565b60405180910390fd5b611342816115d5565b50565b61036981565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790612651565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361142e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611425906126df565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115089190611da0565b60405180910390a3505050565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061156b57505f600854145b8061157557505f81145b1561158a57611585838383611986565b6115d0565b5f620186a06008548361159d9190612289565b6115a791906122f7565b90505f81836115b69190612327565b90506115c28583611698565b6115cd858583611986565b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061276d565b60405180910390fd5b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906127fb565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118389190611da0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90612863565b60405180910390fd5b8060025f8282546118c49190612090565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119169190612090565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161197a9190611da0565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906128f1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a599061297f565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90612a0d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b739190612090565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bd79190611da0565b60405180910390a350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611c1c578082015181840152602081019050611c01565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611c4182611be5565b611c4b8185611bef565b9350611c5b818560208601611bff565b611c6481611c27565b840191505092915050565b5f6020820190508181035f830152611c878184611c37565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611cbc82611c93565b9050919050565b611ccc81611cb2565b8114611cd6575f80fd5b50565b5f81359050611ce781611cc3565b92915050565b5f819050919050565b611cff81611ced565b8114611d09575f80fd5b50565b5f81359050611d1a81611cf6565b92915050565b5f8060408385031215611d3657611d35611c8f565b5b5f611d4385828601611cd9565b9250506020611d5485828601611d0c565b9150509250929050565b5f8115159050919050565b611d7281611d5e565b82525050565b5f602082019050611d8b5f830184611d69565b92915050565b611d9a81611ced565b82525050565b5f602082019050611db35f830184611d91565b92915050565b5f819050919050565b5f611ddc611dd7611dd284611c93565b611db9565b611c93565b9050919050565b5f611ded82611dc2565b9050919050565b5f611dfe82611de3565b9050919050565b611e0e81611df4565b82525050565b5f602082019050611e275f830184611e05565b92915050565b5f805f60608486031215611e4457611e43611c8f565b5b5f611e5186828701611cd9565b9350506020611e6286828701611cd9565b9250506040611e7386828701611d0c565b9150509250925092565b5f60ff82169050919050565b611e9281611e7d565b82525050565b5f602082019050611eab5f830184611e89565b92915050565b5f60208284031215611ec657611ec5611c8f565b5b5f611ed384828501611cd9565b91505092915050565b611ee581611d5e565b8114611eef575f80fd5b50565b5f81359050611f0081611edc565b92915050565b5f8060408385031215611f1c57611f1b611c8f565b5b5f611f2985828601611cd9565b9250506020611f3a85828601611ef2565b9150509250929050565b611f4d81611cb2565b82525050565b5f602082019050611f665f830184611f44565b92915050565b5f60208284031215611f8157611f80611c8f565b5b5f611f8e84828501611d0c565b91505092915050565b5f8060408385031215611fad57611fac611c8f565b5b5f611fba85828601611cd9565b9250506020611fcb85828601611cd9565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61202f602883611bef565b915061203a82611fd5565b604082019050919050565b5f6020820190508181035f83015261205c81612023565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61209a82611ced565b91506120a583611ced565b92508282019050808211156120bd576120bc612063565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6120f7602083611bef565b9150612102826120c3565b602082019050919050565b5f6020820190508181035f830152612124816120eb565b9050919050565b7f5472616e73666572206665652063616e6e6f74206578636565642035302500005f82015250565b5f61215f601e83611bef565b915061216a8261212b565b602082019050919050565b5f6020820190508181035f83015261218c81612153565b9050919050565b7f436f6d70696c652f526573746f7265206665652063616e6e6f742065786365655f8201527f6420353025000000000000000000000000000000000000000000000000000000602082015250565b5f6121ed602583611bef565b91506121f882612193565b604082019050919050565b5f6020820190508181035f83015261221a816121e1565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f612255601d83611bef565b915061226082612221565b602082019050919050565b5f6020820190508181035f83015261228281612249565b9050919050565b5f61229382611ced565b915061229e83611ced565b92508282026122ac81611ced565b915082820484148315176122c3576122c2612063565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61230182611ced565b915061230c83611ced565b92508261231c5761231b6122ca565b5b828204905092915050565b5f61233182611ced565b915061233c83611ced565b925082820390508181111561235457612353612063565b5b92915050565b5f60408201905061236d5f830185611f44565b61237a6020830184611d91565b9392505050565b5f8151905061238f81611edc565b92915050565b5f602082840312156123aa576123a9611c8f565b5b5f6123b784828501612381565b91505092915050565b7f486f6c7943207472616e73666572206661696c656400000000000000000000005f82015250565b5f6123f4601583611bef565b91506123ff826123c0565b602082019050919050565b5f6020820190508181035f830152612421816123e8565b9050919050565b7f486f6c794320666565207472616e73666572206661696c6564000000000000005f82015250565b5f61245c601983611bef565b915061246782612428565b602082019050919050565b5f6020820190508181035f83015261248981612450565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6124ea602583611bef565b91506124f582612490565b604082019050919050565b5f6020820190508181035f830152612517816124de565b9050919050565b5f6060820190506125315f830186611f44565b61253e6020830185611f44565b61254b6040830184611d91565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6125ad602683611bef565b91506125b882612553565b604082019050919050565b5f6020820190508181035f8301526125da816125a1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61263b602483611bef565b9150612646826125e1565b604082019050919050565b5f6020820190508181035f8301526126688161262f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6126c9602283611bef565b91506126d48261266f565b604082019050919050565b5f6020820190508181035f8301526126f6816126bd565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612757602183611bef565b9150612762826126fd565b604082019050919050565b5f6020820190508181035f8301526127848161274b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6127e5602283611bef565b91506127f08261278b565b604082019050919050565b5f6020820190508181035f830152612812816127d9565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61284d601f83611bef565b915061285882612819565b602082019050919050565b5f6020820190508181035f83015261287a81612841565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6128db602583611bef565b91506128e682612881565b604082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612969602383611bef565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6129f7602683611bef565b9150612a028261299d565b604082019050919050565b5f6020820190508181035f830152612a24816129eb565b905091905056fea2646970667358221220dcd228aba30978b66f24e53b4425d7a5daf9438a9fca0e9ff9382ff554b5bc4764736f6c63430008140033