false
false
0

Contract Address Details

0x28c3aD1B145eFaD4D8c6522177BE0DA189941665

Contract Name
AstralCards
Creator
0xebe894–7a24f6 at 0x496000–ea2055
Balance
0 CLO
Tokens
Fetching tokens...
Transactions
2 Transactions
Transfers
0 Transfers
Gas Used
284,031
Last Balance Update
18597364
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
AstralCards




Optimization enabled
false
Compiler version
v0.8.16+commit.07a7930e




EVM Version
default




Verified at
2025-08-22T08:44:53.536813Z

Contract source code

// SPDX-License-Identifier: GPL-3.0-only
// Author: Upaut

pragma solidity ^0.8.16;

contract AstralCards {

    struct User{ // структура описывающая настройки пользователя
        uint8 avatar; // индекс аватара игрока
        string lang; // язык интерфейса игрока
        string name; // имя игрока
    }

    struct Room{ // структура описывающая игровую комнату
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком (переплата одним из игроков вернется к нему обратно)
        uint256 fees; // комиссия (%) взымаемая с банка игровой комнаты
        uint256 status; // состояние комнаты. 0 - комната не активна, 1 - оплачено первым игроком, 2 - идет игра, 3 - можно принимать ставки на игроков
        address[] player1_users; // пользовательские адреса что ставят на игрока 1
        uint256[] player1_bets; // пользовательские ставки что ставят на игрока 1
        address[] player2_users; // пользовательские адреса что ставят на игрока 2
        uint256[] player2_bets; // пользовательские ставки что ставят на игрока 2
    }

    struct RoomList{ // элемент двухсвязного списка содержащего все активные комнаты
        uint256 room; // комната
        uint256 next; // следующая комната
        uint256 prev; // предыдущая комната
    }

    struct ActiveRoom{
        uint256 room; // комната
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком
        uint256 status; // состояние комнаты
        address player1; // адрес игрока 1
        address player2; // адрес игрока 2
    }

    uint256 public gameRoom = 1; // номер последней созданной игровой комнаты
    uint256 public amountGames; // всегда показывает количество созданных игровых комнат
    uint256 public gameRoomMax = 8; // максимально возможное количество одновременно созданных игровых комнат
    uint256 public minGameBet = 10 * 1e18; // минимальная игровая ставка в нативной монете
    uint256 public gamerBetPool = 25 * 1e18; // (%) Процент, сколько от ставки игрока будет поставлено на его победу в пул ставок
    uint256 public maxUsersPerPlayer = 30; // максимальное количество пользователей, которые могут ставить на одного игрока
    uint256 public fees = 5 * 1e18; // комиссия (%) взымаемая с банка игровой комнаты
    address public owner = msg.sender; // владелец должен иметь возможность настраивать минимальный размер ставки
    address public oracle = msg.sender; // игровой сервер будет выступать оракулом
    address public commission = msg.sender; // адрес на который будет перечисляться комиссия для дальнейшего распределения

    mapping(address => User) private settings; // маппирование настроек пользователя
    mapping(uint256 => Room) private rooms; // маппирование игровой комнаты
    mapping(uint256 => RoomList) private roomList; // маппирование списка комнат

/*
    constructor(address _oracle) {
        oracle = _oracle;
    }
*/
    event UsedRoom(uint indexed room);


    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }
    
    modifier onlyOracle() {
        require(msg.sender == oracle, "Only oracle");
        _;
    }



    receive() external payable {
        depositGame();
    }

    // Функция приема взноса игрока за участие
    function depositGame() public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet, "low bet"); // минимальный взнос за участие
        if(rooms[gameRoom].status == 0){ // комната создается игроком 1
            require(amountGames < gameRoomMax, "max rooms created"); // количество созданных комнат не должно превышать установленный максимум
            rooms[gameRoom].bet = msg.value;
            rooms[gameRoom].status = 1;
            rooms[gameRoom].player1_users.push(msg.sender);
            _addRoom(gameRoom); // добавляем комнату в список созданых комнат
            emit UsedRoom(gameRoom); // события использования комнаты
        }
        else{ // в созданную комнату вносится оплата игроком 2
            require(msg.sender != rooms[gameRoom].player1_users[0], "already added"); // одинаковый адрес не может быть противником
            if(msg.value > rooms[gameRoom].bet){ // если второй игрок заплатил больше первого, то вернем назад его переплату
                payable(msg.sender).transfer(msg.value - rooms[gameRoom].bet);
            } else if(msg.value < rooms[gameRoom].bet){ // если второй игрок заплатил меньше первого, то вернем назад переплату первому игроку
                payable(rooms[gameRoom].player1_users[0]).transfer(rooms[gameRoom].bet - msg.value);
                rooms[gameRoom].bet = msg.value;
            }
            rooms[gameRoom].bankRoom = rooms[gameRoom].bet * 2; // вносим точную сумму в банк комнаты
            // разбиваем ставки игроков на игровую ставку и пул ставок на игроков
            uint _pool_bet = rooms[gameRoom].bet * gamerBetPool / (100 * 1e18); // находим процент от ставки игрока, который должен уйти в пул ставок
            rooms[gameRoom].bet -= _pool_bet;

            
            rooms[gameRoom].player1_bets.push(_pool_bet);
            rooms[gameRoom].player2_users.push(msg.sender);
            rooms[gameRoom].player2_bets.push(_pool_bet);

            rooms[gameRoom].fees = fees;
            rooms[gameRoom].status = 3; // можно принимать ставки на игроков
            emit UsedRoom(gameRoom); // события использования комнаты
            gameRoom++; // создаем новую пустую комнату
        }
    }

    // отмена игрового взноса, доступно только если игрок внес оплату один
    function depositCancel() external {
        require(msg.sender == rooms[gameRoom].player1_users[0], "not your bet"); // ставку может вернуть только тот адрес что создал комнату
        require(rooms[gameRoom].status == 1); // статус комнаты должен быть 1, т.е. комната создана, но игрок 2 еще не внес оплату
        payable(msg.sender).transfer(rooms[gameRoom].bet);
        delete rooms[gameRoom];
        _delRoom(gameRoom); // Удаляем игровую комнату из списка созданных комнат
        emit UsedRoom(gameRoom); // события использования комнаты
    }

    // ставка на Игрока 1
    function betOnPlayer1(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player1_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player1_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player1_bets[_index] += msg.value;
        } else {
            rooms[_room].player1_users.push(msg.sender);
            rooms[_room].player1_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // ставка на Игрока 2
    function betOnPlayer2(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player2_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player2_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player2_bets[_index] += msg.value;
        } else {
            rooms[_room].player2_users.push(msg.sender);
            rooms[_room].player2_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция возвращает индекс в массиве ставящих пользователей по заданному адресу
    function _getIndex(address[] storage _arr) private view returns (uint256, bool) {
        for(uint256 i = 0; i < _arr.length; i++){
            if(msg.sender == _arr[i]){
                return (i, true);
            }
        }
        return (0, false);
    }


    // Завершить игру в комнате с определением победителя может только оракул
    function setWinner(uint256 _room, address _winner) external onlyOracle { 
        require((rooms[_room].player1_users[0] == _winner) || (rooms[_room].player2_users[0] == _winner)); // адрес победителя должен быть адресом одного из игроков комнаты
        uint256 _fee = rooms[_room].bankRoom * rooms[_room].fees / (100 * 1e18); // находим комиссию
        rooms[_room].bet *= 2; // находим выигрыш победителя за победу, пока без учета его ставки
        rooms[_room].bankRoom -= (_fee + rooms[_room].bet); // уменьшаем банк комнаты на комиссию + выигрыш победителя
        // весь оставшийся банк комнаты надо распределить по ставкам победителей
        if(rooms[_room].player1_users[0] == _winner){ // если победил игрок 1
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player1_users, rooms[_room].player1_bets);
        }
        else{ // если победил игрок 2
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player2_users, rooms[_room].player2_bets);
        }
        // Производим последнюю выплату - это игровая комиссия
        payable(commission).transfer(_fee); // выплачиваем комиссию
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция расчета и выплат всем победителям
    function _winnerPay(uint256 _bank, uint256 _amountWin, address[] storage _arrAddress, uint256[] storage _arrBet) private {
        uint _sum; // сумма всех ставок
        uint[] memory _arrPay = new uint[](_arrAddress.length); // выплаты которые должны получить пользователи
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _sum += _arrBet[i];
        }
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _arrPay[i] = _arrBet[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay[i] = _bank * _arrPay[i] / (100 * 1e18);
        }
        _arrPay[0] += _amountWin; // к ставки игрока добавляется его награда за победу в игре
        for(uint256 i = 0; i < _arrAddress.length; i++){ // производим выплаты
            payable(_arrAddress[i]).transfer(_arrPay[i]);
        }
    }

    // Принудительное закрытие комнаты с возвратом всех ставок игрокам, служит на тот случай если с игровым сервером что-то случится
    function closeRoom(uint256 _room) external onlyOwner { 
        require((rooms[_room].status == 3) || (rooms[_room].status == 2), "bad status"); // статус комнаты должен быть 3 или 2
        rooms[_room].player1_bets[0] += rooms[_room].bet; // к ставке игрока 1 добавляем его игровую ставку
        rooms[_room].player2_bets[0] += rooms[_room].bet; // к ставке игрока 2 добавляем его игровую ставку

        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            payable(rooms[_room].player1_users[i]).transfer(rooms[_room].player1_bets[i]); // выплачиваем все ставки на игрока 1
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            payable(rooms[_room].player2_users[i]).transfer(rooms[_room].player2_bets[i]); // выплачиваем все ставки на игрока 2
        }
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // сохранение настроек пользователя
    function saveSettings(uint8 _avatar, string memory _lang, string memory _name) external { 
        settings[msg.sender].avatar = _avatar;
        settings[msg.sender].lang = _lang;
        settings[msg.sender].name = _name;
    }

    // Изменение минимальной игровой ставки
    function setMinGameBet(uint256 _minGameBet) external onlyOwner {
        minGameBet = _minGameBet;
    }

    // Изменение процента, сколько от своей ставки игрок ставит на свою победу
    function setGamerBetPool(uint256 _gamerBetPool) external onlyOwner {
        gamerBetPool = _gamerBetPool;
    }

    // Изменение комиссионных сборов
    function setFees(uint256 _fees) external onlyOwner {
        fees = _fees;
    }

    // Изменение максимальное количество человек которые могут ставить на одного игрока
    function setMaxUsersPerPlayer(uint256 _maxUsersPerPlayer) external onlyOwner {
        maxUsersPerPlayer = _maxUsersPerPlayer;
    }

    // Изменение максимального количества игровых комнат
    function setGameRoomsMax(uint256 _gameRoomMax) external onlyOwner {
        gameRoomMax = _gameRoomMax;
    }

    // назначить нового оракула может только владелец
    function setNewOracle(address _newOracle) external onlyOwner { 
        oracle = _newOracle;
    }

    // назначить новый адрес для получения комиссий может только владелец
    function setNewCommission(address _commission) external onlyOwner { 
        commission = _commission;
    }

    // назначить новый статус комнаты может только оракул (статус 2 - идет игра, ставки запрещены; статус 3 - идет игра, ставки разрешены)
    function setRoomStatus(uint256 _room, uint256 _status) external onlyOracle { 
        require(_status == 2 || _status == 3); // статус комнаты может быть установлен только на 2 или 3
        require((rooms[_room].status == 2) || (rooms[_room].status == 3)); // комната где планируется изменение статуса должна быть на статусе 2 или 3
        rooms[_room].status = _status;
        emit UsedRoom(_room); // события использования комнаты
    }


    function _addRoom(uint _room) private { // добавление новой комнаты в список комнат
        roomList[_room].room = _room;
        roomList[_room].next = 0;
        roomList[_room].prev = roomList[0].prev;
        roomList[roomList[0].prev].next = _room;
        roomList[0].prev = _room;
        amountGames++; // увеличиваем количество созданных игровых комнат
    }

    function _delRoom(uint _room) private { // удаление комнаты из списка комнат
        roomList[roomList[_room].prev].next = roomList[_room].next;
        roomList[roomList[_room].next].prev = roomList[_room].prev;
        amountGames--; // уменьшаем количество созданных игровых комнат
        delete roomList[_room];
    }



    // Возвращаем настройки пользователя
    function getSettings(address _user) public view returns (User memory){
        return (settings[_user]);
    }

    // Возвращаем структуру игровой комнаты
    function getRoom(uint256 _room) public view returns (Room memory){
        return (rooms[_room]);
    }

    // Возвращаем информацию по всем созданным игровым комнатам
    function getCreatedRooms() public view returns (ActiveRoom[] memory){
        ActiveRoom[] memory _result = new ActiveRoom[](amountGames);
        uint _index = roomList[0].next;
        for(uint i; i < amountGames; i++){
            _result[i].room = _index;
            _result[i].bankRoom = rooms[_index].bankRoom;
            _result[i].bet = rooms[_index].bet;
            _result[i].status = rooms[_index].status;
            _result[i].player1 = rooms[_index].player1_users[0];
            if(rooms[_index].status > 1){
                _result[i].player2 = rooms[_index].player2_users[0];
            }
            _index = roomList[_index].next;
        }
        return (_result);
    }

    // Возвращаем предварительный расчет выплат победителям
    function getPreview(uint256 _room) public view returns (uint256, address [] memory, uint [] memory, address [] memory, uint [] memory){
        if(rooms[_room].status < 2){
            return (0, new address[](0), new uint[](0), new address[](0), new uint[](0));
        }
        address [] memory _arrPlayer1 = new address[](rooms[_room].player1_users.length); // адреса поставивщие на победу игрока 1
        uint[] memory _arrPay1 = new uint[](rooms[_room].player1_users.length); // выплаты которые должны получить пользователи
        address [] memory _arrPlayer2 = new address[](rooms[_room].player2_users.length); // адреса поставивщие на победу игрока 2
        uint[] memory _arrPay2 = new uint[](rooms[_room].player2_users.length); // выплаты которые должны получить пользователи
        uint _bank = rooms[_room].bankRoom;
        _bank -= (rooms[_room].bet * 2 + (_bank * rooms[_room].fees / (100 * 1e18))); // уменьшаем банк комнаты на комиссию + выигрыш победителя

        uint _sum; // сумма всех ставок
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPlayer1[i] = rooms[_room].player1_users[i]; // копируем всех кто ставил на игрока 1
            _arrPay1[i] = rooms[_room].player1_bets[i]; // копируем все ставки на игрока 1
            _sum += _arrPay1[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPay1[i] = _arrPay1[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay1[i] = _bank * _arrPay1[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay1[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре
        _sum = 0; // обнуляем сумму для расчета других победителей

        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPlayer2[i] = rooms[_room].player2_users[i]; // копируем всех кто ставил на игрока 2
            _arrPay2[i] = rooms[_room].player2_bets[i]; // копируем все ставки на игрока 2
            _sum += _arrPay2[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPay2[i] = _arrPay2[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay2[i] = _bank * _arrPay2[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay2[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре        

        // Возвращаем банк комнаты и 4 массива (игроки1, выплаты1, игроки2, выплаты2)
        return (rooms[_room].bankRoom, _arrPlayer1, _arrPay1, _arrPlayer2, _arrPay2);
    }    
}
        

Contract ABI

[{"type":"event","name":"UsedRoom","inputs":[{"type":"uint256","name":"room","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"amountGames","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer1","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer2","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"closeRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"commission","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositCancel","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"depositGame","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fees","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gameRoom","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gameRoomMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gamerBetPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct AstralCards.ActiveRoom[]","components":[{"type":"uint256","name":"room","internalType":"uint256"},{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address","name":"player1","internalType":"address"},{"type":"address","name":"player2","internalType":"address"}]}],"name":"getCreatedRooms","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getPreview","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.Room","components":[{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"fees","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address[]","name":"player1_users","internalType":"address[]"},{"type":"uint256[]","name":"player1_bets","internalType":"uint256[]"},{"type":"address[]","name":"player2_users","internalType":"address[]"},{"type":"uint256[]","name":"player2_bets","internalType":"uint256[]"}]}],"name":"getRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.User","components":[{"type":"uint8","name":"avatar","internalType":"uint8"},{"type":"string","name":"lang","internalType":"string"},{"type":"string","name":"name","internalType":"string"}]}],"name":"getSettings","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxUsersPerPlayer","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minGameBet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"oracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"saveSettings","inputs":[{"type":"uint8","name":"_avatar","internalType":"uint8"},{"type":"string","name":"_lang","internalType":"string"},{"type":"string","name":"_name","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_fees","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGameRoomsMax","inputs":[{"type":"uint256","name":"_gameRoomMax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGamerBetPool","inputs":[{"type":"uint256","name":"_gamerBetPool","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxUsersPerPlayer","inputs":[{"type":"uint256","name":"_maxUsersPerPlayer","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinGameBet","inputs":[{"type":"uint256","name":"_minGameBet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewCommission","inputs":[{"type":"address","name":"_commission","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewOracle","inputs":[{"type":"address","name":"_newOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRoomStatus","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"uint256","name":"_status","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWinner","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"address","name":"_winner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405260016000556008600255678ac7230489e8000060035568015af1d78b58c40000600455601e600555674563918244f4000060065533600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561010757600080fd5b50614e89806101176000396000f3fe6080604052600436106101c65760003560e01c80638699aa0b116100f7578063afa723a011610095578063d1c4cd8311610064578063d1c4cd83146105e0578063e034d87b14610609578063e148919114610634578063e1e6f1501461065f576101d5565b8063afa723a01461054a578063bdd42aee14610575578063ca01e3361461059e578063cc28f73d146105c9576101d5565b80639af1d35a116100d15780639af1d35a146104c15780639c623683146104ec578063aab30a3b14610515578063ae94058e1461051f576101d5565b80638699aa0b1461042c5780638d617c1c146104555780638da5cb5b14610496576101d5565b806341b1311a116101645780636d8a74cb1161013e5780636d8a74cb1461035c578063754b174d146103995780637706d1f6146103c45780637dc0d1d014610401576101d5565b806341b1311a146102ee5780634c42e4b4146103175780635ccf3e9314610340576101d5565b80631c3a8892116101a05780631c3a88921461024a57806327081703146102735780633d18678e1461029c5780633d6a3664146102c5576101d5565b80630ceb14fa146101da5780630ffa13ce14610205578063147778221461022e576101d5565b366101d5576101d361068a565b005b600080fd5b3480156101e657600080fd5b506101ef610cfe565b6040516101fc9190613b71565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190613bcc565b610d04565b005b61024860048036038101906102439190613bcc565b610d9e565b005b34801561025657600080fd5b50610271600480360381019061026c9190613bcc565b6110a5565b005b34801561027f57600080fd5b5061029a60048036038101906102959190613bcc565b611524565b005b3480156102a857600080fd5b506102c360048036038101906102be9190613bcc565b6115be565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190613c57565b611658565b005b3480156102fa57600080fd5b5061031560048036038101906103109190613bcc565b61172c565b005b34801561032357600080fd5b5061033e60048036038101906103399190613bcc565b6117c6565b005b61035a60048036038101906103559190613bcc565b611860565b005b34801561036857600080fd5b50610383600480360381019061037e9190613bcc565b611b67565b6040516103909190613ec5565b60405180910390f35b3480156103a557600080fd5b506103ae611d89565b6040516103bb9190613b71565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613c57565b611d8f565b6040516103f89190613fea565b60405180910390f35b34801561040d57600080fd5b50610416611f29565b604051610423919061401b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613c57565b611f4f565b005b34801561046157600080fd5b5061047c60048036038101906104779190613bcc565b612023565b60405161048d959493929190614114565b60405180910390f35b3480156104a257600080fd5b506104ab6128ff565b6040516104b8919061401b565b60405180910390f35b3480156104cd57600080fd5b506104d6612925565b6040516104e39190613b71565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190614183565b61292b565b005b61051d61068a565b005b34801561052b57600080fd5b50610534612e05565b60405161054191906142ed565b60405180910390f35b34801561055657600080fd5b5061055f6130fa565b60405161056c9190613b71565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614470565b613100565b005b3480156105aa57600080fd5b506105b3613200565b6040516105c09190613b71565b60405180910390f35b3480156105d557600080fd5b506105de613206565b005b3480156105ec57600080fd5b50610607600480360381019061060291906144fb565b6133fd565b005b34801561061557600080fd5b5061061e613535565b60405161062b9190613b71565b60405180910390f35b34801561064057600080fd5b5061064961353b565b604051610656919061401b565b60405180910390f35b34801561066b57600080fd5b50610674613561565b6040516106819190613b71565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90614598565b60405180910390fd5b60035434101561073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073490614604565b60405180910390fd5b6000600b600080548152602001908152602001600020600301540361089257600254600154106107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614670565b60405180910390fd5b34600b600080548152602001908152602001600020600101819055506001600b60008054815260200190815260200160002060030181905550600b600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061085e600054613567565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610cfc565b600b6000805481526020019081526020016000206004016000815481106108bc576108bb614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b9061470b565b60405180910390fd5b600b600080548152602001908152602001600020600101543411156109e1573373ffffffffffffffffffffffffffffffffffffffff166108fc600b60008054815260200190815260200160002060010154346109b0919061475a565b9081150290604051600060405180830381858888f193505050501580156109db573d6000803e3d6000fd5b50610adb565b600b60008054815260200190815260200160002060010154341015610ada57600b600080548152602001908152602001600020600401600081548110610a2a57610a29614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600b60008054815260200190815260200160002060010154610a91919061475a565b9081150290604051600060405180830381858888f19350505050158015610abc573d6000803e3d6000fd5b5034600b600080548152602001908152602001600020600101819055505b5b6002600b60008054815260200190815260200160002060010154610aff919061478e565b600b60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600454600b60008054815260200190815260200160002060010154610b4b919061478e565b610b559190614817565b905080600b6000805481526020019081526020016000206001016000828254610b7e919061475a565b92505081905550600b600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600b600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600654600b600080548152602001908152602001600020600201819055506003600b600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610cf590614848565b9190505550505b565b60015481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906148dc565b60405180910390fd5b8060028190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614598565b60405180910390fd5b6004600354610e1b9190614817565b341015610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614604565b60405180910390fd5b6003600b60008381526020019081526020016000206003015414610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614948565b60405180910390fd5b600554600b6000838152602001908152602001600020600601805490501115610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906149b4565b60405180910390fd5b600080610f35600b6000858152602001908152602001600020600601613636565b80925081935050508015610f915734600b60008581526020019081526020016000206007018381548110610f6c57610f6b614690565b5b906000526020600020016000828254610f8591906149d4565b92505081905550611046565b600b6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600b6000858152602001908152602001600020600001600082825461106c91906149d4565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c906148dc565b60405180910390fd5b6003600b600083815260200190815260200160002060030154148061117057506002600b600083815260200190815260200160002060030154145b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614a54565b60405180910390fd5b600b600082815260200190815260200160002060010154600b60008381526020019081526020016000206005016000815481106111ef576111ee614690565b5b90600052602060002001600082825461120891906149d4565b92505081905550600b600082815260200190815260200160002060010154600b600083815260200190815260200160002060070160008154811061124f5761124e614690565b5b90600052602060002001600082825461126891906149d4565b9250508190555060005b600b60008381526020019081526020016000206004018054905081101561137157600b600083815260200190815260200160002060040181815481106112bb576112ba614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600b6000858152602001908152602001600020600501838154811061132757611326614690565b5b90600052602060002001549081150290604051600060405180830381858888f1935050505015801561135d573d6000803e3d6000fd5b50808061136990614848565b915050611272565b5060005b600b60008381526020019081526020016000206006018054905081101561147457600b600083815260200190815260200160002060060181815481106113be576113bd614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600b6000858152602001908152602001600020600701838154811061142a57611429614690565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611460573d6000803e3d6000fd5b50808061146c90614848565b915050611375565b5061147e816136e6565b600b60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006114c29190613a2e565b6005820160006114d29190613a4f565b6006820160006114e29190613a2e565b6007820160006114f29190613a4f565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab906148dc565b60405180910390fd5b8060038190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611645906148dc565b60405180910390fd5b8060068190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906148dc565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b3906148dc565b60405180910390fd5b8060048190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d906148dc565b60405180910390fd5b8060058190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590614598565b60405180910390fd5b60046003546118dd9190614817565b34101561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614604565b60405180910390fd5b6003600b60008381526020019081526020016000206003015414611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614948565b60405180910390fd5b600554600b60008381526020019081526020016000206004018054905011156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd906149b4565b60405180910390fd5b6000806119f7600b6000858152602001908152602001600020600401613636565b80925081935050508015611a535734600b60008581526020019081526020016000206005018381548110611a2e57611a2d614690565b5b906000526020600020016000828254611a4791906149d4565b92505081905550611b08565b600b6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600b60008581526020019081526020016000206000016000828254611b2e91906149d4565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611b6f613a70565b600b6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611bf1575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611c9357602002820191906000526020600020905b815481526020019060010190808311611c7f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611d2157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611cd7575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611d7957602002820191906000526020600020905b815481526020019060010190808311611d65575b5050505050815250509050919050565b60025481565b611d97613ab5565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611e0e90614aa3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3a90614aa3565b8015611e875780601f10611e5c57610100808354040283529160200191611e87565b820191906000526020600020905b815481529060010190602001808311611e6a57829003601f168201915b50505050508152602001600282018054611ea090614aa3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecc90614aa3565b8015611f195780601f10611eee57610100808354040283529160200191611f19565b820191906000526020600020905b815481529060010190602001808311611efc57829003601f168201915b5050505050815250509050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd6906148dc565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806002600b60008881526020019081526020016000206003015410156121825760008067ffffffffffffffff81111561206657612065614345565b5b6040519080825280602002602001820160405280156120945781602001602082028036833780820191505090505b50600067ffffffffffffffff8111156120b0576120af614345565b5b6040519080825280602002602001820160405280156120de5781602001602082028036833780820191505090505b50600067ffffffffffffffff8111156120fa576120f9614345565b5b6040519080825280602002602001820160405280156121285781602001602082028036833780820191505090505b50600067ffffffffffffffff81111561214457612143614345565b5b6040519080825280602002602001820160405280156121725781602001602082028036833780820191505090505b50945094509450945094506128f6565b6000600b60008881526020019081526020016000206004018054905067ffffffffffffffff8111156121b7576121b6614345565b5b6040519080825280602002602001820160405280156121e55781602001602082028036833780820191505090505b5090506000600b60008981526020019081526020016000206004018054905067ffffffffffffffff81111561221d5761221c614345565b5b60405190808252806020026020018201604052801561224b5781602001602082028036833780820191505090505b5090506000600b60008a81526020019081526020016000206006018054905067ffffffffffffffff81111561228357612282614345565b5b6040519080825280602002602001820160405280156122b15781602001602082028036833780820191505090505b5090506000600b60008b81526020019081526020016000206006018054905067ffffffffffffffff8111156122e9576122e8614345565b5b6040519080825280602002602001820160405280156123175781602001602082028036833780820191505090505b5090506000600b60008c815260200190815260200160002060000154905068056bc75e2d63100000600b60008d81526020019081526020016000206002015482612361919061478e565b61236b9190614817565b6002600b60008e81526020019081526020016000206001015461238e919061478e565b61239891906149d4565b816123a3919061475a565b9050600080600090505b600b60008e8152602001908152602001600020600401805490508110156124fb57600b60008e815260200190815260200160002060040181815481106123f6576123f5614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061243457612433614690565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008e8152602001908152602001600020600501818154811061249657612495614690565b5b90600052602060002001548682815181106124b4576124b3614690565b5b6020026020010181815250508581815181106124d3576124d2614690565b5b6020026020010151826124e691906149d4565b915080806124f390614848565b9150506123ad565b5060005b600b60008e8152602001908152602001600020600401805490508110156125e5578168056bc75e2d6310000087838151811061253e5761253d614690565b5b6020026020010151612550919061478e565b61255a9190614817565b86828151811061256d5761256c614690565b5b60200260200101818152505068056bc75e2d6310000086828151811061259657612595614690565b5b6020026020010151846125a9919061478e565b6125b39190614817565b8682815181106125c6576125c5614690565b5b60200260200101818152505080806125dd90614848565b9150506124ff565b506002600b60008e815260200190815260200160002060010154612609919061478e565b8560008151811061261d5761261c614690565b5b6020026020010181815161263191906149d4565b915081815250506000905060005b600b60008e81526020019081526020016000206006018054905081101561278d57600b60008e8152602001908152602001600020600601818154811061268857612687614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168582815181106126c6576126c5614690565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008e8152602001908152602001600020600701818154811061272857612727614690565b5b906000526020600020015484828151811061274657612745614690565b5b60200260200101818152505083818151811061276557612764614690565b5b60200260200101518261277891906149d4565b9150808061278590614848565b91505061263f565b5060005b600b60008e815260200190815260200160002060060180549050811015612877578168056bc75e2d631000008583815181106127d0576127cf614690565b5b60200260200101516127e2919061478e565b6127ec9190614817565b8482815181106127ff576127fe614690565b5b60200260200101818152505068056bc75e2d6310000084828151811061282857612827614690565b5b60200260200101518461283b919061478e565b6128459190614817565b84828151811061285857612857614690565b5b602002602001018181525050808061286f90614848565b915050612791565b506002600b60008e81526020019081526020016000206001015461289b919061478e565b836000815181106128af576128ae614690565b5b602002602001018181516128c391906149d4565b91508181525050600b60008d815260200190815260200160002060000154868686869a509a509a509a509a505050505050505b91939590929450565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290614b20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60008481526020019081526020016000206004016000815481106129fb576129fa614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612ac657508073ffffffffffffffffffffffffffffffffffffffff16600b6000848152602001908152602001600020600601600081548110612a8357612a82614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612acf57600080fd5b600068056bc75e2d63100000600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060000154612b13919061478e565b612b1d9190614817565b90506002600b60008581526020019081526020016000206001016000828254612b46919061478e565b92505081905550600b60008481526020019081526020016000206001015481612b6f91906149d4565b600b60008581526020019081526020016000206000016000828254612b94919061475a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600b6000858152602001908152602001600020600401600081548110612bdb57612bda614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c8857612c83600b600085815260200190815260200160002060000154600b600086815260200190815260200160002060010154600b6000878152602001908152602001600020600401600b60008881526020019081526020016000206005016137bd565b612ceb565b612cea600b600085815260200190815260200160002060000154600b600086815260200190815260200160002060010154600b6000878152602001908152602001600020600601600b60008881526020019081526020016000206007016137bd565b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d53573d6000803e3d6000fd5b50612d5d836136e6565b600b6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612da19190613a2e565b600582016000612db19190613a4f565b600682016000612dc19190613a2e565b600782016000612dd19190613a4f565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612e2557612e24614345565b5b604051908082528060200260200182016040528015612e5e57816020015b612e4b613ad9565b815260200190600190039081612e435790505b5090506000600c600080815260200190815260200160002060010154905060005b6001548110156130f15781838281518110612e9d57612e9c614690565b5b60200260200101516000018181525050600b600083815260200190815260200160002060000154838281518110612ed757612ed6614690565b5b60200260200101516020018181525050600b600083815260200190815260200160002060010154838281518110612f1157612f10614690565b5b60200260200101516040018181525050600b600083815260200190815260200160002060030154838281518110612f4b57612f4a614690565b5b60200260200101516060018181525050600b6000838152602001908152602001600020600401600081548110612f8457612f83614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612fc257612fc1614690565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001600b60008481526020019081526020016000206003015411156130c557600b600083815260200190815260200160002060060160008154811061304857613047614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061308657613085614690565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b600c600083815260200190815260200160002060010154915080806130e990614848565b915050612e7f565b50819250505090565b60035481565b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010190816131aa9190614cec565b5080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020190816131fa9190614cec565b50505050565b60045481565b600b6000805481526020019081526020016000206004016000815481106132305761322f614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bf90614e0a565b60405180910390fd5b6001600b60008054815260200190815260200160002060030154146132ec57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600b600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613349573d6000803e3d6000fd5b50600b60008054815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600061338f9190613a2e565b60058201600061339f9190613a4f565b6006820160006133af9190613a2e565b6007820160006133bf9190613a4f565b50506133cc6000546136e6565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461348d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348490614b20565b60405180910390fd5b600281148061349c5750600381145b6134a557600080fd5b6002600b60008481526020019081526020016000206003015414806134e057506003600b600084815260200190815260200160002060030154145b6134e957600080fd5b80600b600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60055481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600c6000838152602001908152602001600020600001819055506000600c600083815260200190815260200160002060010181905550600c600080815260200190815260200160002060020154600c60008381526020019081526020016000206002018190555080600c6000600c60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600c6000808152602001908152602001600020600201819055506001600081548092919061362e90614848565b919050555050565b60008060005b83805490508110156136d85783818154811061365b5761365a614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036136c55780600192509250506136e1565b80806136d090614848565b91505061363c565b50600080915091505b915091565b600c600082815260200190815260200160002060010154600c6000600c600085815260200190815260200160002060020154815260200190815260200160002060010181905550600c600082815260200190815260200160002060020154600c6000600c6000858152602001908152602001600020600101548152602001908152602001600020600201819055506001600081548092919061378790614e2a565b9190505550600c600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156137de576137dd614345565b5b60405190808252806020026020018201604052801561380c5781602001602082028036833780820191505090505b50905060005b848054905081101561385c5783818154811061383157613830614690565b5b90600052602060002001548361384791906149d4565b9250808061385490614848565b915050613812565b5060005b8480549050811015613934578268056bc75e2d6310000085838154811061388a57613889614690565b5b906000526020600020015461389f919061478e565b6138a99190614817565b8282815181106138bc576138bb614690565b5b60200260200101818152505068056bc75e2d631000008282815181106138e5576138e4614690565b5b6020026020010151886138f8919061478e565b6139029190614817565b82828151811061391557613914614690565b5b602002602001018181525050808061392c90614848565b915050613860565b50848160008151811061394a57613949614690565b5b6020026020010181815161395e91906149d4565b9150818152505060005b8480549050811015613a255784818154811061398757613986614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106139de576139dd614690565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613a11573d6000803e3d6000fd5b508080613a1d90614848565b915050613968565b50505050505050565b5080546000825590600052602060002090810190613a4c9190613b3b565b50565b5080546000825590600052602060002090810190613a6d9190613b3b565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b80821115613b54576000816000905550600101613b3c565b5090565b6000819050919050565b613b6b81613b58565b82525050565b6000602082019050613b866000830184613b62565b92915050565b6000604051905090565b600080fd5b600080fd5b613ba981613b58565b8114613bb457600080fd5b50565b600081359050613bc681613ba0565b92915050565b600060208284031215613be257613be1613b96565b5b6000613bf084828501613bb7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c2482613bf9565b9050919050565b613c3481613c19565b8114613c3f57600080fd5b50565b600081359050613c5181613c2b565b92915050565b600060208284031215613c6d57613c6c613b96565b5b6000613c7b84828501613c42565b91505092915050565b613c8d81613b58565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cc881613c19565b82525050565b6000613cda8383613cbf565b60208301905092915050565b6000602082019050919050565b6000613cfe82613c93565b613d088185613c9e565b9350613d1383613caf565b8060005b83811015613d44578151613d2b8882613cce565b9750613d3683613ce6565b925050600181019050613d17565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613d898383613c84565b60208301905092915050565b6000602082019050919050565b6000613dad82613d51565b613db78185613d5c565b9350613dc283613d6d565b8060005b83811015613df3578151613dda8882613d7d565b9750613de583613d95565b925050600181019050613dc6565b5085935050505092915050565b600061010083016000830151613e196000860182613c84565b506020830151613e2c6020860182613c84565b506040830151613e3f6040860182613c84565b506060830151613e526060860182613c84565b5060808301518482036080860152613e6a8282613cf3565b91505060a083015184820360a0860152613e848282613da2565b91505060c083015184820360c0860152613e9e8282613cf3565b91505060e083015184820360e0860152613eb88282613da2565b9150508091505092915050565b60006020820190508181036000830152613edf8184613e00565b905092915050565b600060ff82169050919050565b613efd81613ee7565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f3d578082015181840152602081019050613f22565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f6582613f03565b613f6f8185613f0e565b9350613f7f818560208601613f1f565b613f8881613f49565b840191505092915050565b6000606083016000830151613fab6000860182613ef4565b5060208301518482036020860152613fc38282613f5a565b91505060408301518482036040860152613fdd8282613f5a565b9150508091505092915050565b600060208201905081810360008301526140048184613f93565b905092915050565b61401581613c19565b82525050565b6000602082019050614030600083018461400c565b92915050565b600082825260208201905092915050565b600061405282613c93565b61405c8185614036565b935061406783613caf565b8060005b8381101561409857815161407f8882613cce565b975061408a83613ce6565b92505060018101905061406b565b5085935050505092915050565b600082825260208201905092915050565b60006140c182613d51565b6140cb81856140a5565b93506140d683613d6d565b8060005b838110156141075781516140ee8882613d7d565b97506140f983613d95565b9250506001810190506140da565b5085935050505092915050565b600060a0820190506141296000830188613b62565b818103602083015261413b8187614047565b9050818103604083015261414f81866140b6565b905081810360608301526141638185614047565b9050818103608083015261417781846140b6565b90509695505050505050565b6000806040838503121561419a57614199613b96565b5b60006141a885828601613bb7565b92505060206141b985828601613c42565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c0820160008201516142056000850182613c84565b5060208201516142186020850182613c84565b50604082015161422b6040850182613c84565b50606082015161423e6060850182613c84565b5060808201516142516080850182613cbf565b5060a082015161426460a0850182613cbf565b50505050565b600061427683836141ef565b60c08301905092915050565b6000602082019050919050565b600061429a826141c3565b6142a481856141ce565b93506142af836141df565b8060005b838110156142e05781516142c7888261426a565b97506142d283614282565b9250506001810190506142b3565b5085935050505092915050565b60006020820190508181036000830152614307818461428f565b905092915050565b61431881613ee7565b811461432357600080fd5b50565b6000813590506143358161430f565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61437d82613f49565b810181811067ffffffffffffffff8211171561439c5761439b614345565b5b80604052505050565b60006143af613b8c565b90506143bb8282614374565b919050565b600067ffffffffffffffff8211156143db576143da614345565b5b6143e482613f49565b9050602081019050919050565b82818337600083830152505050565b600061441361440e846143c0565b6143a5565b90508281526020810184848401111561442f5761442e614340565b5b61443a8482856143f1565b509392505050565b600082601f8301126144575761445661433b565b5b8135614467848260208601614400565b91505092915050565b60008060006060848603121561448957614488613b96565b5b600061449786828701614326565b935050602084013567ffffffffffffffff8111156144b8576144b7613b9b565b5b6144c486828701614442565b925050604084013567ffffffffffffffff8111156144e5576144e4613b9b565b5b6144f186828701614442565b9150509250925092565b6000806040838503121561451257614511613b96565b5b600061452085828601613bb7565b925050602061453185828601613bb7565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b600061458260088361453b565b915061458d8261454c565b602082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b60006145ee60078361453b565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f6d617820726f6f6d732063726561746564000000000000000000000000000000600082015250565b600061465a60118361453b565b915061466582614624565b602082019050919050565b600060208201905081810360008301526146898161464d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006146f5600d8361453b565b9150614700826146bf565b602082019050919050565b60006020820190508181036000830152614724816146e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476582613b58565b915061477083613b58565b92508282039050818111156147885761478761472b565b5b92915050565b600061479982613b58565b91506147a483613b58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147dd576147dc61472b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482282613b58565b915061482d83613b58565b92508261483d5761483c6147e8565b5b828204905092915050565b600061485382613b58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148855761488461472b565b5b600182019050919050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006148c6600a8361453b565b91506148d182614890565b602082019050919050565b600060208201905081810360008301526148f5816148b9565b9050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b600061493260138361453b565b915061493d826148fc565b602082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b600061499e60148361453b565b91506149a982614968565b602082019050919050565b600060208201905081810360008301526149cd81614991565b9050919050565b60006149df82613b58565b91506149ea83613b58565b9250828201905080821115614a0257614a0161472b565b5b92915050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b6000614a3e600a8361453b565b9150614a4982614a08565b602082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614abb57607f821691505b602082108103614ace57614acd614a74565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b6000614b0a600b8361453b565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ba27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614b65565b614bac8683614b65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614be9614be4614bdf84613b58565b614bc4565b613b58565b9050919050565b6000819050919050565b614c0383614bce565b614c17614c0f82614bf0565b848454614b72565b825550505050565b600090565b614c2c614c1f565b614c37818484614bfa565b505050565b5b81811015614c5b57614c50600082614c24565b600181019050614c3d565b5050565b601f821115614ca057614c7181614b40565b614c7a84614b55565b81016020851015614c89578190505b614c9d614c9585614b55565b830182614c3c565b50505b505050565b600082821c905092915050565b6000614cc360001984600802614ca5565b1980831691505092915050565b6000614cdc8383614cb2565b9150826002028217905092915050565b614cf582613f03565b67ffffffffffffffff811115614d0e57614d0d614345565b5b614d188254614aa3565b614d23828285614c5f565b600060209050601f831160018114614d565760008415614d44578287015190505b614d4e8582614cd0565b865550614db6565b601f198416614d6486614b40565b60005b82811015614d8c57848901518255600182019150602085019450602081019050614d67565b86831015614da95784890151614da5601f891682614cb2565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614df4600c8361453b565b9150614dff82614dbe565b602082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b6000614e3582613b58565b915060008203614e4857614e4761472b565b5b60018203905091905056fea2646970667358221220a3735d7eae832d76a40337567edbb2ec30bf171e45f940d7798ed2e739f5f8e164736f6c63430008100033

Deployed ByteCode

0x6080604052600436106101c65760003560e01c80638699aa0b116100f7578063afa723a011610095578063d1c4cd8311610064578063d1c4cd83146105e0578063e034d87b14610609578063e148919114610634578063e1e6f1501461065f576101d5565b8063afa723a01461054a578063bdd42aee14610575578063ca01e3361461059e578063cc28f73d146105c9576101d5565b80639af1d35a116100d15780639af1d35a146104c15780639c623683146104ec578063aab30a3b14610515578063ae94058e1461051f576101d5565b80638699aa0b1461042c5780638d617c1c146104555780638da5cb5b14610496576101d5565b806341b1311a116101645780636d8a74cb1161013e5780636d8a74cb1461035c578063754b174d146103995780637706d1f6146103c45780637dc0d1d014610401576101d5565b806341b1311a146102ee5780634c42e4b4146103175780635ccf3e9314610340576101d5565b80631c3a8892116101a05780631c3a88921461024a57806327081703146102735780633d18678e1461029c5780633d6a3664146102c5576101d5565b80630ceb14fa146101da5780630ffa13ce14610205578063147778221461022e576101d5565b366101d5576101d361068a565b005b600080fd5b3480156101e657600080fd5b506101ef610cfe565b6040516101fc9190613b71565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190613bcc565b610d04565b005b61024860048036038101906102439190613bcc565b610d9e565b005b34801561025657600080fd5b50610271600480360381019061026c9190613bcc565b6110a5565b005b34801561027f57600080fd5b5061029a60048036038101906102959190613bcc565b611524565b005b3480156102a857600080fd5b506102c360048036038101906102be9190613bcc565b6115be565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190613c57565b611658565b005b3480156102fa57600080fd5b5061031560048036038101906103109190613bcc565b61172c565b005b34801561032357600080fd5b5061033e60048036038101906103399190613bcc565b6117c6565b005b61035a60048036038101906103559190613bcc565b611860565b005b34801561036857600080fd5b50610383600480360381019061037e9190613bcc565b611b67565b6040516103909190613ec5565b60405180910390f35b3480156103a557600080fd5b506103ae611d89565b6040516103bb9190613b71565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613c57565b611d8f565b6040516103f89190613fea565b60405180910390f35b34801561040d57600080fd5b50610416611f29565b604051610423919061401b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613c57565b611f4f565b005b34801561046157600080fd5b5061047c60048036038101906104779190613bcc565b612023565b60405161048d959493929190614114565b60405180910390f35b3480156104a257600080fd5b506104ab6128ff565b6040516104b8919061401b565b60405180910390f35b3480156104cd57600080fd5b506104d6612925565b6040516104e39190613b71565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190614183565b61292b565b005b61051d61068a565b005b34801561052b57600080fd5b50610534612e05565b60405161054191906142ed565b60405180910390f35b34801561055657600080fd5b5061055f6130fa565b60405161056c9190613b71565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614470565b613100565b005b3480156105aa57600080fd5b506105b3613200565b6040516105c09190613b71565b60405180910390f35b3480156105d557600080fd5b506105de613206565b005b3480156105ec57600080fd5b50610607600480360381019061060291906144fb565b6133fd565b005b34801561061557600080fd5b5061061e613535565b60405161062b9190613b71565b60405180910390f35b34801561064057600080fd5b5061064961353b565b604051610656919061401b565b60405180910390f35b34801561066b57600080fd5b50610674613561565b6040516106819190613b71565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90614598565b60405180910390fd5b60035434101561073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073490614604565b60405180910390fd5b6000600b600080548152602001908152602001600020600301540361089257600254600154106107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614670565b60405180910390fd5b34600b600080548152602001908152602001600020600101819055506001600b60008054815260200190815260200160002060030181905550600b600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061085e600054613567565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610cfc565b600b6000805481526020019081526020016000206004016000815481106108bc576108bb614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b9061470b565b60405180910390fd5b600b600080548152602001908152602001600020600101543411156109e1573373ffffffffffffffffffffffffffffffffffffffff166108fc600b60008054815260200190815260200160002060010154346109b0919061475a565b9081150290604051600060405180830381858888f193505050501580156109db573d6000803e3d6000fd5b50610adb565b600b60008054815260200190815260200160002060010154341015610ada57600b600080548152602001908152602001600020600401600081548110610a2a57610a29614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600b60008054815260200190815260200160002060010154610a91919061475a565b9081150290604051600060405180830381858888f19350505050158015610abc573d6000803e3d6000fd5b5034600b600080548152602001908152602001600020600101819055505b5b6002600b60008054815260200190815260200160002060010154610aff919061478e565b600b60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600454600b60008054815260200190815260200160002060010154610b4b919061478e565b610b559190614817565b905080600b6000805481526020019081526020016000206001016000828254610b7e919061475a565b92505081905550600b600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600b600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600654600b600080548152602001908152602001600020600201819055506003600b600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610cf590614848565b9190505550505b565b60015481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906148dc565b60405180910390fd5b8060028190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614598565b60405180910390fd5b6004600354610e1b9190614817565b341015610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614604565b60405180910390fd5b6003600b60008381526020019081526020016000206003015414610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614948565b60405180910390fd5b600554600b6000838152602001908152602001600020600601805490501115610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906149b4565b60405180910390fd5b600080610f35600b6000858152602001908152602001600020600601613636565b80925081935050508015610f915734600b60008581526020019081526020016000206007018381548110610f6c57610f6b614690565b5b906000526020600020016000828254610f8591906149d4565b92505081905550611046565b600b6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600b6000858152602001908152602001600020600001600082825461106c91906149d4565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c906148dc565b60405180910390fd5b6003600b600083815260200190815260200160002060030154148061117057506002600b600083815260200190815260200160002060030154145b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614a54565b60405180910390fd5b600b600082815260200190815260200160002060010154600b60008381526020019081526020016000206005016000815481106111ef576111ee614690565b5b90600052602060002001600082825461120891906149d4565b92505081905550600b600082815260200190815260200160002060010154600b600083815260200190815260200160002060070160008154811061124f5761124e614690565b5b90600052602060002001600082825461126891906149d4565b9250508190555060005b600b60008381526020019081526020016000206004018054905081101561137157600b600083815260200190815260200160002060040181815481106112bb576112ba614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600b6000858152602001908152602001600020600501838154811061132757611326614690565b5b90600052602060002001549081150290604051600060405180830381858888f1935050505015801561135d573d6000803e3d6000fd5b50808061136990614848565b915050611272565b5060005b600b60008381526020019081526020016000206006018054905081101561147457600b600083815260200190815260200160002060060181815481106113be576113bd614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600b6000858152602001908152602001600020600701838154811061142a57611429614690565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611460573d6000803e3d6000fd5b50808061146c90614848565b915050611375565b5061147e816136e6565b600b60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006114c29190613a2e565b6005820160006114d29190613a4f565b6006820160006114e29190613a2e565b6007820160006114f29190613a4f565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab906148dc565b60405180910390fd5b8060038190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611645906148dc565b60405180910390fd5b8060068190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906148dc565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b3906148dc565b60405180910390fd5b8060048190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d906148dc565b60405180910390fd5b8060058190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590614598565b60405180910390fd5b60046003546118dd9190614817565b34101561191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614604565b60405180910390fd5b6003600b60008381526020019081526020016000206003015414611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614948565b60405180910390fd5b600554600b60008381526020019081526020016000206004018054905011156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd906149b4565b60405180910390fd5b6000806119f7600b6000858152602001908152602001600020600401613636565b80925081935050508015611a535734600b60008581526020019081526020016000206005018381548110611a2e57611a2d614690565b5b906000526020600020016000828254611a4791906149d4565b92505081905550611b08565b600b6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600b60008581526020019081526020016000206000016000828254611b2e91906149d4565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611b6f613a70565b600b6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611bf1575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611c9357602002820191906000526020600020905b815481526020019060010190808311611c7f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611d2157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611cd7575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611d7957602002820191906000526020600020905b815481526020019060010190808311611d65575b5050505050815250509050919050565b60025481565b611d97613ab5565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611e0e90614aa3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3a90614aa3565b8015611e875780601f10611e5c57610100808354040283529160200191611e87565b820191906000526020600020905b815481529060010190602001808311611e6a57829003601f168201915b50505050508152602001600282018054611ea090614aa3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecc90614aa3565b8015611f195780601f10611eee57610100808354040283529160200191611f19565b820191906000526020600020905b815481529060010190602001808311611efc57829003601f168201915b5050505050815250509050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd6906148dc565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806002600b60008881526020019081526020016000206003015410156121825760008067ffffffffffffffff81111561206657612065614345565b5b6040519080825280602002602001820160405280156120945781602001602082028036833780820191505090505b50600067ffffffffffffffff8111156120b0576120af614345565b5b6040519080825280602002602001820160405280156120de5781602001602082028036833780820191505090505b50600067ffffffffffffffff8111156120fa576120f9614345565b5b6040519080825280602002602001820160405280156121285781602001602082028036833780820191505090505b50600067ffffffffffffffff81111561214457612143614345565b5b6040519080825280602002602001820160405280156121725781602001602082028036833780820191505090505b50945094509450945094506128f6565b6000600b60008881526020019081526020016000206004018054905067ffffffffffffffff8111156121b7576121b6614345565b5b6040519080825280602002602001820160405280156121e55781602001602082028036833780820191505090505b5090506000600b60008981526020019081526020016000206004018054905067ffffffffffffffff81111561221d5761221c614345565b5b60405190808252806020026020018201604052801561224b5781602001602082028036833780820191505090505b5090506000600b60008a81526020019081526020016000206006018054905067ffffffffffffffff81111561228357612282614345565b5b6040519080825280602002602001820160405280156122b15781602001602082028036833780820191505090505b5090506000600b60008b81526020019081526020016000206006018054905067ffffffffffffffff8111156122e9576122e8614345565b5b6040519080825280602002602001820160405280156123175781602001602082028036833780820191505090505b5090506000600b60008c815260200190815260200160002060000154905068056bc75e2d63100000600b60008d81526020019081526020016000206002015482612361919061478e565b61236b9190614817565b6002600b60008e81526020019081526020016000206001015461238e919061478e565b61239891906149d4565b816123a3919061475a565b9050600080600090505b600b60008e8152602001908152602001600020600401805490508110156124fb57600b60008e815260200190815260200160002060040181815481106123f6576123f5614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061243457612433614690565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008e8152602001908152602001600020600501818154811061249657612495614690565b5b90600052602060002001548682815181106124b4576124b3614690565b5b6020026020010181815250508581815181106124d3576124d2614690565b5b6020026020010151826124e691906149d4565b915080806124f390614848565b9150506123ad565b5060005b600b60008e8152602001908152602001600020600401805490508110156125e5578168056bc75e2d6310000087838151811061253e5761253d614690565b5b6020026020010151612550919061478e565b61255a9190614817565b86828151811061256d5761256c614690565b5b60200260200101818152505068056bc75e2d6310000086828151811061259657612595614690565b5b6020026020010151846125a9919061478e565b6125b39190614817565b8682815181106125c6576125c5614690565b5b60200260200101818152505080806125dd90614848565b9150506124ff565b506002600b60008e815260200190815260200160002060010154612609919061478e565b8560008151811061261d5761261c614690565b5b6020026020010181815161263191906149d4565b915081815250506000905060005b600b60008e81526020019081526020016000206006018054905081101561278d57600b60008e8152602001908152602001600020600601818154811061268857612687614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168582815181106126c6576126c5614690565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008e8152602001908152602001600020600701818154811061272857612727614690565b5b906000526020600020015484828151811061274657612745614690565b5b60200260200101818152505083818151811061276557612764614690565b5b60200260200101518261277891906149d4565b9150808061278590614848565b91505061263f565b5060005b600b60008e815260200190815260200160002060060180549050811015612877578168056bc75e2d631000008583815181106127d0576127cf614690565b5b60200260200101516127e2919061478e565b6127ec9190614817565b8482815181106127ff576127fe614690565b5b60200260200101818152505068056bc75e2d6310000084828151811061282857612827614690565b5b60200260200101518461283b919061478e565b6128459190614817565b84828151811061285857612857614690565b5b602002602001018181525050808061286f90614848565b915050612791565b506002600b60008e81526020019081526020016000206001015461289b919061478e565b836000815181106128af576128ae614690565b5b602002602001018181516128c391906149d4565b91508181525050600b60008d815260200190815260200160002060000154868686869a509a509a509a509a505050505050505b91939590929450565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290614b20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60008481526020019081526020016000206004016000815481106129fb576129fa614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612ac657508073ffffffffffffffffffffffffffffffffffffffff16600b6000848152602001908152602001600020600601600081548110612a8357612a82614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612acf57600080fd5b600068056bc75e2d63100000600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060000154612b13919061478e565b612b1d9190614817565b90506002600b60008581526020019081526020016000206001016000828254612b46919061478e565b92505081905550600b60008481526020019081526020016000206001015481612b6f91906149d4565b600b60008581526020019081526020016000206000016000828254612b94919061475a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600b6000858152602001908152602001600020600401600081548110612bdb57612bda614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c8857612c83600b600085815260200190815260200160002060000154600b600086815260200190815260200160002060010154600b6000878152602001908152602001600020600401600b60008881526020019081526020016000206005016137bd565b612ceb565b612cea600b600085815260200190815260200160002060000154600b600086815260200190815260200160002060010154600b6000878152602001908152602001600020600601600b60008881526020019081526020016000206007016137bd565b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d53573d6000803e3d6000fd5b50612d5d836136e6565b600b6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612da19190613a2e565b600582016000612db19190613a4f565b600682016000612dc19190613a2e565b600782016000612dd19190613a4f565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612e2557612e24614345565b5b604051908082528060200260200182016040528015612e5e57816020015b612e4b613ad9565b815260200190600190039081612e435790505b5090506000600c600080815260200190815260200160002060010154905060005b6001548110156130f15781838281518110612e9d57612e9c614690565b5b60200260200101516000018181525050600b600083815260200190815260200160002060000154838281518110612ed757612ed6614690565b5b60200260200101516020018181525050600b600083815260200190815260200160002060010154838281518110612f1157612f10614690565b5b60200260200101516040018181525050600b600083815260200190815260200160002060030154838281518110612f4b57612f4a614690565b5b60200260200101516060018181525050600b6000838152602001908152602001600020600401600081548110612f8457612f83614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612fc257612fc1614690565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001600b60008481526020019081526020016000206003015411156130c557600b600083815260200190815260200160002060060160008154811061304857613047614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061308657613085614690565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b600c600083815260200190815260200160002060010154915080806130e990614848565b915050612e7f565b50819250505090565b60035481565b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010190816131aa9190614cec565b5080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020190816131fa9190614cec565b50505050565b60045481565b600b6000805481526020019081526020016000206004016000815481106132305761322f614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bf90614e0a565b60405180910390fd5b6001600b60008054815260200190815260200160002060030154146132ec57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600b600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613349573d6000803e3d6000fd5b50600b60008054815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600061338f9190613a2e565b60058201600061339f9190613a4f565b6006820160006133af9190613a2e565b6007820160006133bf9190613a4f565b50506133cc6000546136e6565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461348d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348490614b20565b60405180910390fd5b600281148061349c5750600381145b6134a557600080fd5b6002600b60008481526020019081526020016000206003015414806134e057506003600b600084815260200190815260200160002060030154145b6134e957600080fd5b80600b600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60055481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600c6000838152602001908152602001600020600001819055506000600c600083815260200190815260200160002060010181905550600c600080815260200190815260200160002060020154600c60008381526020019081526020016000206002018190555080600c6000600c60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600c6000808152602001908152602001600020600201819055506001600081548092919061362e90614848565b919050555050565b60008060005b83805490508110156136d85783818154811061365b5761365a614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036136c55780600192509250506136e1565b80806136d090614848565b91505061363c565b50600080915091505b915091565b600c600082815260200190815260200160002060010154600c6000600c600085815260200190815260200160002060020154815260200190815260200160002060010181905550600c600082815260200190815260200160002060020154600c6000600c6000858152602001908152602001600020600101548152602001908152602001600020600201819055506001600081548092919061378790614e2a565b9190505550600c600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156137de576137dd614345565b5b60405190808252806020026020018201604052801561380c5781602001602082028036833780820191505090505b50905060005b848054905081101561385c5783818154811061383157613830614690565b5b90600052602060002001548361384791906149d4565b9250808061385490614848565b915050613812565b5060005b8480549050811015613934578268056bc75e2d6310000085838154811061388a57613889614690565b5b906000526020600020015461389f919061478e565b6138a99190614817565b8282815181106138bc576138bb614690565b5b60200260200101818152505068056bc75e2d631000008282815181106138e5576138e4614690565b5b6020026020010151886138f8919061478e565b6139029190614817565b82828151811061391557613914614690565b5b602002602001018181525050808061392c90614848565b915050613860565b50848160008151811061394a57613949614690565b5b6020026020010181815161395e91906149d4565b9150818152505060005b8480549050811015613a255784818154811061398757613986614690565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106139de576139dd614690565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613a11573d6000803e3d6000fd5b508080613a1d90614848565b915050613968565b50505050505050565b5080546000825590600052602060002090810190613a4c9190613b3b565b50565b5080546000825590600052602060002090810190613a6d9190613b3b565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b80821115613b54576000816000905550600101613b3c565b5090565b6000819050919050565b613b6b81613b58565b82525050565b6000602082019050613b866000830184613b62565b92915050565b6000604051905090565b600080fd5b600080fd5b613ba981613b58565b8114613bb457600080fd5b50565b600081359050613bc681613ba0565b92915050565b600060208284031215613be257613be1613b96565b5b6000613bf084828501613bb7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c2482613bf9565b9050919050565b613c3481613c19565b8114613c3f57600080fd5b50565b600081359050613c5181613c2b565b92915050565b600060208284031215613c6d57613c6c613b96565b5b6000613c7b84828501613c42565b91505092915050565b613c8d81613b58565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cc881613c19565b82525050565b6000613cda8383613cbf565b60208301905092915050565b6000602082019050919050565b6000613cfe82613c93565b613d088185613c9e565b9350613d1383613caf565b8060005b83811015613d44578151613d2b8882613cce565b9750613d3683613ce6565b925050600181019050613d17565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613d898383613c84565b60208301905092915050565b6000602082019050919050565b6000613dad82613d51565b613db78185613d5c565b9350613dc283613d6d565b8060005b83811015613df3578151613dda8882613d7d565b9750613de583613d95565b925050600181019050613dc6565b5085935050505092915050565b600061010083016000830151613e196000860182613c84565b506020830151613e2c6020860182613c84565b506040830151613e3f6040860182613c84565b506060830151613e526060860182613c84565b5060808301518482036080860152613e6a8282613cf3565b91505060a083015184820360a0860152613e848282613da2565b91505060c083015184820360c0860152613e9e8282613cf3565b91505060e083015184820360e0860152613eb88282613da2565b9150508091505092915050565b60006020820190508181036000830152613edf8184613e00565b905092915050565b600060ff82169050919050565b613efd81613ee7565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f3d578082015181840152602081019050613f22565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f6582613f03565b613f6f8185613f0e565b9350613f7f818560208601613f1f565b613f8881613f49565b840191505092915050565b6000606083016000830151613fab6000860182613ef4565b5060208301518482036020860152613fc38282613f5a565b91505060408301518482036040860152613fdd8282613f5a565b9150508091505092915050565b600060208201905081810360008301526140048184613f93565b905092915050565b61401581613c19565b82525050565b6000602082019050614030600083018461400c565b92915050565b600082825260208201905092915050565b600061405282613c93565b61405c8185614036565b935061406783613caf565b8060005b8381101561409857815161407f8882613cce565b975061408a83613ce6565b92505060018101905061406b565b5085935050505092915050565b600082825260208201905092915050565b60006140c182613d51565b6140cb81856140a5565b93506140d683613d6d565b8060005b838110156141075781516140ee8882613d7d565b97506140f983613d95565b9250506001810190506140da565b5085935050505092915050565b600060a0820190506141296000830188613b62565b818103602083015261413b8187614047565b9050818103604083015261414f81866140b6565b905081810360608301526141638185614047565b9050818103608083015261417781846140b6565b90509695505050505050565b6000806040838503121561419a57614199613b96565b5b60006141a885828601613bb7565b92505060206141b985828601613c42565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c0820160008201516142056000850182613c84565b5060208201516142186020850182613c84565b50604082015161422b6040850182613c84565b50606082015161423e6060850182613c84565b5060808201516142516080850182613cbf565b5060a082015161426460a0850182613cbf565b50505050565b600061427683836141ef565b60c08301905092915050565b6000602082019050919050565b600061429a826141c3565b6142a481856141ce565b93506142af836141df565b8060005b838110156142e05781516142c7888261426a565b97506142d283614282565b9250506001810190506142b3565b5085935050505092915050565b60006020820190508181036000830152614307818461428f565b905092915050565b61431881613ee7565b811461432357600080fd5b50565b6000813590506143358161430f565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61437d82613f49565b810181811067ffffffffffffffff8211171561439c5761439b614345565b5b80604052505050565b60006143af613b8c565b90506143bb8282614374565b919050565b600067ffffffffffffffff8211156143db576143da614345565b5b6143e482613f49565b9050602081019050919050565b82818337600083830152505050565b600061441361440e846143c0565b6143a5565b90508281526020810184848401111561442f5761442e614340565b5b61443a8482856143f1565b509392505050565b600082601f8301126144575761445661433b565b5b8135614467848260208601614400565b91505092915050565b60008060006060848603121561448957614488613b96565b5b600061449786828701614326565b935050602084013567ffffffffffffffff8111156144b8576144b7613b9b565b5b6144c486828701614442565b925050604084013567ffffffffffffffff8111156144e5576144e4613b9b565b5b6144f186828701614442565b9150509250925092565b6000806040838503121561451257614511613b96565b5b600061452085828601613bb7565b925050602061453185828601613bb7565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b600061458260088361453b565b915061458d8261454c565b602082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b60006145ee60078361453b565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f6d617820726f6f6d732063726561746564000000000000000000000000000000600082015250565b600061465a60118361453b565b915061466582614624565b602082019050919050565b600060208201905081810360008301526146898161464d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006146f5600d8361453b565b9150614700826146bf565b602082019050919050565b60006020820190508181036000830152614724816146e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476582613b58565b915061477083613b58565b92508282039050818111156147885761478761472b565b5b92915050565b600061479982613b58565b91506147a483613b58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147dd576147dc61472b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482282613b58565b915061482d83613b58565b92508261483d5761483c6147e8565b5b828204905092915050565b600061485382613b58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148855761488461472b565b5b600182019050919050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006148c6600a8361453b565b91506148d182614890565b602082019050919050565b600060208201905081810360008301526148f5816148b9565b9050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b600061493260138361453b565b915061493d826148fc565b602082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b600061499e60148361453b565b91506149a982614968565b602082019050919050565b600060208201905081810360008301526149cd81614991565b9050919050565b60006149df82613b58565b91506149ea83613b58565b9250828201905080821115614a0257614a0161472b565b5b92915050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b6000614a3e600a8361453b565b9150614a4982614a08565b602082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614abb57607f821691505b602082108103614ace57614acd614a74565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b6000614b0a600b8361453b565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ba27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614b65565b614bac8683614b65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614be9614be4614bdf84613b58565b614bc4565b613b58565b9050919050565b6000819050919050565b614c0383614bce565b614c17614c0f82614bf0565b848454614b72565b825550505050565b600090565b614c2c614c1f565b614c37818484614bfa565b505050565b5b81811015614c5b57614c50600082614c24565b600181019050614c3d565b5050565b601f821115614ca057614c7181614b40565b614c7a84614b55565b81016020851015614c89578190505b614c9d614c9585614b55565b830182614c3c565b50505b505050565b600082821c905092915050565b6000614cc360001984600802614ca5565b1980831691505092915050565b6000614cdc8383614cb2565b9150826002028217905092915050565b614cf582613f03565b67ffffffffffffffff811115614d0e57614d0d614345565b5b614d188254614aa3565b614d23828285614c5f565b600060209050601f831160018114614d565760008415614d44578287015190505b614d4e8582614cd0565b865550614db6565b601f198416614d6486614b40565b60005b82811015614d8c57848901518255600182019150602085019450602081019050614d67565b86831015614da95784890151614da5601f891682614cb2565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614df4600c8361453b565b9150614dff82614dbe565b602082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b6000614e3582613b58565b915060008203614e4857614e4761472b565b5b60018203905091905056fea2646970667358221220a3735d7eae832d76a40337567edbb2ec30bf171e45f940d7798ed2e739f5f8e164736f6c63430008100033