false
true
0

Contract Address Details

0x5F1F43Bf72408536E3cf1E04E60910fE76d14975

Contract Name
End
Creator
0x696fc8–bf69cb at 0x8d8e34–b4dfe0
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
26168624
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0xad2348d3ec2e3655413e2427fd0a5ae6d9448537.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
End




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
200
Verified at
2025-04-18T14:14:27.690311Z

Contract source code

// SPDX-License-Identifier: AGPL-3.0-or-later

/// end.sol -- global settlement engine

pragma solidity ^0.6.12;

interface VatLike {
    function dai(address) external view returns (uint256);
    function ilks(bytes32 ilk) external returns (uint256 Art, uint256 rate, uint256 spot, uint256 line, uint256 dust);
    function urns(bytes32 ilk, address urn) external returns (uint256 ink, uint256 art);
    function debt() external returns (uint256);
    function move(address src, address dst, uint256 rad) external;
    function hope(address) external;
    function flux(bytes32 ilk, address src, address dst, uint256 rad) external;
    function grab(bytes32 i, address u, address v, address w, int256 dink, int256 dart) external;
    function suck(address u, address v, uint256 rad) external;
    function cage() external;
}

interface DogLike {
    function ilks(bytes32) external returns (address clip, uint256 chop, uint256 hole, uint256 dirt);
    function cage() external;
}

interface PotLike {
    function cage() external;
}

interface VowLike {
    function cage() external;
}

interface ClipLike {
    function sales(uint256 id) external view returns (uint256 pos, uint256 tab, uint256 lot, address usr, uint96 tic, uint256 top);
    function yank(uint256 id) external;
}

interface SpotLike {
    function par() external view returns (uint256);
    function ilks(bytes32) external view returns (PipLike pip, uint256 mat);
    function cage() external;
}

interface PipLike {
    function read() external view returns (bytes32);
}

contract End {
    // --- Auth ---
    mapping (address => uint256) public wards;
    function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); }
    function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); }
    modifier auth {
        require(wards[msg.sender] == 1, "End/not-authorized");
        _;
    }

    // --- Data ---
    VatLike  public vat;
    DogLike  public dog;
    VowLike  public vow;
    SpotLike public spot;
    PotLike  public pot; 


    uint256  public live;
    uint256  public when;
    uint256  public wait;
    uint256  public debt;

    mapping (bytes32 => uint256) public tag;
    mapping (bytes32 => uint256) public gap;
    mapping (bytes32 => uint256) public Art;
    mapping (bytes32 => uint256) public fix;

    mapping (address => uint256)                      public bag;
    mapping (bytes32 => mapping (address => uint256)) public out;

    // --- Events ---
    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event File(bytes32 indexed what, uint256 data);
    event File(bytes32 indexed what, address data);
    event Cage();
    event Cage(bytes32 indexed ilk);
    event Snip(bytes32 indexed ilk, uint256 indexed id, address indexed usr, uint256 tab, uint256 lot, uint256 art);
    event Skim(bytes32 indexed ilk, address indexed urn, uint256 wad, uint256 art);
    event Free(bytes32 indexed ilk, address indexed usr, uint256 ink);
    event Thaw();
    event Flow(bytes32 indexed ilk);
    event Pack(address indexed usr, uint256 wad);
    event Cash(bytes32 indexed ilk, address indexed usr, uint256 wad);

    // --- Init ---
    constructor() public {
        wards[msg.sender] = 1;
        live = 1;
        emit Rely(msg.sender);
    }

    // --- Math ---
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x + y;
        require(z >= x);
    }
    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x);
    }
    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x);
    }
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        return x <= y ? x : y;
    }
    function rmul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = mul(x, y) / RAY;
    }
    function wdiv(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = mul(x, WAD) / y;
    }

    // --- Administration ---
    function file(bytes32 what, address data) external auth {
        require(live == 1, "End/not-live");
        if (what == "vat")  vat = VatLike(data);
        else if (what == "dog")   dog = DogLike(data);
        else if (what == "vow")   vow = VowLike(data);
        else if (what == "spot") spot = SpotLike(data);
        else if (what == "pot") pot = PotLike(data); 

        else revert("End/file-unrecognized-param");
        emit File(what, data);
    }
    function file(bytes32 what, uint256 data) external auth {
        require(live == 1, "End/not-live");
        if (what == "wait") wait = data;
        else revert("End/file-unrecognized-param");
        emit File(what, data);
    }

    // --- Settlement ---
    function cage() external auth {
        require(live == 1, "End/not-live");
        live = 0;
        when = block.timestamp;
        vat.cage();
        dog.cage();
        vow.cage();
        spot.cage();
        pot.cage(); 
        emit Cage();
    }

    function cage(bytes32 ilk) external {
        require(live == 0, "End/still-live");
        require(tag[ilk] == 0, "End/tag-ilk-already-defined");
        (Art[ilk],,,,) = vat.ilks(ilk);
        (PipLike pip,) = spot.ilks(ilk);
        tag[ilk] = wdiv(spot.par(), uint256(pip.read()));
        emit Cage(ilk);
    }

    function snip(bytes32 ilk, uint256 id) external {
        require(tag[ilk] != 0, "End/tag-ilk-not-defined");

        (address _clip,,,) = dog.ilks(ilk);
        ClipLike clip = ClipLike(_clip);
        (, uint256 rate,,,) = vat.ilks(ilk);
        (, uint256 tab, uint256 lot, address usr,,) = clip.sales(id);

        vat.suck(address(vow), address(vow),  tab);
        clip.yank(id);

        uint256 art = tab / rate;
        Art[ilk] = add(Art[ilk], art);
        require(int256(lot) >= 0 && int256(art) >= 0, "End/overflow");
        vat.grab(ilk, usr, address(this), address(vow), int256(lot), int256(art));
        emit Snip(ilk, id, usr, tab, lot, art);
    }

    function skim(bytes32 ilk, address urn) external {
        require(tag[ilk] != 0, "End/tag-ilk-not-defined");
        (, uint256 rate,,,) = vat.ilks(ilk);
        (uint256 ink, uint256 art) = vat.urns(ilk, urn);

        uint256 owe = rmul(rmul(art, rate), tag[ilk]);
        uint256 wad = min(ink, owe);
        gap[ilk] = add(gap[ilk], sub(owe, wad));

        require(wad <= 2**255 && art <= 2**255, "End/overflow");
        vat.grab(ilk, urn, address(this), address(vow), -int256(wad), -int256(art));
        emit Skim(ilk, urn, wad, art);
    }

    function free(bytes32 ilk) external {
        require(live == 0, "End/still-live");
        (uint256 ink, uint256 art) = vat.urns(ilk, msg.sender);
        require(art == 0, "End/art-not-zero");
        require(ink <= 2**255, "End/overflow");
        vat.grab(ilk, msg.sender, msg.sender, address(vow), -int256(ink), 0);
        emit Free(ilk, msg.sender, ink);
    }

    function thaw() external {
        require(live == 0, "End/still-live");
        require(debt == 0, "End/debt-not-zero");
        require(vat.dai(address(vow)) == 0, "End/surplus-not-zero");
        require(block.timestamp >= add(when, wait), "End/wait-not-finished");
        debt = vat.debt();
        emit Thaw();
    }

    function flow(bytes32 ilk) external {
        require(debt != 0, "End/debt-zero");
        require(fix[ilk] == 0, "End/fix-ilk-already-defined");

        (, uint256 rate,,,) = vat.ilks(ilk);
        uint256 wad = rmul(rmul(Art[ilk], rate), tag[ilk]);
        fix[ilk] = mul(sub(wad, gap[ilk]), RAY) / (debt / RAY);
        emit Flow(ilk);
    }

    function pack(uint256 wad) external {
        require(debt != 0, "End/debt-zero");
        vat.move(msg.sender, address(vow), mul(wad, RAY));
        bag[msg.sender] = add(bag[msg.sender], wad);
        emit Pack(msg.sender, wad);
    }

    function cash(bytes32 ilk, uint256 wad) external {
        require(fix[ilk] != 0, "End/fix-ilk-not-defined");
        vat.flux(ilk, address(this), msg.sender, rmul(wad, fix[ilk]));
        out[ilk][msg.sender] = add(out[ilk][msg.sender], wad);
        require(out[ilk][msg.sender] <= bag[msg.sender], "End/insufficient-bag-balance");
        emit Cash(ilk, msg.sender, wad);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Cage","inputs":[],"anonymous":false},{"type":"event","name":"Cage","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"Cash","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"uint256","name":"data","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"address","name":"data","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Flow","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"Free","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"ink","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Pack","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Skim","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"urn","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false},{"type":"uint256","name":"art","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Snip","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"tab","internalType":"uint256","indexed":false},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false},{"type":"uint256","name":"art","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Thaw","inputs":[],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"Art","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"bag","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cash","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"debt","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DogLike"}],"name":"dog","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"uint256","name":"data","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"address","name":"data","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fix","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"flow","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"free","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gap","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"live","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"out","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pack","inputs":[{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract PotLike"}],"name":"pot","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"skim","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"address","name":"urn","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"snip","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract SpotLike"}],"name":"spot","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tag","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"thaw","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract VatLike"}],"name":"vat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract VowLike"}],"name":"vow","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wait","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"when","inputs":[]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b5033600081815260208190526040808220600190819055600655517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a261211d8061005e6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063c939ebfc116100a2578063e2b0caef11610071578063e2b0caef14610464578063e6ee62aa1461046c578063ee6447b514610489578063fe8507c6146104a6576101cf565b8063c939ebfc146103d2578063d4e8be83146103fe578063e1340a3d1461042a578063e2702fdc14610447576101cf565b80639c52a7f1116100de5780639c52a7f114610361578063bf353dbb14610387578063c3b3ad7f146103ad578063c83062c6146103b5576101cf565b806389ea45d3146103075780639255f80914610333578063957aa58c14610359576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146102b457806369245009146102da5780636ea42555146102e25780636f265b93146102ff576101cf565b8063626cb3c51461028757806363fad85e1461028f57806364bd7013146102ac576101cf565b806338c6de40116101ad57806338c6de40146102375780634a10eaa61461025a5780634ba2363a146102775780635920375c1461027f576101cf565b80630dca59c1146101d457806329ae8114146101ee57806336569e7714610213575b600080fd5b6101dc6104c9565b60408051918252519081900360200190f35b6102116004803603604081101561020457600080fd5b50803590602001356104cf565b005b61021b61060e565b604080516001600160a01b039092168252519081900360200190f35b6102116004803603604081101561024d57600080fd5b508035906020013561061d565b6102116004803603602081101561027057600080fd5b5035610a4c565b61021b610c37565b610211610c46565b61021b610e9e565b6101dc600480360360208110156102a557600080fd5b5035610ead565b6101dc610ebf565b610211600480360360208110156102ca57600080fd5b50356001600160a01b0316610ec5565b610211610f63565b610211600480360360208110156102f857600080fd5b5035611223565b61021b61136d565b6102116004803603604081101561031d57600080fd5b50803590602001356001600160a01b031661137c565b6101dc6004803603602081101561034957600080fd5b50356001600160a01b031661167f565b6101dc611691565b6102116004803603602081101561037757600080fd5b50356001600160a01b0316611697565b6101dc6004803603602081101561039d57600080fd5b50356001600160a01b0316611734565b61021b611746565b610211600480360360208110156103cb57600080fd5b5035611755565b6101dc600480360360408110156103e857600080fd5b50803590602001356001600160a01b031661197a565b6102116004803603604081101561041457600080fd5b50803590602001356001600160a01b0316611997565b6101dc6004803603602081101561044057600080fd5b5035611b5c565b6102116004803603602081101561045d57600080fd5b5035611b6e565b6101dc611e3a565b6101dc6004803603602081101561048257600080fd5b5035611e40565b6101dc6004803603602081101561049f57600080fd5b5035611e52565b610211600480360360408110156104bc57600080fd5b5080359060200135611e64565b60095481565b33600090815260208190526040902054600114610528576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b60065460011461056e576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81631dd85a5d60e21b14156105875760088190556105d4565b6040805162461bcd60e51b815260206004820152601b60248201527f456e642f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6001546001600160a01b031681565b6000828152600a6020526040902054610677576040805162461bcd60e51b8152602060048201526017602482015276115b990bdd1859cb5a5b1acb5b9bdd0b5919599a5b9959604a1b604482015290519081900360640190fd5b60025460408051636cb1c69b60e11b81526004810185905290516000926001600160a01b03169163d9638d3691602480830192608092919082900301818787803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b505050506040513d60808110156106ee57600080fd5b505160015460408051636cb1c69b60e11b815260048101879052905192935083926000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050506040513d60a081101561076c57600080fd5b50602001516040805163b5f522f760e01b8152600481018790529051919250600091829182916001600160a01b0387169163b5f522f79160248083019260c0929190829003018186803b1580156107c257600080fd5b505afa1580156107d6573d6000803e3d6000fd5b505050506040513d60c08110156107ec57600080fd5b506020810151604080830151606090930151600154600354835163f24e23eb60e01b81526001600160a01b03918216600482018190526024820152604481018690529351949850949650909450929092169163f24e23eb91606480830192600092919082900301818387803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505050846001600160a01b03166326e027f1886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b5050505060008484816108e557fe5b60008b8152600c602052604090205491900491506109039082612047565b60008a8152600c60205260408120919091558312801590610925575060008112155b610965576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b8152600481018d90526001600160a01b03868116602483015230604483015292831660648201526084810187905260a4810185905290519190921691637bab3f409160c480830192600092919082900301818387803b1580156109d957600080fd5b505af11580156109ed573d6000803e3d6000fd5b5050604080518781526020810187905280820185905290516001600160a01b03861693508b92508c917ffc67e20caaffa015d51f696df8ea5c273ba269c69bdc2ec31c1334d01286eaa4919081900360600190a4505050505050505050565b600954610a90576040805162461bcd60e51b815260206004820152600d60248201526c456e642f646562742d7a65726f60981b604482015290519081900360640190fd5b6000818152600d602052604090205415610af1576040805162461bcd60e51b815260206004820152601b60248201527f456e642f6669782d696c6b2d616c72656164792d646566696e65640000000000604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810184905290516000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050506040513d60a0811015610b6857600080fd5b506020908101516000848152600c9092526040822054909250610ba390610b8f908461205d565b6000858152600a602052604090205461205d565b90506b033b2e3c9fd0803ce800000060095481610bbc57fe5b04610bef610bdd83600b600088815260200190815260200160002054612085565b6b033b2e3c9fd0803ce8000000612095565b81610bf657fe5b6000858152600d6020526040808220939092049092555184917f8d1d5ae676a6db1f6f14414f8a6c78941bbfb700fe3f3be6d3245f26c2f2d55091a2505050565b6005546001600160a01b031681565b60065415610c8c576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b60095415610cd5576040805162461bcd60e51b8152602060048201526011602482015270456e642f646562742d6e6f742d7a65726f60781b604482015290519081900360640190fd5b60015460035460408051633612d9a360e11b81526001600160a01b03928316600482015290519190921691636c25b346916024808301926020929190829003018186803b158015610d2557600080fd5b505afa158015610d39573d6000803e3d6000fd5b505050506040513d6020811015610d4f57600080fd5b505115610d9a576040805162461bcd60e51b8152602060048201526014602482015273456e642f737572706c75732d6e6f742d7a65726f60601b604482015290519081900360640190fd5b610da8600754600854612047565b421015610df4576040805162461bcd60e51b8152602060048201526015602482015274115b990bddd85a5d0b5b9bdd0b599a5b9a5cda1959605a1b604482015290519081900360640190fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050506040513d6020811015610e6e57600080fd5b50516009556040517f4df15159e645ba7d02cadde0bc937abef5ad0134623c00de50a31750b85978b990600090a1565b6003546001600160a01b031681565b600d6020526000908152604090205481565b60085481565b33600090815260208190526040902054600114610f1e576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610fbc576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600654600114611002576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b600060068190554260075560015460408051636924500960e01b815290516001600160a01b039092169263692450099260048084019382900301818387803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b50505050600260009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110b557600080fd5b505af11580156110c9573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561111d57600080fd5b505af1158015611131573d6000803e3d6000fd5b50506004805460408051636924500960e01b815290516001600160a01b03909216945063692450099350808301926000929182900301818387803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111e057600080fd5b505af11580156111f4573d6000803e3d6000fd5b50506040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda925060009150a1565b600954611267576040805162461bcd60e51b815260206004820152600d60248201526c456e642f646562742d7a65726f60981b604482015290519081900360640190fd5b6001546003546001600160a01b039182169163bb35783b91339116611298856b033b2e3c9fd0803ce8000000612095565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b5050336000908152600e60205260409020546113219250905082612047565b336000818152600e6020908152604091829020939093558051848152905191927f47a981d8cbc0f6df64c9be4ce0a423071a088bd46c549bbd11a4d566e031fe0c92918290030190a250565b6004546001600160a01b031681565b6000828152600a60205260409020546113d6576040805162461bcd60e51b8152602060048201526017602482015276115b990bdd1859cb5a5b1acb5b9bdd0b5919599a5b9959604a1b604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810185905290516000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050506040513d60a081101561144d57600080fd5b5060200151600154604080516309092f9760e21b8152600481018790526001600160a01b038681166024830152825194955060009485949190911692632424be5c926044808201939182900301818787803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050506040513d60408110156114d557600080fd5b508051602090910151909250905060006115066114f2838661205d565b6000888152600a602052604090205461205d565b9050600061151484836120b9565b6000888152600b6020526040902054909150611539906115348484612085565b612047565b6000888152600b6020526040902055600160ff1b81118015906115605750600160ff1b8311155b6115a0576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b8152600481018b90526001600160a01b038a8116602483015230604483015292831660648201526000858103608483015287810360a483015291519290931692637bab3f409260c4808301939282900301818387803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b50505050856001600160a01b0316877fa05b7b56166c25efbac063da905f9ea6aa1dc5101f95b43c7a838aace979ab598386604051808381526020018281526020019250505060405180910390a350505050505050565b600e6020526000908152604090205481565b60065481565b336000908152602081905260409020546001146116f0576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006020819052908152604090205481565b6002546001600160a01b031681565b6006541561179b576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b600154604080516309092f9760e21b815260048101849052336024820152815160009384936001600160a01b0390911692632424be5c926044808301939282900301818787803b1580156117ee57600080fd5b505af1158015611802573d6000803e3d6000fd5b505050506040513d604081101561181857600080fd5b5080516020909101519092509050801561186c576040805162461bcd60e51b815260206004820152601060248201526f456e642f6172742d6e6f742d7a65726f60801b604482015290519081900360640190fd5b600160ff1b8211156118b4576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b815260048101879052336024820181905260448201526001600160a01b0392831660648201526000868103608483015260a4820181905291519290931692637bab3f409260c4808301939282900301818387803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b50506040805185815290513393508692507ff26f2b994a5e16f0960958e62541681f9e3e84d4caac2e487d25e0c75243f0d89181900360200190a3505050565b600f60209081526000928352604080842090915290825290205481565b336000908152602081905260409020546001146119f0576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600654600114611a36576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81621d985d60ea1b1415611a6457600180546001600160a01b0319166001600160a01b038316179055611b19565b8162646f6760e81b1415611a9257600280546001600160a01b0319166001600160a01b038316179055611b19565b8162766f7760e81b1415611ac057600380546001600160a01b0319166001600160a01b038316179055611b19565b81631cdc1bdd60e21b1415611aef57600480546001600160a01b0319166001600160a01b038316179055611b19565b81621c1bdd60ea1b141561058757600580546001600160a01b0319166001600160a01b0383161790555b604080516001600160a01b0383168152905183917f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba919081900360200190a25050565b600c6020526000908152604090205481565b60065415611bb4576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b6000818152600a602052604090205415611c15576040805162461bcd60e51b815260206004820152601b60248201527f456e642f7461672d696c6b2d616c72656164792d646566696e65640000000000604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810184905290516001600160a01b039092169163d9638d369160248082019260a0929091908290030181600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b505050506040513d60a0811015611c8d57600080fd5b50516000828152600c602052604080822092909255600480548351636cb1c69b60e11b8152918201859052835192936001600160a01b039091169263d9638d36926024808201939291829003018186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d6040811015611d1457600080fd5b5051600480546040805163495d32cb60e01b81529051939450611dfc936001600160a01b039092169263495d32cb928282019260209290829003018186803b158015611d5f57600080fd5b505afa158015611d73573d6000803e3d6000fd5b505050506040513d6020811015611d8957600080fd5b5051604080516315f789a960e21b815290516001600160a01b038516916357de26a4916004808301926020929190829003018186803b158015611dcb57600080fd5b505afa158015611ddf573d6000803e3d6000fd5b505050506040513d6020811015611df557600080fd5b50516120d2565b6000838152600a602052604080822092909255905183917f4a9efa0a0e3f548761a6924fe06ac5cb94ecdbc08b10d855bbcc04e37c4910db91a25050565b60075481565b600b6020526000908152604090205481565b600a6020526000908152604090205481565b6000828152600d6020526040902054611ec4576040805162461bcd60e51b815260206004820152601760248201527f456e642f6669782d696c6b2d6e6f742d646566696e6564000000000000000000604482015290519081900360640190fd5b6001546000838152600d60205260409020546001600160a01b0390911690636111be2e90849030903390611ef990879061205d565b6040518563ffffffff1660e01b815260040180858152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050600060405180830381600087803b158015611f5657600080fd5b505af1158015611f6a573d6000803e3d6000fd5b5050506000838152600f60209081526040808320338452909152902054611f92915082612047565b6000838152600f60209081526040808320338452808352818420859055600e8352922054919052101561200c576040805162461bcd60e51b815260206004820152601c60248201527f456e642f696e73756666696369656e742d6261672d62616c616e636500000000604482015290519081900360640190fd5b604080518281529051339184917f888c7c01b06fd8004523e2bc9a274be1feaa9f03579ae5f568061dac078793c99181900360200190a35050565b8181018281101561205757600080fd5b92915050565b60006b033b2e3c9fd0803ce80000006120768484612095565b8161207d57fe5b049392505050565b8082038281111561205757600080fd5b60008115806120b0575050808202828282816120ad57fe5b04145b61205757600080fd5b6000818311156120c957816120cb565b825b9392505050565b60008161207684670de0b6b3a764000061209556fea2646970667358221220f58b9fdd5438bdc56a484b3bd6e0040836e5ba2a264b34ceb2556c80f5bb138564736f6c634300060c0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063c939ebfc116100a2578063e2b0caef11610071578063e2b0caef14610464578063e6ee62aa1461046c578063ee6447b514610489578063fe8507c6146104a6576101cf565b8063c939ebfc146103d2578063d4e8be83146103fe578063e1340a3d1461042a578063e2702fdc14610447576101cf565b80639c52a7f1116100de5780639c52a7f114610361578063bf353dbb14610387578063c3b3ad7f146103ad578063c83062c6146103b5576101cf565b806389ea45d3146103075780639255f80914610333578063957aa58c14610359576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146102b457806369245009146102da5780636ea42555146102e25780636f265b93146102ff576101cf565b8063626cb3c51461028757806363fad85e1461028f57806364bd7013146102ac576101cf565b806338c6de40116101ad57806338c6de40146102375780634a10eaa61461025a5780634ba2363a146102775780635920375c1461027f576101cf565b80630dca59c1146101d457806329ae8114146101ee57806336569e7714610213575b600080fd5b6101dc6104c9565b60408051918252519081900360200190f35b6102116004803603604081101561020457600080fd5b50803590602001356104cf565b005b61021b61060e565b604080516001600160a01b039092168252519081900360200190f35b6102116004803603604081101561024d57600080fd5b508035906020013561061d565b6102116004803603602081101561027057600080fd5b5035610a4c565b61021b610c37565b610211610c46565b61021b610e9e565b6101dc600480360360208110156102a557600080fd5b5035610ead565b6101dc610ebf565b610211600480360360208110156102ca57600080fd5b50356001600160a01b0316610ec5565b610211610f63565b610211600480360360208110156102f857600080fd5b5035611223565b61021b61136d565b6102116004803603604081101561031d57600080fd5b50803590602001356001600160a01b031661137c565b6101dc6004803603602081101561034957600080fd5b50356001600160a01b031661167f565b6101dc611691565b6102116004803603602081101561037757600080fd5b50356001600160a01b0316611697565b6101dc6004803603602081101561039d57600080fd5b50356001600160a01b0316611734565b61021b611746565b610211600480360360208110156103cb57600080fd5b5035611755565b6101dc600480360360408110156103e857600080fd5b50803590602001356001600160a01b031661197a565b6102116004803603604081101561041457600080fd5b50803590602001356001600160a01b0316611997565b6101dc6004803603602081101561044057600080fd5b5035611b5c565b6102116004803603602081101561045d57600080fd5b5035611b6e565b6101dc611e3a565b6101dc6004803603602081101561048257600080fd5b5035611e40565b6101dc6004803603602081101561049f57600080fd5b5035611e52565b610211600480360360408110156104bc57600080fd5b5080359060200135611e64565b60095481565b33600090815260208190526040902054600114610528576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b60065460011461056e576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81631dd85a5d60e21b14156105875760088190556105d4565b6040805162461bcd60e51b815260206004820152601b60248201527f456e642f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6001546001600160a01b031681565b6000828152600a6020526040902054610677576040805162461bcd60e51b8152602060048201526017602482015276115b990bdd1859cb5a5b1acb5b9bdd0b5919599a5b9959604a1b604482015290519081900360640190fd5b60025460408051636cb1c69b60e11b81526004810185905290516000926001600160a01b03169163d9638d3691602480830192608092919082900301818787803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b505050506040513d60808110156106ee57600080fd5b505160015460408051636cb1c69b60e11b815260048101879052905192935083926000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050506040513d60a081101561076c57600080fd5b50602001516040805163b5f522f760e01b8152600481018790529051919250600091829182916001600160a01b0387169163b5f522f79160248083019260c0929190829003018186803b1580156107c257600080fd5b505afa1580156107d6573d6000803e3d6000fd5b505050506040513d60c08110156107ec57600080fd5b506020810151604080830151606090930151600154600354835163f24e23eb60e01b81526001600160a01b03918216600482018190526024820152604481018690529351949850949650909450929092169163f24e23eb91606480830192600092919082900301818387803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505050846001600160a01b03166326e027f1886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b5050505060008484816108e557fe5b60008b8152600c602052604090205491900491506109039082612047565b60008a8152600c60205260408120919091558312801590610925575060008112155b610965576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b8152600481018d90526001600160a01b03868116602483015230604483015292831660648201526084810187905260a4810185905290519190921691637bab3f409160c480830192600092919082900301818387803b1580156109d957600080fd5b505af11580156109ed573d6000803e3d6000fd5b5050604080518781526020810187905280820185905290516001600160a01b03861693508b92508c917ffc67e20caaffa015d51f696df8ea5c273ba269c69bdc2ec31c1334d01286eaa4919081900360600190a4505050505050505050565b600954610a90576040805162461bcd60e51b815260206004820152600d60248201526c456e642f646562742d7a65726f60981b604482015290519081900360640190fd5b6000818152600d602052604090205415610af1576040805162461bcd60e51b815260206004820152601b60248201527f456e642f6669782d696c6b2d616c72656164792d646566696e65640000000000604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810184905290516000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050506040513d60a0811015610b6857600080fd5b506020908101516000848152600c9092526040822054909250610ba390610b8f908461205d565b6000858152600a602052604090205461205d565b90506b033b2e3c9fd0803ce800000060095481610bbc57fe5b04610bef610bdd83600b600088815260200190815260200160002054612085565b6b033b2e3c9fd0803ce8000000612095565b81610bf657fe5b6000858152600d6020526040808220939092049092555184917f8d1d5ae676a6db1f6f14414f8a6c78941bbfb700fe3f3be6d3245f26c2f2d55091a2505050565b6005546001600160a01b031681565b60065415610c8c576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b60095415610cd5576040805162461bcd60e51b8152602060048201526011602482015270456e642f646562742d6e6f742d7a65726f60781b604482015290519081900360640190fd5b60015460035460408051633612d9a360e11b81526001600160a01b03928316600482015290519190921691636c25b346916024808301926020929190829003018186803b158015610d2557600080fd5b505afa158015610d39573d6000803e3d6000fd5b505050506040513d6020811015610d4f57600080fd5b505115610d9a576040805162461bcd60e51b8152602060048201526014602482015273456e642f737572706c75732d6e6f742d7a65726f60601b604482015290519081900360640190fd5b610da8600754600854612047565b421015610df4576040805162461bcd60e51b8152602060048201526015602482015274115b990bddd85a5d0b5b9bdd0b599a5b9a5cda1959605a1b604482015290519081900360640190fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050506040513d6020811015610e6e57600080fd5b50516009556040517f4df15159e645ba7d02cadde0bc937abef5ad0134623c00de50a31750b85978b990600090a1565b6003546001600160a01b031681565b600d6020526000908152604090205481565b60085481565b33600090815260208190526040902054600114610f1e576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610fbc576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600654600114611002576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b600060068190554260075560015460408051636924500960e01b815290516001600160a01b039092169263692450099260048084019382900301818387803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b50505050600260009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110b557600080fd5b505af11580156110c9573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561111d57600080fd5b505af1158015611131573d6000803e3d6000fd5b50506004805460408051636924500960e01b815290516001600160a01b03909216945063692450099350808301926000929182900301818387803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111e057600080fd5b505af11580156111f4573d6000803e3d6000fd5b50506040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda925060009150a1565b600954611267576040805162461bcd60e51b815260206004820152600d60248201526c456e642f646562742d7a65726f60981b604482015290519081900360640190fd5b6001546003546001600160a01b039182169163bb35783b91339116611298856b033b2e3c9fd0803ce8000000612095565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b5050336000908152600e60205260409020546113219250905082612047565b336000818152600e6020908152604091829020939093558051848152905191927f47a981d8cbc0f6df64c9be4ce0a423071a088bd46c549bbd11a4d566e031fe0c92918290030190a250565b6004546001600160a01b031681565b6000828152600a60205260409020546113d6576040805162461bcd60e51b8152602060048201526017602482015276115b990bdd1859cb5a5b1acb5b9bdd0b5919599a5b9959604a1b604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810185905290516000926001600160a01b03169163d9638d369160248083019260a092919082900301818787803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050506040513d60a081101561144d57600080fd5b5060200151600154604080516309092f9760e21b8152600481018790526001600160a01b038681166024830152825194955060009485949190911692632424be5c926044808201939182900301818787803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050506040513d60408110156114d557600080fd5b508051602090910151909250905060006115066114f2838661205d565b6000888152600a602052604090205461205d565b9050600061151484836120b9565b6000888152600b6020526040902054909150611539906115348484612085565b612047565b6000888152600b6020526040902055600160ff1b81118015906115605750600160ff1b8311155b6115a0576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b8152600481018b90526001600160a01b038a8116602483015230604483015292831660648201526000858103608483015287810360a483015291519290931692637bab3f409260c4808301939282900301818387803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b50505050856001600160a01b0316877fa05b7b56166c25efbac063da905f9ea6aa1dc5101f95b43c7a838aace979ab598386604051808381526020018281526020019250505060405180910390a350505050505050565b600e6020526000908152604090205481565b60065481565b336000908152602081905260409020546001146116f0576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006020819052908152604090205481565b6002546001600160a01b031681565b6006541561179b576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b600154604080516309092f9760e21b815260048101849052336024820152815160009384936001600160a01b0390911692632424be5c926044808301939282900301818787803b1580156117ee57600080fd5b505af1158015611802573d6000803e3d6000fd5b505050506040513d604081101561181857600080fd5b5080516020909101519092509050801561186c576040805162461bcd60e51b815260206004820152601060248201526f456e642f6172742d6e6f742d7a65726f60801b604482015290519081900360640190fd5b600160ff1b8211156118b4576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6f766572666c6f7760a01b604482015290519081900360640190fd5b600154600354604080516301eeacfd60e61b815260048101879052336024820181905260448201526001600160a01b0392831660648201526000868103608483015260a4820181905291519290931692637bab3f409260c4808301939282900301818387803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b50506040805185815290513393508692507ff26f2b994a5e16f0960958e62541681f9e3e84d4caac2e487d25e0c75243f0d89181900360200190a3505050565b600f60209081526000928352604080842090915290825290205481565b336000908152602081905260409020546001146119f0576040805162461bcd60e51b8152602060048201526012602482015271115b990bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600654600114611a36576040805162461bcd60e51b815260206004820152600c60248201526b456e642f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81621d985d60ea1b1415611a6457600180546001600160a01b0319166001600160a01b038316179055611b19565b8162646f6760e81b1415611a9257600280546001600160a01b0319166001600160a01b038316179055611b19565b8162766f7760e81b1415611ac057600380546001600160a01b0319166001600160a01b038316179055611b19565b81631cdc1bdd60e21b1415611aef57600480546001600160a01b0319166001600160a01b038316179055611b19565b81621c1bdd60ea1b141561058757600580546001600160a01b0319166001600160a01b0383161790555b604080516001600160a01b0383168152905183917f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba919081900360200190a25050565b600c6020526000908152604090205481565b60065415611bb4576040805162461bcd60e51b815260206004820152600e60248201526d456e642f7374696c6c2d6c69766560901b604482015290519081900360640190fd5b6000818152600a602052604090205415611c15576040805162461bcd60e51b815260206004820152601b60248201527f456e642f7461672d696c6b2d616c72656164792d646566696e65640000000000604482015290519081900360640190fd5b60015460408051636cb1c69b60e11b81526004810184905290516001600160a01b039092169163d9638d369160248082019260a0929091908290030181600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b505050506040513d60a0811015611c8d57600080fd5b50516000828152600c602052604080822092909255600480548351636cb1c69b60e11b8152918201859052835192936001600160a01b039091169263d9638d36926024808201939291829003018186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d6040811015611d1457600080fd5b5051600480546040805163495d32cb60e01b81529051939450611dfc936001600160a01b039092169263495d32cb928282019260209290829003018186803b158015611d5f57600080fd5b505afa158015611d73573d6000803e3d6000fd5b505050506040513d6020811015611d8957600080fd5b5051604080516315f789a960e21b815290516001600160a01b038516916357de26a4916004808301926020929190829003018186803b158015611dcb57600080fd5b505afa158015611ddf573d6000803e3d6000fd5b505050506040513d6020811015611df557600080fd5b50516120d2565b6000838152600a602052604080822092909255905183917f4a9efa0a0e3f548761a6924fe06ac5cb94ecdbc08b10d855bbcc04e37c4910db91a25050565b60075481565b600b6020526000908152604090205481565b600a6020526000908152604090205481565b6000828152600d6020526040902054611ec4576040805162461bcd60e51b815260206004820152601760248201527f456e642f6669782d696c6b2d6e6f742d646566696e6564000000000000000000604482015290519081900360640190fd5b6001546000838152600d60205260409020546001600160a01b0390911690636111be2e90849030903390611ef990879061205d565b6040518563ffffffff1660e01b815260040180858152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050600060405180830381600087803b158015611f5657600080fd5b505af1158015611f6a573d6000803e3d6000fd5b5050506000838152600f60209081526040808320338452909152902054611f92915082612047565b6000838152600f60209081526040808320338452808352818420859055600e8352922054919052101561200c576040805162461bcd60e51b815260206004820152601c60248201527f456e642f696e73756666696369656e742d6261672d62616c616e636500000000604482015290519081900360640190fd5b604080518281529051339184917f888c7c01b06fd8004523e2bc9a274be1feaa9f03579ae5f568061dac078793c99181900360200190a35050565b8181018281101561205757600080fd5b92915050565b60006b033b2e3c9fd0803ce80000006120768484612095565b8161207d57fe5b049392505050565b8082038281111561205757600080fd5b60008115806120b0575050808202828282816120ad57fe5b04145b61205757600080fd5b6000818311156120c957816120cb565b825b9392505050565b60008161207684670de0b6b3a764000061209556fea2646970667358221220f58b9fdd5438bdc56a484b3bd6e0040836e5ba2a264b34ceb2556c80f5bb138564736f6c634300060c0033