GLMR Price: $0.019269 (-7.10%)

Contract

0x7CdE44282dd404DC914b28675430eA48550B6Cd4

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo1 wei

GLMR Value

Less Than $0.01 (@ $0.02/GLMR)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Withdraw60112732024-04-24 8:52:54645 days ago1713948774IN
0x7CdE4428...8550B6Cd4
0 GLMR0.0120686126.5
Invite Install T...51557772023-12-25 8:12:30766 days ago1703491950IN
0x7CdE4428...8550B6Cd4
1.2 GLMR0.60705278346.85242192
Update_P5q51556892023-12-25 7:54:12766 days ago1703490852IN
0x7CdE4428...8550B6Cd4
0.00014999 GLMR0.06463513358.55023802
Lock_dfs51556852023-12-25 7:53:24766 days ago1703490804IN
0x7CdE4428...8550B6Cd4
0.00014999 GLMR0.06451166356.94654522
Update_P5q51556762023-12-25 7:51:36766 days ago1703490696IN
0x7CdE4428...8550B6Cd4
0.00014999 GLMR0.07051426350.87307822
Register_ki_51556712023-12-25 7:50:36766 days ago1703490636IN
0x7CdE4428...8550B6Cd4
1.01616498 GLMR0.10016559350.21465379
Reserve_ogn51556622023-12-25 7:48:48766 days ago1703490528IN
0x7CdE4428...8550B6Cd4
0.002 GLMR0.04778162349.16858525
Invite Install T...50583482023-12-11 14:01:42780 days ago1702303302IN
0x7CdE4428...8550B6Cd4
1.2 GLMR0.22960109131.12883967
Lock_dfs50583452023-12-11 14:01:00780 days ago1702303260IN
0x7CdE4428...8550B6Cd4
0.00014999 GLMR0.02374578130.86535913
Update_P5q50583422023-12-11 14:00:24780 days ago1702303224IN
0x7CdE4428...8550B6Cd4
0.00014999 GLMR0.02923191130.70092146
Register_ki_50583392023-12-11 13:59:42780 days ago1702303182IN
0x7CdE4428...8550B6Cd4
0.50738743 GLMR0.03940869130.69229445
Reserve_ogn50583292023-12-11 13:57:42780 days ago1702303062IN
0x7CdE4428...8550B6Cd4
0.002 GLMR0.01791361130.78303625

Latest 17 internal transactions

Parent Transaction Hash Block From To
60112732024-04-24 8:52:54645 days ago1713948774
0x7CdE4428...8550B6Cd4
0.40474995 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
0.2 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
 Contract Creation0 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
0.2 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
 Contract Creation0 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
0.2 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
0.2 GLMR
51557772023-12-25 8:12:30766 days ago1703491950
0x7CdE4428...8550B6Cd4
0.2 GLMR
51556712023-12-25 7:50:36766 days ago1703490636
0x7CdE4428...8550B6Cd4
1.01616498 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
0.2 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
 Contract Creation0 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
0.2 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
 Contract Creation0 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
0.2 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
0.2 GLMR
50583482023-12-11 14:01:42780 days ago1702303302
0x7CdE4428...8550B6Cd4
0.2 GLMR
50583392023-12-11 13:59:42780 days ago1702303182
0x7CdE4428...8550B6Cd4
0.50738743 GLMR
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x00C996b4...340583B36
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
GroupWalletFactory2

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2023-12-11
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18 <0.8.20;

// ungravel.eth, GroupWallet, GroupWalletMaster, GroupWalletFactory, AuctionMaster, ProxyWallet, TokenMaster, ProxyToken, PrePaidAccount by pepihasenfuss.eth 2017-2023, Copyright (c) 2023

// GroupWallet and ungravel is entirely based on Ethereum Name Service, "ENS", the domain name registry.

//   ENS, ENSRegistryWithFallback, PublicResolver, Resolver, FIFS-Registrar, Registrar, AuctionRegistrar, BaseRegistrar, ReverseRegistrar, DefaultReverseResolver, ETHRegistrarController,
//   PriceOracle, SimplePriceOracle, StablePriceOracle, ENSMigrationSubdomainRegistrar, CustomRegistrar, Root, RegistrarMigration are contracts of "ENS", by Nick Johnson and team.
//
//   Copyright (c) 2018, True Names Limited / ENS Labs Limited
//
//   Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//   The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

interface ENS {
  event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
  event Transfer(bytes32 indexed node, address owner);
  event NewResolver(bytes32 indexed node, address resolver);
  event NewTTL(bytes32 indexed node, uint64 ttl);
  event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

  function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external;
  function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external;
  function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns(bytes32);
  function setResolver(bytes32 node, address resolver) external;
  function setOwner(bytes32 node, address owner) external;
  function setTTL(bytes32 node, uint64 ttl) external;

  function owner(bytes32 node) external view returns (address);
  function resolver(bytes32 node) external view returns (address);
  function ttl(bytes32 node) external view returns (uint64);
  function recordExists(bytes32 node) external view returns (bool);
  function isApprovedForAll(address ensowner, address operator) external view returns (bool);
}

abstract contract AbstractGWF_ENS {
  event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
  event Transfer(bytes32 indexed node, address owner);
  event NewResolver(bytes32 indexed node, address resolver);
  event NewTTL(bytes32 indexed node, uint64 ttl);
  event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

  function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external virtual;
  function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external virtual;
  function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external virtual returns(bytes32);
  function setResolver(bytes32 node, address resolver) external virtual;
  function setOwner(bytes32 node, address owner) external virtual;
  
  function owner(bytes32 node) public view virtual returns (address);
  function recordExists(bytes32 node) external virtual view returns (bool);
  function isApprovedForAll(address ensowner, address operator) external virtual view returns (bool);
}

abstract contract AbstractGWF_ReverseRegistrar {
  function claim(address owner) external virtual returns (bytes32);
  function claimWithResolver(address owner, address resolver) external virtual returns (bytes32);
  function setName(string memory name) external virtual returns (bytes32);
  function node(address addr) external virtual pure returns (bytes32);
}

abstract contract AbstractBaseRegistrar {
  event NameMigrated(uint256 indexed id, address indexed owner, uint expires);
  event NameRegistered(uint256 indexed id, address indexed owner, uint expires);
  event NameRenewed(uint256 indexed id, uint expires);

  bytes32 public baseNode;   // The namehash of the TLD this registrar owns eg, (.)eth
  ENS public ens;
}

abstract contract AbstractGWF_GWP {
  function getIsOwner(address _owner) external virtual view returns (bool);
  function getOwners()                external virtual view returns (address[] memory);
  function newProxyGroupWallet_j5O(address[] calldata _owners) external virtual payable;
  function reverseENS(string calldata _domain, address _reverse) external virtual;
}

interface Abstract_TokenProxy {
  function newToken(uint256[] calldata _data) external payable;
}

abstract contract AbstractETHRegController {
  mapping(bytes32=>uint) public commitments;

  uint public minCommitmentAge;
  uint public maxCommitmentAge;

  address public nameWrapper;

  event NameRegistered(string name, bytes32 indexed label, address indexed owner, uint cost, uint expires);
  event NameRenewed(string name, bytes32 indexed label, uint cost, uint expires);
  event NewPriceOracle(address indexed oracle);

  function rentPrice(string memory name, uint duration) view external virtual returns(uint);
  function makeCommitmentWithConfig(string memory name, address owner, bytes32 secret, address resolver, address addr) pure external virtual returns(bytes32);
  function commit(bytes32 commitment) external virtual;
  function register(string calldata name, address owner, uint duration, bytes32 secret) external virtual payable;
  function registerWithConfig(string memory name, address owner, uint duration, bytes32 secret, address resolver, address addr) external virtual payable;
  function available(string memory name) external virtual view returns(bool);
  function register(string calldata name,address owner,uint256 duration,bytes32 secret,address resolver,bytes[] calldata data,bool reverseRecord,uint16 ownerControlledFuses) external virtual payable;
}

abstract contract AbstractGWF_Resolver {
  mapping(bytes32=>bytes) hashes;

  event AddrChanged(bytes32 indexed node, address a);
  event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress);
  event NameChanged(bytes32 indexed node, string name);
  event ABIChanged(bytes32 indexed node, uint256 indexed contentType);
  event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);
  event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);
  event ContenthashChanged(bytes32 indexed node, bytes hash);
  
  function ABI(bytes32 node, uint256 contentTypes) external virtual view returns (uint256, bytes memory);
  function addr(bytes32 node) external virtual view returns (address);
  function addr(bytes32 node, uint coinType) external virtual view returns(bytes memory);
  function name(bytes32 node) external virtual view returns (string memory);
  function text(bytes32 node, string calldata key) external virtual view returns (string memory);
  function supportsInterface(bytes4 interfaceId) external virtual view returns (bool);
  function setApprovalForAll(address operator, bool approved) virtual external;

  function setABI(bytes32 node, uint256 contentType, bytes calldata data) external virtual;
  function setAddr(bytes32 node, address r_addr) external virtual;
  function setAddr(bytes32 node, uint coinType, bytes calldata a) external virtual;
  function setName(bytes32 node, string calldata _name) external virtual;
  function setText(bytes32 node, string calldata key, string calldata value) external virtual;
}

abstract contract Abstract_GWF {
  AbstractGWF_Resolver            public  resolverContract;
  AbstractETHRegController        public  controllerContract;
  AbstractBaseRegistrar           public  base;
  AbstractGWF_ENS                 public  ens;
  AbstractGWF_ReverseRegistrar    public  reverseContract;
  address                         public  GWFowner;
  
  mapping(uint64=>uint256)        private installations;                        // installTime +  proxyTokenAddr
  mapping(bytes32=>uint256)       private commitments;                          // commitment  +  ownerAddr
  
  function version() public pure virtual returns(uint256 v);
  function importGWP(bytes32 _dHash, uint256 commitment, uint256 installation) external virtual payable;
  function getGWProxy(bytes32 _dHash) public virtual view returns (address);
  function getProxyToken(bytes32 _domainHash) public virtual view returns (address p);
}

interface Abstract_TM {
  function owner() external view returns (address ow);
}

interface Abstract_GWPC {
  function getMasterCopy() external view returns (address);
}

abstract contract Abs_AuctionRegistrar {
  function startAuction_ge0(bytes32 _hash, uint revealP) public virtual payable;
}

abstract contract NWrapper {
  function setSubnodeRecord(bytes32 parentNode,string memory label,address owner,address resolver,uint64 ttl,uint32 fuses,uint64 expiry) external virtual returns (bytes32 node);
  function setSubnodeOwner(bytes32 node,string calldata label,address newOwner,uint32 fuses,uint64 expiry) external virtual returns (bytes32);
  function setApprovalForAll(address operator,bool approved) external virtual;
}

interface I_NWrapper {
  function setSubnodeRecord(bytes32 parentNode,string memory label,address owner,address resolver,uint64 ttl,uint32 fuses,uint64 expiry) external returns (bytes32 node);
  function setSubnodeOwner(bytes32 node,string calldata label,address newOwner,uint32 fuses,uint64 expiry) external returns (bytes32);
  function setApprovalForAll(address operator,bool approved) external;
}


/// @title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.
/// @author Stefan George - <[email protected]> /// ProxyToken adapted and applied for shares and token by pepihasenfuss.eth
pragma solidity ^0.8.18 <0.8.20;

contract ProxyToken {
    address internal masterCopy;

    bytes32 internal name32;
    uint256 private ownerPrices;

    mapping (address => uint256) private balances;
    mapping (address => mapping  (address => uint256)) private allowed;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event FrozenFunds(address target, bool frozen);
    event Deposit(address from, uint256 value);
    event Deployment(address owner, address theContract);
    event Approval(address indexed owner,address indexed spender,uint256 value);

    constructor(address _masterCopy) payable
    {
      masterCopy = _masterCopy;
    }
    
    fallback () external payable
    {   
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let master := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)
            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {
                mstore(0, master)
                return(0, 0x20)
            }

            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let success := delegatecall(gas(), master, ptr, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            if eq(success, 0) { 
              if eq(returndatasize(),0) { revert(0, 0x404) }
              revert(0, returndatasize())
            }
            return(0, returndatasize())
        }
    }
    
    function upgrade(address master) external payable {
      require(Abstract_TM(masterCopy).owner()==Abstract_TM(master).owner()," owner masterCopy!");
      masterCopy = master;
    }
    
    receive() external payable { emit Deposit(msg.sender, msg.value); }         // *** PTC may receive payments ***
}

/// @title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.
/// @author Stefan George - <[email protected]> /// ProxyGroupWallet adapted and applied for GroupWallet by pepihasenfuss.eth
pragma solidity ^0.8.18 <0.8.20;

contract ProxyGroupWallet {
    address internal masterCopy;

    mapping(uint256 => uint256) private tArr;
    address[]                   private owners;
    
    address internal GWF;                                                       // GWF - GroupWalletFactory contract
    mapping(uint256 => bytes)   private structures;
  
    // *************************************************************************
    event Deposit(address dep_from, uint256 dep_value);
    
    constructor(address _masterCopy, string memory _domain, AbstractGWF_ReverseRegistrar _reverse) payable
    { 
      masterCopy = _masterCopy;
      if (block.chainid!=5) _reverse.setName(_domain);
    }
    
    fallback () external payable
    {   
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let master := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)
            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {
                mstore(0, master)
                return(0, 0x20)
            }

            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let success := delegatecall(gas(), master, ptr, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            if eq(success, 0) { 
              if eq(returndatasize(),0) { revert(0, 0x504) }
              revert(0, returndatasize())
            }
            return(0, returndatasize())
        }
    }
    
    function upgrade(address master) external payable {
      require(Abstract_GWPC(masterCopy).getMasterCopy()==Abstract_GWPC(master).getMasterCopy()," gwp gwpc owner!");
      masterCopy = master;
    }
    
    receive() external payable { emit Deposit(msg.sender, msg.value); }         // *** GWP can sell common shares to TokenProxy, thus reveiving payment ***
}

// GroupWalletFactory2 by pepihasenfuss.eth 2017-2023
contract GroupWalletFactory2 {

    event TestReturn(uint256 v1, uint256 v2, uint256 v3, uint256 v4);
    event Deposit(address from, uint256 value);
    event PrePaidAccountReady(address from, uint256 value);
    event StructureDeployed(bytes32 domainHash);
    event ColorTableSaved(bytes32 domainHash);
    event EtherScriptSaved(bytes32 domainHash,string key);
    event ProxyTokenCreation(ProxyToken proxy);
    event ProxyGroupWalletCreation(ProxyGroupWallet proxy);
    event SetPrices(bytes32 domainHash);
    event TransferOwner(bytes32 domainHash);
    event FreezeToken(bytes32 domainHash);
    event Transfer(address indexed from, address indexed to, uint256 value);
    
    uint256 constant k_aMask        = 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff;
    uint256 constant k_commitMask   = 0xffffffffffffffffffffffff0000000000000000000000000000000000000000;
    uint256 constant k_commit2Mask  = 0x0000000000000000000000000000000000000000ffffffffffffffffffffffff;
    uint256 constant k_lockedMask   = 0x0000000000000000000000010000000000000000000000000000000000000000;
    
    bytes32 constant k_abi80        = 0x0000000000000000000000000000000000000000000000000000000000000080;
    uint256 constant k_rentMask     = 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff;

    address constant k_add00        = address(0x0);


    AbstractGWF_Resolver            public  resolverContract;
    AbstractETHRegController        public  controllerContract;
    AbstractBaseRegistrar           public  base;
    AbstractGWF_ENS                 public  ens;
    AbstractGWF_ReverseRegistrar    public  reverseContract;
    address                         public  GWFowner;
    NWrapper                        public  ensNameWrapper;
    Abs_AuctionRegistrar            public  auctionContract;
    
    mapping(uint64=>uint256)        private installations;                      // installTime +  proxyTokenAddr
    mapping(bytes32=>uint256)       private commitments;                        // commitment  +  ownerAddr

  
    function getGWF() external view returns (address) {
      return address(this);                                                     // needed, to call GroupWallet or GroupWalletFactory transparently
    }

    function getCommitment(bytes32 _domainHash) private view returns (uint64 comm) {
      return uint64( (uint256( commitments[_domainHash] & k_commitMask )>>160) & k_commit2Mask );
    }
    
    function getOwner(bytes32 _domainHash) external view returns (address) {
      return address( uint160( commitments[_domainHash] & k_aMask ) );
    }
    
    function saveOwner(address _iToken, bytes32 _domainHash) private {
      commitments[ _domainHash ] = uint256(uint160(_iToken)) + uint256( commitments[_domainHash] & k_commitMask);
    }

    function saveCommitment(bytes32 input, bytes32 _domainHash) private {
      commitments[_domainHash] = uint256( (uint256(input)<<160) & k_commitMask ) + uint256( commitments[_domainHash] & k_aMask);
    }

    function getInstallTime(bytes32 _domainHash) public view returns (uint256 iTime) {
      uint256 i = uint256(installations[ getCommitment(_domainHash) ]);
      return uint256( (uint256( uint256(i) & k_commitMask )>>160) & k_commit2Mask );
    }

    function getProxyToken(bytes32 _domainHash) public view returns (address p) {
      return address( uint160( uint256( uint256(installations[ getCommitment(_domainHash) ]) ) & k_aMask ) );
    }

    function getGWProxy(bytes32 _dHash) public view returns (address) {
      return address( uint160( commitments[_dHash] & k_aMask ) );
    }

    function saveProxyToken(address _iOwner, bytes32 _domainHash) private {
      uint64 hsh  = getCommitment(_domainHash);
      uint256 i = uint256(installations[ hsh ]);
      installations[ hsh ] = uint256(uint160(_iOwner)) + uint256(i & k_commitMask);
    }

    function saveInstallTime(uint256 input, bytes32 _domainHash) private {
      uint64 hsh  = getCommitment(_domainHash);
      uint256 i = uint256(installations[ hsh ]);
      installations[ hsh ] = uint256( (uint256(input)<<160) & k_commitMask ) + uint256(i & k_aMask);
    }

    // -------------------  owners ---------------------------------------------
    
    function getIsOwner(bytes32 _dHash,address _owner) external view returns (bool) {
      uint256 c = commitments[_dHash];
      address theGWPcontract = address( uint160( c&k_aMask ) );
      if (theGWPcontract==msg.sender) return false;                             // is initiator calling, no owners list yet
      return AbstractGWF_GWP( theGWPcontract ).getIsOwner(_owner);
    }

    function getOwners(bytes32 _dHash) external view returns (address[] memory) {
      uint256 c = commitments[_dHash];
      return getOwners_internal(c);
    }
    
    function getOwners_internal(uint256 c) private view returns (address[] memory) {
      address a = address( uint160( c&k_aMask ) );
      if (a!=tx.origin) return AbstractGWF_GWP( a ).getOwners();
      
      address[] memory empty;
      return empty;
    }
  
    // -------------------  strings ---------------------------------------------

    function char(bytes1 b) private pure returns (bytes1 c) {
        if (uint8(b) < uint8(10)) return bytes1(uint8(b) + 0x30);
        else return bytes1(uint8(b) + 0x57);
    }
    
    function strlen(string memory s) internal pure returns (uint) {
        uint len;
        uint i = 0;
        uint bytelength = bytes(s).length;
        for(len = 0; i < bytelength; len++) {
            bytes1 b = bytes(s)[i];
            if(b < 0x80) {
                i += 1;
            } else if (b < 0xE0) {
                i += 2;
            } else if (b < 0xF0) {
                i += 3;
            } else if (b < 0xF8) {
                i += 4;
            } else if (b < 0xFC) {
                i += 5;
            } else {
                i += 6;
            }
        }
        return len;
    }
    
    function bytesToStr(bytes32 _b, uint len) internal pure returns (string memory) {
      bytes memory bArr = new bytes(len);
      uint256 i;
      
      do
       { 
        bArr[i] = _b[i];
        i++;
      } while(i<len&&i<32);
      
      return string(bArr); 
    }
    
    function concatString(bytes32 _b, string memory _str) internal pure returns (string memory) {
      bytes memory bArr = new bytes(32);
      uint8 i = 0;
      uint8 off = 0;
      
      do
       { 
        if (_b[i]!=0) { 
          bArr[i] = _b[i];
        }
        else
        {
          off = i;
        }
        i++;
      } while(off==0&&i<32);
      
      i = 0;
      uint len = strlen(_str);
      
      do
       { 
        bArr[off+i] = bytes(_str)[i];
        i++;
      } while(i<len&&i<32);
      
      return string(bArr); 
    }

    function stringMemoryTobytes32(string memory _data) private pure returns(bytes32 a) {
      // solium-disable-next-line security/no-inline-assembly
      assembly {
          a := mload(add(_data, 32))
      }
    }
    
    function mb32(bytes memory _data) private pure returns(bytes32 a) {
      // solium-disable-next-line security/no-inline-assembly
      assembly {
          a := mload(add(_data, 32))
      }
    }
    
    function keccak(bytes memory self, uint offset, uint len) internal pure returns (bytes32 ret) {
        my_require(offset + len <= self.length,"k");
        
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            ret := keccak256(add(add(self, 32), offset), len)
        }
    }
  
    function memcpy(uint dest, uint src, uint len) private pure {
        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            // solium-disable-next-line security/no-inline-assembly
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }
        
        if (len==0) return;

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    function substring(bytes memory self, uint offset, uint len) internal pure returns(bytes memory) {
        my_require(offset + len <= self.length,"s");

        bytes memory ret = new bytes(len);
        uint dest;
        uint src;

        // solium-disable-next-line security/no-inline-assembly
        assembly {
            dest := add(ret, 32)
            src  := add(add(self, 32), offset)
        }
        memcpy(dest, src, len);

        return ret;
    }
    
    function readBytes32(bytes memory self, uint idx) internal pure returns (bytes32 ret) {
        my_require(idx + 32 <= self.length,"b");
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            ret := mload(add(add(self, 32), idx))
        }
    }
    
    function bytes32ToAsciiString(bytes32 _bytes32, uint len) private pure returns (string memory) {
        bytes memory s = new bytes((len*2)+2);
        s[0] = 0x30;
        s[1] = 0x78;
      
        for (uint i = 0; i < len; i++) {
            bytes1 b = bytes1(uint8(uint(_bytes32) / (2 ** (8 * ((len-1) - i)))));
            bytes1 hi = bytes1(uint8(b) / 16);
            bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
            s[2+(2 * i)] = char(hi);
            s[2+(2 * i) + 1] = char(lo);
        }
        return string(s);
    }

    function labelStrFromBytes32(bytes32 _label) private pure returns (string memory) {
      return bytesToStr(_label,uint(_label)&0xff);
    }

    function reportValue(uint256 a, string memory str) internal pure returns (string memory r) {
      return string(abi.encodePacked( bytes32ToAsciiString(bytes32(uint256( a )),32), str));
    }

    function getDomainHash(string memory _d) internal view returns (bytes32) {
      return keccak256(abi.encodePacked(base.baseNode(), keccak256(bytes(_d))));
    }
    
    // -------------------  GWF ---------------------------------------------

    function my_require(bool b, string memory str) private pure {
      require(b,str);
    }
    
    function reserve_ogn(bytes32 _domainHash,bytes32 _commitment,bytes calldata data) external payable {
      (bool success, bytes memory returnData) = address(0xDadaDadadadadadaDaDadAdaDADAdadAdADaDADA).call{value: 0}(data);
      
      my_require(data.length>0 && success && returnData.length==0 && _commitment!=0x0,"O");
      emit StructureDeployed(_domainHash);
      
      controllerContract.commit(_commitment);
      commitments[ _domainHash ] = uint256( (uint256(_commitment)<<160) & k_commitMask ) + uint256( uint160(msg.sender) & k_aMask ); // saveOwner initiator = owner
    }

    function reserve_replicate(bytes32 _domainHash,bytes32 _commitment) external payable {
      controllerContract.commit(_commitment);
      commitments[ _domainHash ] = uint256( (uint256(_commitment)<<160) & k_commitMask ) + uint256( uint160(msg.sender) & k_aMask ); // saveOwner initiator = owner
    }

    // ENS V3 2023 methods

    function isENSV3() internal view returns (bool) {
      return (address(ensNameWrapper)!=k_add00);
    }

    function onERC1155Received(address,address,uint256,uint256,bytes calldata) public pure returns (bytes4 r) {
      return this.onERC1155Received.selector;
    }

    function _allowNameWrapperAndResolver(address _owner) private {
      I_NWrapper(controllerContract.nameWrapper()).setApprovalForAll(_owner,true); // GWP gets approved for NameWrapper
      resolverContract.setApprovalForAll(_owner,true);                             // GWP gets approved for PublicResolver
    }

    function _register(bytes32 _dHash,uint256 _rent,string memory _name,uint256 _dur,bytes32 _secret) public payable {
      
      address l_ProjectOwner = address(uint160( commitments[_dHash] & k_aMask ));
      my_require((l_ProjectOwner==msg.sender || msg.sender==address(this))&&controllerContract.available(_name)&&_secret!=0&&_dur!=0,"Y");

     if (isENSV3()) {                                                          // register ENS V3
        bytes[] memory cmd = new bytes[](1);
        cmd[0] = abi.encodePacked( bytes4(0x8b95dd71), _dHash, uint256(0x3c), uint256(0x60), uint256(0x14), uint256(uint256(uint160(address(this)))<<96) );

        (bool success, bytes memory rdata) = address(controllerContract).call{value:_rent}
        ( abi.encodeWithSignature("register(string,address,uint256,bytes32,address,bytes[],bool,uint16)",_name,address(this),_dur,_secret,address(resolverContract),cmd,false,0) );

        my_require(success&&rdata.length==0,string(rdata));

        if (l_ProjectOwner==msg.sender) _allowNameWrapperAndResolver(l_ProjectOwner);
      } else
      {
        controllerContract.registerWithConfig{value: _rent}(_name,address(this),_dur,_secret,address(resolverContract),address(this)); // ENS V2
      }

      resolverContract.setName(_dHash,string(abi.encodePacked(_name,tld())));
    }

    function _setOwner(bytes32 _domHash,address _owner,bytes32 _label,bytes32 _dHash) internal {

      resolverContract.setAddr(_domHash,_owner);                                                                       // e.g. _domHash = hash "vitalik.ethereum.eth"

      if (_label==0) {
        resolverContract.setText(_dHash,string('avatar'),string('https://www.ungravel.com/ung.png'));                  // set default group avatar UNG logo k_defaultAvatarURL
      }

      if (!isENSV3()) {
        base.ens().setOwner(_domHash,_owner);
      }
      else 
      {
        if (_label>0) {
          I_NWrapper(controllerContract.nameWrapper()).setSubnodeOwner(_dHash,labelStrFromBytes32(_label),_owner,0,0); // member label ownership
        }
        else
        {
          _allowNameWrapperAndResolver(_owner);
        }
      }
    }


    function register_ki_(bytes32[] calldata _m) external payable { 
                                                                                // _m[0] _domainHash
                                                                                // _m[1]  _secret
      uint256   _dur        = uint256(_m[2])>>128;                              // _m[2]  duration
      uint256   _rent       = uint256(_m[2])&k_rentMask;                        // _m[2]  rent
      string memory _name   = labelStrFromBytes32(_m[3]);                       // _m[3] domainName with length byte
      
      _register(_m[0],_rent,_name,_dur,_m[1]);
    }
    
    function _updateStructure(bytes32 _dHash,bytes calldata _data32) private {
      resolverContract.setABI(_dHash,32,abi.encodePacked(_data32));              // structure
      emit StructureDeployed(_dHash);
    }

    function update_P5q(bytes32 _dHash,bytes calldata data32) external payable {
      isInitiatorOrMember2(_dHash);
      _updateStructure(_dHash,data32);
    }

    function lock_dfs(bytes32 _dHash,bytes calldata data32) external payable {
      uint256 c = commitments[_dHash];      
      my_require((address(uint160(c & k_aMask))==msg.sender||msg.sender==address(this)) && installations[ uint64( (uint256(c & k_commitMask)>>160) & k_commit2Mask ) ]==0x0,"L"); // NOT locked getInstallTime(_dHash), getCommitment(_dHash) 
      
      uint64 hsh  = uint64( (uint256(c & k_commitMask)>>160) & k_commit2Mask );
      installations[hsh] = uint256( installations[hsh] & k_aMask ) + k_lockedMask;                      // saveInstallTime(1,_dHash)

      _updateStructure(_dHash,data32);
    }
    
    function registerAndLock_x3x(bytes32[] calldata _m, bytes calldata data32) external payable {
      bytes32 c = _m[0];                                                        // _m[0] = _domainHash
                                                                                // _m[1] = _secret
      // ---------------------------- register domain --------------------------

      uint256   _dur        = uint256(_m[2])>>128;                              // _m[2] = duration/rent
      uint256   _rent       = uint256(_m[2])&k_rentMask;                        // _m[2] = duration/rent
      string memory _name   = labelStrFromBytes32(_m[3]);                       // _m[3] = domainName with length byte  
      
      _register(c,_rent,_name,_dur,_m[1]);

      // ---------------------------- lock group structure----------------------
      
      my_require(installations[ uint64( (uint256(uint256(c) & k_commitMask)>>160) & k_commit2Mask ) ]==0x0,"r3"); // NOT locked getInstallTime(c), getCommitment(c) 
      
      uint64 hsh = uint64( (uint256(uint256(c) & k_commitMask)>>160) & k_commit2Mask );
      installations[hsh] = uint256( installations[hsh] & k_aMask ) + k_lockedMask;      // saveInstallTime(1,c)

      _updateStructure(c,data32);
    }
    
    function domainReport(string calldata _dom,uint command) external payable returns (uint256 report, address gwpc, address ptc, address gwfc, bytes memory structure) { 
      uint256 stamp     = 0;
      uint    nb        = 32;
      bytes memory abi32;
      
      bytes32 dHash      = getDomainHash(_dom);                                                                          // domain hash, ENS
      address owner      = base.ens().owner(dHash);                                                                      // ENS domain owner
      bool hasCommitment = uint64(getCommitment(dHash))>0x0;                                                             // hasCommitment
      
                                                                                report = uint256(getInstallTime(dHash) & 0x1);// locked group ? getInstallTime() =  domain install time (GWF)
      if (!base.ens().recordExists(dHash))                                      report = uint256(uint(report)+2);        // domain available - NOT existing
      if (owner == address(getGWProxy(dHash)) || owner == address(this))        report = uint256(uint(report)+4);        // domain contracted, GroupWalletProxy or this GWF contract is OWNER of domain
      if (base.ens().resolver(dHash) == address(resolverContract))              report = uint256(uint(report)+8);        // resolverContract is resolving domain, valid resolver
      if (hasCommitment)                                                        report = uint256(uint(report) + 16);     // domain with commitment
      if (resolverContract.addr(dHash) == address(this))                        report = uint256(uint(report) + 64);     // domain ENS resolves to the GWF contract, this contract

      if ((!isENSV3()&&(uint256(stringMemoryTobytes32(resolverContract.text(dHash,"use_color_table")))!=0x0000000f7573655f636f6c6f725f7461626c6500000000000000000000000000)) || (isENSV3()&&strlen(resolverContract.text(dHash,"use_color_table"))>0))
                                                                                report = uint256(uint(report)+2048);     // has colorTable
      if (getProxyToken(dHash) != k_add00)                                      report = uint256(uint(report)+4096);     // has proxyToken contract
      if (owner == k_add00)                                                     report = uint256(uint(report)+256);      // domain NOT owned owner = 0x000000000000000000000000000
      if (controllerContract.available(_dom))                                   report = uint256(uint(report)+512);      // domain is available
      if (owner == address(tx.origin))                                          report = uint256(uint(report)+1024);     // domain owned by default account

      if (isENSV3() && (owner == controllerContract.nameWrapper()))             report = uint256(uint(report)+8196);     // 8192+4 owner is NameWrapper, belonging to ENS V3, domain contracted
      
      if (hasCommitment) {                                                                                               // hasCommitment
        (nb, abi32) = resolverContract.ABI(dHash,128);                                                                   // isABI128
        if ((nb==128)&&(abi32.length>=224)&&((abi32.length%32)==0))             report = uint256(uint(report)+128);

        (nb, abi32) = resolverContract.ABI(dHash,32);                                                                    // isABIstructure, ABI32
        if ((nb==32)&&(abi32.length>32)&&(abi32.length<0x1000))                 report = uint256(uint(report)+32);
        
        nb = getOwners_internal( commitments[ dHash] ).length;                                                           // nb of members in group

        stamp = uint256(stringMemoryTobytes32(resolverContract.text(dHash,"use_timeStamp")));
        if (!isENSV3()&&(stamp==0x0000000d7573655f74696d655374616d70000000000000000000000000000000)) stamp = 0;          // timeStamp
      }
      
      report = uint256(stamp) + uint256(uint256(report)<<128) + uint256(nb << 64) + uint256(getInstallTime(dHash));
    
      if (command == 0) return (report,   getGWProxy(dHash),getProxyToken(dHash),address(this),abi32);                   // complete GWF domain report
      if (command == 1) return (stamp,    getGWProxy(dHash),getProxyToken(dHash),address(this),abi32);                   // only timeStamp of installation
    }
    
    function inviteInstallToken_q31n(bytes32[] memory _mem) public payable {      
      bytes32 _dHash = _mem[0];                                                 // _mem[0] domain hash identifying project/group
      uint l         = _mem.length-5;                                           // 5 words
      uint64 time    = uint64(block.timestamp*1000)&uint64(0xffffffffffff0000); // time % 0x1000
      uint256 amount = uint256(msg.value / uint256((l/5) + 3));                 // ether transferred to each member, 1 for PT, 1 for PGW, 1 remains for GWF
      uint256 c      = commitments[_dHash];
      
      {
       my_require((address(uint160(c & k_aMask))==msg.sender||address(msg.sender)==address(this))&&l>=10&&l<=160&&address(uint160(uint256(_mem[1])))!=k_add00&&msg.value>0,"w"); // msg.sender, l = l*5, masterCopy, value
      }
    
      address[] memory GWowners = new address[](l/5);                           // create array of owners()
      uint256[] memory GTowners = new uint256[]((l/5)+2);                       // create array of tokenOwner
      bytes memory abiCmd;                                                      // resolverContract.setABI
      
      {
        address o;
        bytes32 d;
        
        uint i=5;
        uint nb = 0;
        do {
          o = address(uint160(uint256(_mem[i+2]) & k_aMask));                   // owner address 
          d = _mem[i+1];                                                        // domainLabel hash 6, 11, 16...  _mem[i+1] = domain label hash 'vitalik.ethereum.eth'
          
          my_require(o!=k_add00 && _mem[i]!=0x0 && d!=0x0, "v4");               // 5, 9, 13... _mem[i] = label hash 'vitalik' || ENSV3: label str with length (bytes32)
          
          GWowners[nb] = o;                                                     // array of nb owners()
          GTowners[nb] = uint256(_mem[i+2]);                                    // _mem[i+2] array of tokenOwner uint256 contains share and address
          
          abiCmd       = abi.encodePacked(abiCmd,_mem[i+3]);                    // _mem[i+3] + 1 abi extra word 8, 13, 18... 

          my_require(payable(address(uint160(o))).send(amount),"v5");
          emit Deposit(address(uint160(o)),amount);
          
          if (!isENSV3()) {
            base.ens().setSubnodeRecord(_dHash, _mem[i], address(this), address(resolverContract), time); // assign ENS name e.g. vitalik.ethereum.eth
          } else
          {
            _setSubnodeRecordV3(_dHash,_mem[i],address(this),0);
          }

          {
            string memory avatar = bytesToStr(_mem[i+4],32);                    // _mem[i+4]  avatar url
            resolverContract.setText(d,string('avatar'),avatar);
          }

         _setOwner(d, o,_mem[i],_dHash);                                        // _mem[i+0] labelHash || labelStr

          nb++;
          i = i+5;
        } while ((i-5)<l&&i<=160);
      }
      
      {
        abiCmd = abi.encodePacked(k_abi80,k_abi80,k_abi80,bytes32(uint256((l/5)+1)<<5),abiCmd,_mem[2]);
        resolverContract.setABI(_dHash,128,abiCmd);                                                       // member addresses to ABI, one extra ABI 128 word      
      }

      ProxyGroupWallet proxyGW = new ProxyGroupWallet(address(uint160(uint256(_mem[4]))),concatString(_mem[3],tld()),reverseContract); // _mem[4] = masterCopy === GroupWalletMaster GWM, domainname

      {
        AbstractGWF_GWP(address(proxyGW)).newProxyGroupWallet_j5O{value: amount}( GWowners );             // initialize list of owners
        
        _setOwner(_dHash,address(proxyGW),0x0,_dHash);

        commitments[_dHash] = uint256(uint160(address(proxyGW)) & k_aMask) + uint256(c&k_commitMask);     // save initiator = GWP-GroupWalletProxy owner
        emit ProxyGroupWalletCreation(proxyGW);
      }

      {
        ProxyToken proxy = new ProxyToken( address(uint160(uint256(_mem[1]))) );                          // install ProxyToken contract and call the Token contract immediately, masterCopy
        
        GTowners[(l/5)+0] = uint256(_mem[3]);                                                             // tokenName = domain name
        GTowners[(l/5)+1] = uint256(uint160(address(proxyGW)));                                           // GroupWalletProxy contract address
        
        Abstract_TokenProxy(address(proxy)).newToken{value: amount}( GTowners );
      
        installations[ uint64( (uint256(c & k_commitMask)>>160) & k_commit2Mask ) ] = uint256( uint160(address(proxy)) ) + uint256( (uint256(time+1)<<160) & k_commitMask ); // saveProxyToken(address(proxy),_dHash) && saveInstallTime(time+1,_dHash)  
        emit ProxyTokenCreation(proxy);     
      }
    }

    function _setSubnodeRecordV3(bytes32 _dHash,bytes32 _labelStr,address _owner,uint64 _timeStamp) private {
      I_NWrapper(controllerContract.nameWrapper()).setSubnodeRecord(_dHash,labelStrFromBytes32(_labelStr),_owner,address(resolverContract),_timeStamp,0,0);
    }

   
    function upgradeGWF(bytes32 _dHash, address _GWF) external payable {
      uint256 c = commitments[_dHash];
      my_require(address( uint160(c & k_aMask) )==msg.sender&&version()<Abstract_GWF(_GWF).version()&&GWFowner==Abstract_GWF(_GWF).GWFowner(),"u");
      Abstract_GWF(_GWF).importGWP(_dHash,c,installations[ getCommitment(_dHash) ]);
    }
    
    function importGWP(bytes32 _dHash, uint256 commitment, uint256 installation) external payable {
      my_require(version()>Abstract_GWF(msg.sender).version()&&GWFowner==Abstract_GWF(msg.sender).GWFowner(),"i");
      
      address _GWP = Abstract_GWF(msg.sender).getGWProxy(_dHash);
      address _PT  = Abstract_GWF(msg.sender).getProxyToken(_dHash);

      my_require(installations[ uint64( (uint256(commitment & k_commitMask)>>160) & k_commit2Mask ) ]==0&&address(uint160(commitment & k_aMask))==_GWP&&_PT==address(uint160(uint256(installation) & k_aMask))&&commitments[_dHash]==0,"i5");

      installations[ uint64( (uint256(commitment & k_commitMask)>>160) & k_commit2Mask ) ] = installation;
      commitments[_dHash] = uint256(uint160(_GWP) & k_aMask) + uint256(commitment&k_commitMask);
    }
  
    function replicate_group_l9Y(bytes32[] calldata _m, bytes calldata data32, bytes32[] calldata _mem) external payable {
      uint256 v = 0;
    
      if (_m.length==4) {                                                       // replicate group
        v = uint256(_m[2])&k_rentMask;
        my_require(msg.value>0&&v>0&&msg.value>v&&address(uint160( commitments[ _m[0] ] & k_aMask ))==msg.sender,"G");
        (this).registerAndLock_x3x{value: v}( _m, data32 );
      }
      
      if (_m.length==1) {                                                       // confirm spin-off group
        my_require(msg.value>0,"H");
        isInitiatorOrMember2(_mem[0]);
        (this).lock_dfs(_mem[0], data32);
      }
      
      v = msg.value/25;                                                         // 4% contract provision funding ungravel
      
      (this).inviteInstallToken_q31n{value: uint256(msg.value)-v}( _mem );
    }
    
    function isInitiatorOrMember2(bytes32 _dHash) private view {                // update(), replicate()
      uint256 c = commitments[_dHash];
      if (address(uint160(c & k_aMask))==msg.sender) return;
      
      address[] memory memArr = getOwners_internal(c);                          // might be optimized in GW2
      uint l = memArr.length;

      uint i=0;
      
      do {
        if (memArr[i] == msg.sender) return;
        i++;
      } while(i<l);
      
      my_require(false, "owner2");
    }

    function isInitiatorOrMember(bytes32 _dHash) private view returns (address tProxy) {  // setTokenPrices(), transferOwner(), freezeToken(), transferToken(), transferTokenFrom()
      
      uint256 c = commitments[_dHash];
      if (address(uint160(c & k_aMask))==msg.sender) return address( uint160( uint256( installations[  uint64( (uint256( c & k_commitMask )>>160) & k_commit2Mask ) ] ) & k_aMask ) );

      address[] memory memArr = getOwners_internal(c);                          // might be optimized in GW2
      uint    l = memArr.length;
  
      uint index = 32;
      uint i=0;
      
      do {
        if (memArr[i] == msg.sender) index = i;
        i++;
      } while(i<l&&index==32);
      
      my_require(index>=0 && index<32, " - illegal/unknown initiator or owner.");
      
      return address( uint160( uint256( installations[  uint64( (uint256( c & k_commitMask )>>160) & k_commit2Mask ) ] ) & k_aMask ) );
    }
    
    function transferOwner_v3m(bytes32 _dHash, bytes memory data) public payable { 
      address tProxy = isInitiatorOrMember(_dHash);
      // solium-disable-next-line security/no-inline-assembly
      assembly {
        if eq(call(gas(), tProxy, 0, add(data, 0x20), mload(data), 0, 0), 0) { revert(0, 0) }
      }
      emit TransferOwner(_dHash); 
    }

    function setTokenPrices_dgw(bytes32 _dHash, bytes memory data) public payable { 
      address tProxy = isInitiatorOrMember(_dHash);
      // solium-disable-next-line security/no-inline-assembly
      assembly {
        if eq(call(gas(), tProxy, 0, add(data, 0x20), mload(data), 0, 0), 0) { revert(0, 0) }
      }
      emit SetPrices(_dHash);
    }
  
    function freezeToken_LGS(bytes32 _dHash, bytes memory data) public payable { 
      address tProxy = isInitiatorOrMember(_dHash);
      // solium-disable-next-line security/no-inline-assembly
      assembly {
        if eq(call(gas(), tProxy, 0, add(data, 0x20), mload(data), 0, 0), 0) { revert(0, 0) }
      }
      emit FreezeToken(_dHash);
    }
    
    function TransferToken_8uf(bytes32 _dHash, bytes memory data) public payable { 
      address tProxy = isInitiatorOrMember(_dHash);
      // solium-disable-next-line security/no-inline-assembly
      assembly {
        if eq(call(gas(), tProxy, 0, add(data, 0x20), mload(data), 0, 0), 0) { revert(0, 0) }
      }
      emit Transfer(address(this), address( uint160(uint256( uint256(mb32(substring(data,4,32))) & k_aMask ))), uint256( mb32(substring(data,36,32)) ) / 100);
    }

    function TransferTokenFrom_VCv(bytes32 _dHash, bytes memory data) public payable { 
      address tProxy = isInitiatorOrMember(_dHash);
      // solium-disable-next-line security/no-inline-assembly
      assembly {
        if eq(call(gas(), tProxy, 0, add(data, 0x20), mload(data), 0, 0), 0) { revert(0, 0) }
      }
      emit Transfer(address( uint160(uint256( uint256(mb32(substring(data,4,32))) & k_aMask ))), address( uint160(uint256( uint256(mb32(substring(data,36,32))) & k_aMask ))), uint256( mb32(substring(data,68,32)) ) / 100);
    }
    
    function withdraw() external {
      my_require(GWFowner==msg.sender&&payable(address(uint160(msg.sender))).send(address(this).balance-1),"W");
    }
    
    function tld() public view returns (string memory) {
      uint chainId = block.chainid;
      if (chainId==1284)     return ".glmr";
      if (chainId==137)      return ".matic";
      if (chainId==11155111) return ".sepeth";
      if (chainId==100)      return ".gnosis";
      if (chainId==56)       return ".bsc";
      return ".eth";
    }
    
    function minimumPrePaid() private view returns (uint) {
      uint chainId = block.chainid;

      if (chainId==1284)     return  4.0 ether;                                 // .glmr
      if (chainId==137)      return  1.0 ether;                                 // .matic
      if (chainId==11155111) return 0.25 ether;                                 // .sepeth
      if (chainId==100)      return  0.1 ether;                                 // .gnosis
      if (chainId==56)       return 0.01 ether;                                 // .bsc bscmain
      if (chainId==1)        return 0.01 ether;                                 // .eth mainnet
      if (chainId==5)        return  0.2 ether;                                 // .eth goerli
      return 0.2 ether;                                                         // .eth ganache & other chains
    }

    function version() public pure returns(uint256 v) {
      return 20010078;
    }
    
    function receivePayment() external payable returns(bool) {                  // receive e.g. ungravel license fees
      emit Deposit(msg.sender, msg.value);
      return true;
    }

    fallback() external payable
    {
      my_require(false, "fb");
    }
    
    receive() external payable {      
      if (msg.value==0) return;                                                 // no payment at all
      emit Deposit(msg.sender, msg.value);
    }

    constructor (AbstractETHRegController _controller,AbstractGWF_Resolver _resolver,AbstractBaseRegistrar _base,AbstractGWF_ENS _ens,AbstractGWF_ReverseRegistrar _reverse, NWrapper _nwrapper,Abs_AuctionRegistrar _auctionMaster) payable {      
      GWFowner                          = tx.origin;
      
      controllerContract                = _controller;
      resolverContract                  = _resolver;
      base                              = _base;
      ens                               = _ens;
      reverseContract                   = _reverse;
      ensNameWrapper                    = _nwrapper;
      auctionContract                   = _auctionMaster;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract AbstractETHRegController","name":"_controller","type":"address"},{"internalType":"contract AbstractGWF_Resolver","name":"_resolver","type":"address"},{"internalType":"contract AbstractBaseRegistrar","name":"_base","type":"address"},{"internalType":"contract AbstractGWF_ENS","name":"_ens","type":"address"},{"internalType":"contract AbstractGWF_ReverseRegistrar","name":"_reverse","type":"address"},{"internalType":"contract NWrapper","name":"_nwrapper","type":"address"},{"internalType":"contract Abs_AuctionRegistrar","name":"_auctionMaster","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"}],"name":"ColorTableSaved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"EtherScriptSaved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"}],"name":"FreezeToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"PrePaidAccountReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ProxyGroupWallet","name":"proxy","type":"address"}],"name":"ProxyGroupWalletCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ProxyToken","name":"proxy","type":"address"}],"name":"ProxyTokenCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"}],"name":"SetPrices","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"}],"name":"StructureDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"v1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"v2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"v3","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"v4","type":"uint256"}],"name":"TestReturn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"domainHash","type":"bytes32"}],"name":"TransferOwner","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"GWFowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransferTokenFrom_VCv","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransferToken_8uf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"uint256","name":"_rent","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_dur","type":"uint256"},{"internalType":"bytes32","name":"_secret","type":"bytes32"}],"name":"_register","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"auctionContract","outputs":[{"internalType":"contract Abs_AuctionRegistrar","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base","outputs":[{"internalType":"contract AbstractBaseRegistrar","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerContract","outputs":[{"internalType":"contract AbstractETHRegController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_dom","type":"string"},{"internalType":"uint256","name":"command","type":"uint256"}],"name":"domainReport","outputs":[{"internalType":"uint256","name":"report","type":"uint256"},{"internalType":"address","name":"gwpc","type":"address"},{"internalType":"address","name":"ptc","type":"address"},{"internalType":"address","name":"gwfc","type":"address"},{"internalType":"bytes","name":"structure","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ens","outputs":[{"internalType":"contract AbstractGWF_ENS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ensNameWrapper","outputs":[{"internalType":"contract NWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"freezeToken_LGS","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getGWF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"}],"name":"getGWProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_domainHash","type":"bytes32"}],"name":"getInstallTime","outputs":[{"internalType":"uint256","name":"iTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"address","name":"_owner","type":"address"}],"name":"getIsOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_domainHash","type":"bytes32"}],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"}],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_domainHash","type":"bytes32"}],"name":"getProxyToken","outputs":[{"internalType":"address","name":"p","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"uint256","name":"commitment","type":"uint256"},{"internalType":"uint256","name":"installation","type":"uint256"}],"name":"importGWP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_mem","type":"bytes32[]"}],"name":"inviteInstallToken_q31n","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data32","type":"bytes"}],"name":"lock_dfs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"r","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"receivePayment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_m","type":"bytes32[]"},{"internalType":"bytes","name":"data32","type":"bytes"}],"name":"registerAndLock_x3x","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_m","type":"bytes32[]"}],"name":"register_ki_","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_m","type":"bytes32[]"},{"internalType":"bytes","name":"data32","type":"bytes"},{"internalType":"bytes32[]","name":"_mem","type":"bytes32[]"}],"name":"replicate_group_l9Y","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_domainHash","type":"bytes32"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"reserve_ogn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_domainHash","type":"bytes32"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"reserve_replicate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resolverContract","outputs":[{"internalType":"contract AbstractGWF_Resolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reverseContract","outputs":[{"internalType":"contract AbstractGWF_ReverseRegistrar","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setTokenPrices_dgw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"tld","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferOwner_v3m","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"bytes","name":"data32","type":"bytes"}],"name":"update_P5q","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dHash","type":"bytes32"},{"internalType":"address","name":"_GWF","type":"address"}],"name":"upgradeGWF","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x608060405260405162005a6738038062005a678339810160408190526200002691620000cb565b60058054326001600160a01b0319918216179091556001805482166001600160a01b03998a1617905560008054821697891697909717909655600280548716958816959095179094556003805486169387169390931790925560048054851691861691909117905560068054841691851691909117905560078054909216921691909117905562000176565b6001600160a01b0381168114620000c857600080fd5b50565b600080600080600080600060e0888a031215620000e757600080fd5b8751620000f481620000b2565b60208901519097506200010781620000b2565b60408901519096506200011a81620000b2565b60608901519095506200012d81620000b2565b60808901519094506200014081620000b2565b60a08901519093506200015381620000b2565b60c08901519092506200016681620000b2565b8091505092959891949750929550565b6158e180620001866000396000f3fe608060405260043610620002375760003560e01c806336aaedbe116200013f57806373a9615c11620000bb578063b5a01c4e1162000079578063b5a01c4e1462000683578063ce2e91cf14620006a5578063deb931a214620005d5578063ee9390df14620006ca578063f23a6e6114620006e15762000282565b806373a9615c14620005b35780637ca7a61c14620005d5578063835c19f3146200060f578063847e10b5146200062a57806394cac45a146200065e5762000282565b80634693d1cd11620001095780634693d1cd146200050857806347c5da98146200052a5780635001f3b5146200054c57806354fd4d50146200056e57806356f9ca5b14620005915762000282565b806336aaedbe14620004925780633ccfd60b14620004b75780633f15457f14620004cf5780634651a1ef14620004f15762000282565b80619aae11620001c7578063179ff2011162000197578063179ff20114620003fe5780631e0c8b8d146200041557806327a58be7146200043f5780632cef86d414620004545780632d551432146200046b5762000282565b80619aae146200037a578061c7bf1462000391578061efba14620003a85780630ab8afac14620003bf5762000282565b80614c3411620002095780614c3414620003075780617853146200031e5780617e761462000335578061852b146200034c5780618c7c14620003635762000282565b806117bb14620002ab5780613a2f14620002c25780613fe614620002d9578061481414620002f05762000282565b366200028257346000036200024857005b604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b620002a9600060405180604001604052806002815260200161333160f11b8152506200072c565b005b620002a9620002bc36600462004114565b6200075c565b620002a9620002d33660046200419d565b6200082a565b620002a9620002ea366004620042a9565b620009bb565b620002a962000301366004620042a9565b62000a1e565b620002a96200031836600462004308565b62000a79565b620002a96200032f36600462004308565b62000a91565b620002a96200034636600462004357565b62000b60565b620002a96200035d366004620043e3565b62000cc3565b620002a9620003743660046200447c565b620017da565b620002a96200038b366004620042a9565b62001a46565b620002a9620003a2366004620042a9565b62001aa1565b620002a9620003b9366004620042a9565b62001b77565b348015620003cc57600080fd5b50600754620003e1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620002a96200040f3660046200451f565b62001bfd565b6200042c620004263660046200454c565b62001ec1565b604051620003f5959493929190620045ef565b3480156200044c57600080fd5b5030620003e1565b620002a96200046536600462004644565b620029a1565b3480156200047857600080fd5b506200048362002b8c565b604051620003f5919062004677565b3480156200049f57600080fd5b50620003e1620004b13660046200468c565b62002c89565b348015620004c457600080fd5b50620002a962002cd2565b348015620004dc57600080fd5b50600354620003e1906001600160a01b031681565b620002a962000502366004620046a6565b62002d38565b3480156200051557600080fd5b50600554620003e1906001600160a01b031681565b3480156200053757600080fd5b50600654620003e1906001600160a01b031681565b3480156200055957600080fd5b50600254620003e1906001600160a01b031681565b3480156200057b57600080fd5b50630131545e5b604051908152602001620003f5565b3480156200059e57600080fd5b50600454620003e1906001600160a01b031681565b348015620005c057600080fd5b50600054620003e1906001600160a01b031681565b348015620005e257600080fd5b50620003e1620005f43660046200468c565b6000908152600960205260409020546001600160a01b031690565b6200061962002dca565b6040519015158152602001620003f5565b3480156200063757600080fd5b506200064f620006493660046200468c565b62002e0b565b604051620003f59190620046c9565b3480156200066b57600080fd5b50620005826200067d3660046200468c565b62002e2f565b3480156200069057600080fd5b50600154620003e1906001600160a01b031681565b348015620006b257600080fd5b5062000619620006c436600462004644565b62002e74565b620002a9620006db36600462004718565b62002f19565b348015620006ee57600080fd5b50620007126200070036600462004792565b63f23a6e6160e01b9695505050505050565b6040516001600160e01b03199091168152602001620003f5565b8082620007575760405162461bcd60e51b81526004016200074e919062004677565b60405180910390fd5b505050565b600060808383600281811062000776576200077662004803565b9050602002013560001c901c905060006001600160801b0384846002818110620007a457620007a462004803565b9050602002013560001c1690506000620007da85856003818110620007cd57620007cd62004803565b90506020020135620032ad565b90506200082385856000818110620007f657620007f662004803565b905060200201358383868989600181811062000816576200081662004803565b9050602002013562002f19565b5050505050565b60008073dadadadadadadadadadadadadadadadadadadada6001600160a01b0316600085856040516200085f92919062004819565b60006040518083038185875af1925050503d80600081146200089e576040519150601f19603f3d011682016040523d82523d6000602084013e620008a3565b606091505b509092509050620008f28315801590620008ba5750825b8015620008c657508151155b8015620008d257508515155b604051806040016040528060018152602001604f60f81b8152506200072c565b6040518681527f3e511999388f0c3a67f72ff8badf470ca0059009c4c98c62ebb899f43d410ded9060200160405180910390a1600154604051631e29f97960e31b8152600481018790526001600160a01b039091169063f14fcbc890602401600060405180830381600087803b1580156200096c57600080fd5b505af115801562000981573d6000803e3d6000fd5b50620009a192503391505060a087901b6001600160a01b0319166200483f565b600096875260096020526040909620959095555050505050565b6000620009c883620032be565b905060008060008451602086016000865af103620009e557600080fd5b6040518381527fe3902a1098e480d8c716fe6a4c40a712754776fb7dc5d11afc1b46f30cd2c1dd906020015b60405180910390a1505050565b600062000a2b83620032be565b905060008060008451602086016000865af10362000a4857600080fd5b6040518381527f097e9cbd79dd42ce23267a0e236cf731271447403ec2b0aae8e3f840e4c56a059060200162000a11565b62000a8483620033d3565b620007578383836200348b565b60008381526009602052604090205462000b026001600160a01b03821633148062000abb57503330145b801562000ae257506001600160401b0360a083901c16600090815260086020526040902054155b604051806040016040528060018152602001601360fa1b8152506200072c565b60a081901c6001600160401b03811660009081526008602052604090205462000b3a90600160a01b906001600160a01b03166200483f565b6001600160401b038216600090815260086020526040902055620008238585856200348b565b60008484600081811062000b785762000b7862004803565b905060200201359050600060808686600281811062000b9b5762000b9b62004803565b9050602002013560001c901c905060006001600160801b038787600281811062000bc95762000bc962004803565b9050602002013560001c169050600062000bf288886003818110620007cd57620007cd62004803565b905062000c12848383868c8c600181811062000816576200081662004803565b6001600160401b0360a085901c166000908152600860209081526040918290205482518084019093526002835261723360f01b9183019190915262000c5a919015906200072c565b60a084901c6001600160401b03811660009081526008602052604090205462000c9290600160a01b906001600160a01b03166200483f565b6001600160401b03821660009081526008602052604090205562000cb88588886200348b565b505050505050505050565b60008160008151811062000cdb5762000cdb62004803565b6020026020010151905060006005835162000cf7919062004855565b9050600067ffffffffffff000062000d12426103e86200486b565b169050600062000d246005846200489b565b62000d319060036200483f565b62000d3d90346200489b565b60008581526009602052604090205490915062000df36001600160a01b03821633148062000d6a57503330145b801562000d785750600a8510155b801562000d86575060a08511155b801562000dc6575060006001600160a01b03168760018151811062000daf5762000daf62004803565b602002602001015160001c6001600160a01b031614155b801562000dd35750600034115b604051806040016040528060018152602001607760f81b8152506200072c565b600062000e026005866200489b565b6001600160401b0381111562000e1c5762000e1c620041f3565b60405190808252806020026020018201604052801562000e46578160200160208202803683370190505b509050600062000e586005876200489b565b62000e659060026200483f565b6001600160401b0381111562000e7f5762000e7f620041f3565b60405190808252806020026020018201604052801562000ea9578160200160208202803683370190505b50905060606000806005815b6001600160a01b038d62000ecb8460026200483f565b8151811062000ede5762000ede62004803565b602002602001015160001c1693508c82600162000efc91906200483f565b8151811062000f0f5762000f0f62004803565b6020026020010151925062000f8d60006001600160a01b0316856001600160a01b03161415801562000f6057508d838151811062000f515762000f5162004803565b60200260200101516000801b14155b801562000f6c57508315155b604051806040016040528060028152602001611d8d60f21b8152506200072c565b8387828151811062000fa35762000fa362004803565b6001600160a01b03909216602092830291909101909101528c62000fc98360026200483f565b8151811062000fdc5762000fdc62004803565b602002602001015160001c86828151811062000ffc5762000ffc62004803565b6020908102919091010152848d620010168460036200483f565b8151811062001029576200102962004803565b602002602001015160405160200162001044929190620048b2565b60408051601f198184030181529082905295506200109f906001600160a01b038616908b156108fc02908c906000818181858888f1935050505060405180604001604052806002815260200161763560f01b8152506200072c565b604080516001600160a01b0386168152602081018b90527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a16006546001600160a01b03166200122257600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001146573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116c9190620048d6565b6001600160a01b0316635ef2c7f08d8f858151811062001190576200119062004803565b60209081029190910101516000546040516001600160e01b031960e086901b168152600481019390935260248301919091523060448301526001600160a01b031660648201526001600160401b038d16608482015260a401600060405180830381600087803b1580156200120357600080fd5b505af115801562001218573d6000803e3d6000fd5b505050506200124d565b6200124d8c8e84815181106200123c576200123c62004803565b60200260200101513060006200354e565b6000620012848e620012618560046200483f565b8151811062001274576200127462004803565b6020026020010151602062003661565b600054604080518082018252600681526530bb30ba30b960d11b6020820152905163043c4ea360e21b81529293506001600160a01b03909116916310f13a8c91620012d7918891908690600401620048f6565b600060405180830381600087803b158015620012f257600080fd5b505af115801562001307573d6000803e3d6000fd5b50505050506200133683858f858151811062001327576200132762004803565b60200260200101518f62003722565b8062001342816200492f565b91506200135390508260056200483f565b91508a6200136360058462004855565b10801562001372575060a08211155b62000eb5575060809250829150819050600562001390818c6200489b565b6200139d9060016200483f565b901b60001b848d600281518110620013b957620013b962004803565b6020026020010151604051602001620013d8969594939291906200494b565b60408051601f1981840301815290829052600054630623195b60e41b83529092506001600160a01b03169063623195b0906200141e908b9060809086906004016200498f565b600060405180830381600087803b1580156200143957600080fd5b505af11580156200144e573d6000803e3d6000fd5b505050506000896004815181106200146a576200146a62004803565b602002602001015160001c620014a78b6003815181106200148f576200148f62004803565b6020026020010151620014a162002b8c565b62003a65565b6004546040516001600160a01b0390911690620014c490620040aa565b620014d293929190620049b9565b604051809103906000f080158015620014ef573d6000803e3d6000fd5b509050806001600160a01b031661efe487866040518363ffffffff1660e01b81526004016200151f9190620046c9565b6000604051808303818588803b1580156200153957600080fd5b505af11580156200154e573d6000803e3d6000fd5b50505050506200156489826000801b8c62003722565b620015836001600160a01b031986166001600160a01b0383166200483f565b60008a81526009602090815260409182902092909255516001600160a01b03831681527f2838c32a89b339c02434475b29ec5c70e152ec9162c07692af7e891edfe0b6c8910160405180910390a160008a600181518110620015e957620015e962004803565b602002602001015160001c6040516200160290620040b8565b6001600160a01b039091168152602001604051809103906000f0801580156200162f573d6000803e3d6000fd5b5090508a60038151811062001648576200164862004803565b602002602001015160001c8460058b6200166391906200489b565b620016709060006200483f565b8151811062001683576200168362004803565b60209081029190910101526001600160a01b03821684620016a660058c6200489b565b620016b39060016200483f565b81518110620016c657620016c662004803565b602090810291909101015260405163177972f960e21b81526001600160a01b03821690635de5cbe490899062001701908890600401620049f0565b6000604051808303818588803b1580156200171b57600080fd5b505af115801562001730573d6000803e3d6000fd5b50505050506001600160a01b031960a08960016200174f919062004a2a565b6001600160401b0316901b16816001600160a01b03166200177191906200483f565b60a087901c6001600160401b031660009081526008602090815260409182902092909255516001600160a01b03831681527f0425e82c117c5472b3e53ef839e6937ab94800a3caaec9093426c1f906633823910160405180910390a15050505050505050505050565b60006004869003620018fa576001600160801b038787600281811062001804576200180462004803565b9050602002013560001c1690506200189c600034118015620018265750600082115b80156200183257508134115b80156200187c5750336001600160a01b03600960008b8b82816200185a576200185a62004803565b90506020020135815260200190815260200160002054166001600160a01b0316145b604051806040016040528060018152602001604760f81b8152506200072c565b604051613f3b60e11b81523090617e76908390620018c5908b908b908b908b9060040162004ab0565b6000604051808303818588803b158015620018df57600080fd5b505af1158015620018f4573d6000803e3d6000fd5b50505050505b6001869003620019c9576200192c60003411604051806040016040528060018152602001600960fb1b8152506200072c565b620019538383600081811062001946576200194662004803565b90506020020135620033d3565b3061785384846000816200196b576200196b62004803565b9050602002013587876040518463ffffffff1660e01b8152600401620019949392919062004adb565b600060405180830381600087803b158015620019af57600080fd5b505af1158015620019c4573d6000803e3d6000fd5b505050505b620019d66019346200489b565b90503061852b620019e8833462004855565b85856040518463ffffffff1660e01b815260040162001a0992919062004af7565b6000604051808303818588803b15801562001a2357600080fd5b505af115801562001a38573d6000803e3d6000fd5b505050505050505050505050565b600062001a5383620032be565b905060008060008451602086016000865af10362001a7057600080fd5b6040518381527f5942e033d058d46e4269ccd9ab9a1a97ec2b2a95c5137a504fe4e1a67b4b6ae19060200162000a11565b600062001aae83620032be565b905060008060008451602086016000865af10362001acb57600080fd5b6001600160a01b0362001aed62001ae6846024602062003be1565b6020015190565b60001c166001600160a01b03166001600160a01b0362001b1562001ae6856004602062003be1565b166001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef606462001b5562001ae6876044602062003be1565b62001b6191906200489b565b60405190815260200160405180910390a3505050565b600062001b8483620032be565b905060008060008451602086016000865af10362001ba157600080fd5b6001600160a01b0362001bbc62001ae6846004602062003be1565b166001600160a01b0316307fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef606462001b5562001ae6876024602062003be1565b62001d0b336001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c66919062004b15565b630131545e11801562001ceb5750336001600160a01b0316634693d1cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001cb3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cd99190620048d6565b6005546001600160a01b039081169116145b604051806040016040528060018152602001606960f81b8152506200072c565b604051631f29e98760e21b8152600481018490526000903390637ca7a61c90602401602060405180830381865afa15801562001d4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d719190620048d6565b604051631b5576df60e11b81526004810186905290915060009033906336aaedbe90602401602060405180830381865afa15801562001db4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dda9190620048d6565b6001600160401b0360a086901c1660009081526008602052604090205490915062001e6a9015801562001e1857506001600160a01b03858116908416145b801562001e3057506001600160a01b03828116908516145b801562001e495750600086815260096020526040902054155b60405180604001604052806002815260200161693560f01b8152506200072c565b6001600160401b0360a085901c16600090815260086020526040902083905562001ea86001600160a01b031985166001600160a01b0384166200483f565b6000958652600960205260409095209490945550505050565b6000806000806060600080602090506060600062001f158c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003c8692505050565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f6d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f939190620048d6565b6001600160a01b03166302571be3836040518263ffffffff1660e01b815260040162001fc191815260200190565b602060405180830381865afa15801562001fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020059190620048d6565b9050600080620020248460009081526009602052604090205460a01c90565b6001600160401b03161190506200203b8362002e2f565b6001169a50600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002094573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020ba9190620048d6565b6001600160a01b031663f79fe538846040518263ffffffff1660e01b8152600401620020e891815260200190565b602060405180830381865afa15801562002106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200212c919062004b2f565b62002141576200213e8b60026200483f565b9a505b6000838152600960205260409020546001600160a01b03838116911614806200217257506001600160a01b03821630145b156200218857620021858b60046200483f565b9a505b60005460025460408051633f15457f60e01b815290516001600160a01b039384169390921691633f15457f916004808201926020929091908290030181865afa158015620021da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022009190620048d6565b6001600160a01b0316630178b8bf856040518263ffffffff1660e01b81526004016200222e91815260200190565b602060405180830381865afa1580156200224c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022729190620048d6565b6001600160a01b03160362002291576200228e8b60086200483f565b9a505b8015620022a857620022a58b60106200483f565b9a505b600054604051631d9dabef60e11b81526004810185905230916001600160a01b031690633b3b57de90602401602060405180830381865afa158015620022f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023189190620048d6565b6001600160a01b0316036200233757620023348b60406200483f565b9a505b6006546001600160a01b031615801562002403575060005460408051631674750f60e21b8152600481018690526024810191909152600f60448201526e7573655f636f6c6f725f7461626c6560881b6064820152620023ec916001600160a01b0316906359d1d43c906084015b600060405180830381865afa158015620023c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ae6919081019062004b89565b6f0f7573655f636f6c6f725f7461626c6560681b14155b80620024c857506006546001600160a01b031615158015620024c857506000805460408051631674750f60e21b8152600481018790526024810191909152600f60448201526e7573655f636f6c6f725f7461626c6560881b6064820152620024c6916001600160a01b0316906359d1d43c90608401600060405180830381865afa15801562002496573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620024c0919081019062004b89565b62003d37565b115b15620024df57620024dc8b6108006200483f565b9a505b6000620024ec8462002c89565b6001600160a01b0316146200250c57620025098b6110006200483f565b9a505b6001600160a01b0382166200252c57620025298b6101006200483f565b9a505b600160009054906101000a90046001600160a01b03166001600160a01b031663aeb8ce9b8f8f6040518363ffffffff1660e01b81526004016200257192919062004bd6565b602060405180830381865afa1580156200258f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025b5919062004b2f565b15620025cc57620025c98b6102006200483f565b9a505b326001600160a01b03831603620025ee57620025eb8b6104006200483f565b9a505b6006546001600160a01b031615158015620026935750600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200267e9190620048d6565b6001600160a01b0316826001600160a01b0316145b15620026aa57620026a78b6120046200483f565b9a505b8015620028e557600054604051631101d5ab60e11b815260048101859052608060248201526001600160a01b0390911690632203ab5690604401600060405180830381865afa15801562002702573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200272c919081019062004bec565b909550935060808514801562002744575060e0845110155b80156200275e5750602084516200275c919062004c41565b155b156200277457620027718b60806200483f565b9a505b600054604051631101d5ab60e11b815260048101859052602060248201526001600160a01b0390911690632203ab5690604401600060405180830381865afa158015620027c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620027ef919081019062004bec565b909550935060208514801562002806575060208451115b80156200281557506110008451105b156200282b57620028288b60206200483f565b9a505b600083815260096020526040902054620028459062003e53565b5160005460408051631674750f60e21b8152600481018790526024810191909152600d60448201526c07573655f74696d655374616d7609c1b6064820152919650620028a6916001600160a01b03909116906359d1d43c90608401620023a4565b9550620028bd6006546001600160a01b0316151590565b158015620028da5750856cd7573655f74696d655374616d7607c1b145b15620028e557600095505b620028f08362002e2f565b604086901b6200290560808e901b896200483f565b6200291191906200483f565b6200291d91906200483f565b9a508b60000362002966576000838152600960205260409020548b906001600160a01b03165b6200294e8562002c89565b30879a509a509a509a509a5050505050505062002996565b8b6001036200298f5760008381526009602052604090205486906001600160a01b031662002943565b5050505050505b939792965093509350565b60008281526009602052604090205462002ad36001600160a01b0382163314801562002a345750826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a2d919062004b15565b630131545e105b801562002ab35750826001600160a01b0316634693d1cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002aa19190620048d6565b6005546001600160a01b039081169116145b604051806040016040528060018152602001607560f81b8152506200072c565b816001600160a01b031663179ff20184836008600062002b028960009081526009602052604090205460a01c90565b6001600160401b03166001600160401b03168152602001908152602001600020546040518463ffffffff1660e01b815260040162002b53939291909283526020830191909152604082015260600190565b600060405180830381600087803b15801562002b6e57600080fd5b505af115801562002b83573d6000803e3d6000fd5b50505050505050565b60604661050481900362002bbb5750506040805180820190915260058152641733b636b960d91b602082015290565b8060890362002be65750506040805180820190915260068152652e6d6174696360d01b602082015290565b8062aa36a70362002c1457505060408051808201909152600781526605ce6cae0cae8d60cb1b602082015290565b8060640362002c405750506040805180820190915260078152662e676e6f73697360c81b602082015290565b8060380362002c695750506040805180820190915260048152632e62736360e01b602082015290565b505060408051808201909152600481526305ccae8d60e31b602082015290565b60006001600160a01b036008600062002cb18560009081526009602052604090205460a01c90565b6001600160401b031681526020810191909152604001600020541692915050565b60055462002d36906001600160a01b03163314801562002d165750336108fc62002cfe60014762004855565b6040518115909202916000818181858888f193505050505b604051806040016040528060018152602001605760f81b8152506200072c565b565b600154604051631e29f97960e31b8152600481018390526001600160a01b039091169063f14fcbc890602401600060405180830381600087803b15801562002d7f57600080fd5b505af115801562002d94573d6000803e3d6000fd5b5062002db492503391505060a083901b6001600160a01b0319166200483f565b6000928352600960205260409092209190915550565b604080513381523460208201526000917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a150600190565b60008181526009602052604090205460609062002e288162003e53565b9392505050565b6000806008600062002e508560009081526009602052604090205460a01c90565b6001600160401b0316815260208101919091526040016000205460a01c9392505050565b6000828152600960205260408120546001600160a01b03811633810362002ea15760009250505062002f13565b604051632b0891e960e01b81526001600160a01b038581166004830152821690632b0891e990602401602060405180830381865afa15801562002ee8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f0e919062004b2f565b925050505b92915050565b6000858152600960205260409020546001600160a01b031662002ff93382148062002f4357503330145b801562002fc1575060015460405163aeb8ce9b60e01b81526001600160a01b039091169063aeb8ce9b9062002f7d90889060040162004677565b602060405180830381865afa15801562002f9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002fc1919062004b2f565b801562002fcd57508215155b801562002fd957508315155b604051806040016040528060018152602001605960f81b8152506200072c565b6006546001600160a01b0316156200319d57604080516001808252818301909252600091816020015b60608152602001906001900390816200302257905050604051638b95dd7160e01b602082015260248101899052603c60448201526060606482018190526014608483015230901b60a482015290915060c4016040516020818303038152906040528160008151811062003099576200309962004803565b602090810291909101015260015460008054604051919283926001600160a01b03918216928b92620030e0928c9230928d928d92909116908b908a90819060240162004c58565b60408051601f198184030181529181526020820180516001600160e01b03166374694a2b60e01b1790525162003117919062004d15565b60006040518083038185875af1925050503d806000811462003156576040519150601f19603f3d011682016040523d82523d6000602084013e6200315b565b606091505b5091509150620031788280156200317157508151155b826200072c565b336001600160a01b038516036200319457620031948462003ed9565b50505062003213565b60015460005460405163f7a1696360e01b81526001600160a01b039283169263f7a16963928992620031de928a9230928b928b921690849060040162004d33565b6000604051808303818588803b158015620031f857600080fd5b505af11580156200320d573d6000803e3d6000fd5b50505050505b6000546001600160a01b0316637737221387866200323062002b8c565b6040516020016200324392919062004d82565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016200327192919062004db5565b600060405180830381600087803b1580156200328c57600080fd5b505af1158015620032a1573d6000803e3d6000fd5b50505050505050505050565b606062002f138260ff811662003661565b600081815260096020526040812054336001600160a01b03821603620033085760a01c6001600160401b03166000908152600860205260409020546001600160a01b031692915050565b6000620033158262003e53565b8051909150602060005b336001600160a01b03168482815181106200333e576200333e62004803565b60200260200101516001600160a01b03160362003359578091505b8062003365816200492f565b9150508281108015620033785750816020145b6200331f57620033a56020831060405180606001604052806026815260200162005886602691396200072c565b5050505060a01c6001600160401b03166000908152600860205260409020546001600160a01b031692915050565b600081815260096020526040902054336001600160a01b03821603620033f7575050565b6000620034048262003e53565b805190915060005b336001600160a01b03168382815181106200342b576200342b62004803565b60200260200101516001600160a01b03160362003449575050505050565b8062003455816200492f565b9150508181106200340c576200082360006040518060400160405280600681526020016537bbb732b91960d11b8152506200072c565b6000546040516001600160a01b039091169063623195b0908590602090620034b99087908790840162004819565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620034e8939291906200498f565b600060405180830381600087803b1580156200350357600080fd5b505af115801562003518573d6000803e3d6000fd5b505050507f3e511999388f0c3a67f72ff8badf470ca0059009c4c98c62ebb899f43d410ded8360405162000a1191815260200190565b600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620035a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035c89190620048d6565b6001600160a01b03166324c1af4485620035e286620032ad565b600080546040516001600160e01b031960e087901b1681526200361b94939289926001600160a01b031691899190819060040162004dd0565b6020604051808303816000875af11580156200363b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000823919062004b15565b60606000826001600160401b03811115620036805762003680620041f3565b6040519080825280601f01601f191660200182016040528015620036ab576020820181803683370190505b50905060005b848160208110620036c657620036c662004803565b1a60f81b828281518110620036df57620036df62004803565b60200101906001600160f81b031916908160001a9053508062003702816200492f565b9150508381108015620037155750602081105b620036b157509392505050565b60005460405162d5fa2b60e81b8152600481018690526001600160a01b0385811660248301529091169063d5fa2b0090604401600060405180830381600087803b1580156200377057600080fd5b505af115801562003785573d6000803e3d6000fd5b50505050816000801b036200384f57600054604080518082018252600681526530bb30ba30b960d11b602080830191909152825180840184528181527f68747470733a2f2f7777772e756e67726176656c2e636f6d2f756e672e706e6791810191909152915163043c4ea360e21b81526001600160a01b03909316926310f13a8c926200381a928692909190600401620048f6565b600060405180830381600087803b1580156200383557600080fd5b505af11580156200384a573d6000803e3d6000fd5b505050505b6006546001600160a01b03166200394657600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620038b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038da9190620048d6565b604051635b0fc9c360e01b8152600481018690526001600160a01b0385811660248301529190911690635b0fc9c390604401600060405180830381600087803b1580156200392757600080fd5b505af11580156200393c573d6000803e3d6000fd5b5050505062003a5f565b811562003a5457600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620039a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039c79190620048d6565b6001600160a01b031663c658e08682620039e185620032ad565b866000806040518663ffffffff1660e01b815260040162003a0795949392919062004e32565b6020604051808303816000875af115801562003a27573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a4d919062004b15565b5062003a5f565b62003a5f8362003ed9565b50505050565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b858260ff166020811062003aa65762003aa662004803565b1a60f81b6001600160f81b0319161562003b0b57858260ff166020811062003ad25762003ad262004803565b1a60f81b838360ff168151811062003aee5762003aee62004803565b60200101906001600160f81b031916908160001a90535062003b0e565b50805b8162003b1a8162004e82565b92505060ff811615801562003b32575060208260ff16105b62003a8e5760009150600062003b488662003d37565b90505b858360ff168151811062003b635762003b6362004803565b01602001516001600160f81b0319168462003b7f858562004ea4565b60ff168151811062003b955762003b9562004803565b60200101906001600160f81b031916908160001a9053508262003bb88162004e82565b935050808360ff1610801562003bd1575060208360ff16105b62003b4b57509195945050505050565b606062003c198451838562003bf791906200483f565b1115604051806040016040528060018152602001607360f81b8152506200072c565b6000826001600160401b0381111562003c365762003c36620041f3565b6040519080825280601f01601f19166020018201604052801562003c61576020820181803683370190505b5090506020808201908686010162003c7b8282876200401d565b509095945050505050565b60025460408051630ddf7fcb60e41b815290516000926001600160a01b03169163ddf7fcb09160048083019260209291908290030181865afa15801562003cd1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cf7919062004b15565b828051906020012060405160200162003d1a929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b8051600090819081905b8082101562003e4a57600085838151811062003d615762003d6162004803565b01602001516001600160f81b0319169050600160ff1b81101562003d945762003d8c6001846200483f565b925062003e34565b600760fd1b6001600160f81b03198216101562003db85762003d8c6002846200483f565b600f60fc1b6001600160f81b03198216101562003ddc5762003d8c6003846200483f565b601f60fb1b6001600160f81b03198216101562003e005762003d8c6004846200483f565b603f60fa1b6001600160f81b03198216101562003e245762003d8c6005846200483f565b62003e316006846200483f565b92505b508262003e41816200492f565b93505062003d41565b50909392505050565b60606001600160a01b03821632811462003ed057806001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562003ea6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002e28919081019062004ec0565b50606092915050565b600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003f2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f539190620048d6565b60405163a22cb46560e01b81526001600160a01b03838116600483015260016024830152919091169063a22cb46590604401600060405180830381600087803b15801562003fa057600080fd5b505af115801562003fb5573d6000803e3d6000fd5b505060005460405163a22cb46560e01b81526001600160a01b03858116600483015260016024830152909116925063a22cb4659150604401600060405180830381600087803b1580156200400857600080fd5b505af115801562000823573d6000803e3d6000fd5b602081106200405d5781518352620040376020846200483f565b9250620040466020836200483f565b91506200405560208262004855565b90506200401d565b806000036200406b57505050565b600060016200407c83602062004855565b6200408a9061010062005056565b62004096919062004855565b925184518416931916929092179092525050565b6104f3806200506583390190565b61032e806200555883390190565b60008083601f840112620040d957600080fd5b5081356001600160401b03811115620040f157600080fd5b6020830191508360208260051b85010111156200410d57600080fd5b9250929050565b600080602083850312156200412857600080fd5b82356001600160401b038111156200413f57600080fd5b6200414d85828601620040c6565b90969095509350505050565b60008083601f8401126200416c57600080fd5b5081356001600160401b038111156200418457600080fd5b6020830191508360208285010111156200410d57600080fd5b60008060008060608587031215620041b457600080fd5b843593506020850135925060408501356001600160401b03811115620041d957600080fd5b620041e78782880162004159565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620042345762004234620041f3565b604052919050565b60006001600160401b03821115620042585762004258620041f3565b50601f01601f191660200190565b60006200427d62004277846200423c565b62004209565b90508281528383830111156200429257600080fd5b828260208301376000602084830101529392505050565b60008060408385031215620042bd57600080fd5b8235915060208301356001600160401b03811115620042db57600080fd5b8301601f81018513620042ed57600080fd5b620042fe8582356020840162004266565b9150509250929050565b6000806000604084860312156200431e57600080fd5b8335925060208401356001600160401b038111156200433c57600080fd5b6200434a8682870162004159565b9497909650939450505050565b600080600080604085870312156200436e57600080fd5b84356001600160401b03808211156200438657600080fd5b6200439488838901620040c6565b90965094506020870135915080821115620043ae57600080fd5b50620041e78782880162004159565b60006001600160401b03821115620043d957620043d9620041f3565b5060051b60200190565b60006020808385031215620043f757600080fd5b82356001600160401b038111156200440e57600080fd5b8301601f810185136200442057600080fd5b8035620044316200427782620043bd565b81815260059190911b820183019083810190878311156200445157600080fd5b928401925b82841015620044715783358252928401929084019062004456565b979650505050505050565b600080600080600080606087890312156200449657600080fd5b86356001600160401b0380821115620044ae57600080fd5b620044bc8a838b01620040c6565b90985096506020890135915080821115620044d657600080fd5b620044e48a838b0162004159565b90965094506040890135915080821115620044fe57600080fd5b506200450d89828a01620040c6565b979a9699509497509295939492505050565b6000806000606084860312156200453557600080fd5b505081359360208301359350604090920135919050565b6000806000604084860312156200456257600080fd5b83356001600160401b038111156200457957600080fd5b620045878682870162004159565b909790965060209590950135949350505050565b60005b83811015620045b85781810151838201526020016200459e565b50506000910152565b60008151808452620045db8160208601602086016200459b565b601f01601f19169290920160200192915050565b8581526001600160a01b03858116602083015284811660408301528316606082015260a0608082018190526000906200447190830184620045c1565b6001600160a01b03811681146200464157600080fd5b50565b600080604083850312156200465857600080fd5b8235915060208301356200466c816200462b565b809150509250929050565b60208152600062002e286020830184620045c1565b6000602082840312156200469f57600080fd5b5035919050565b60008060408385031215620046ba57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156200470c5783516001600160a01b031683529284019291840191600101620046e5565b50909695505050505050565b600080600080600060a086880312156200473157600080fd5b853594506020860135935060408601356001600160401b038111156200475657600080fd5b8601601f810188136200476857600080fd5b620047798882356020840162004266565b9598949750949560608101359550608001359392505050565b60008060008060008060a08789031215620047ac57600080fd5b8635620047b9816200462b565b95506020870135620047cb816200462b565b9450604087013593506060870135925060808701356001600160401b03811115620047f557600080fd5b6200450d89828a0162004159565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562002f135762002f1362004829565b8181038181111562002f135762002f1362004829565b808202811582820484141762002f135762002f1362004829565b634e487b7160e01b600052601260045260246000fd5b600082620048ad57620048ad62004885565b500490565b60008351620048c68184602088016200459b565b9190910191825250602001919050565b600060208284031215620048e957600080fd5b815162002e28816200462b565b838152606060208201526000620049116060830185620045c1565b8281036040840152620049258185620045c1565b9695505050505050565b60006001820162004944576200494462004829565b5060010190565b86815285602082015284604082015283606082015260008351620049778160808501602088016200459b565b608092019182019290925260a0019695505050505050565b838152826020820152606060408201526000620049b06060830184620045c1565b95945050505050565b600060018060a01b03808616835260606020840152620049dd6060840186620045c1565b9150808416604084015250949350505050565b6020808252825182820181905260009190848201906040850190845b818110156200470c5783518352928401929184019160010162004a0c565b6001600160401b0381811683821601908082111562004a4d5762004a4d62004829565b5092915050565b81835260006001600160fb1b0383111562004a6e57600080fd5b8260051b80836020870137939093016020019392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600062004ac660408301868862004a54565b82810360208401526200447181858762004a87565b838152604060208201526000620049b060408301848662004a87565b60208152600062004b0d60208301848662004a54565b949350505050565b60006020828403121562004b2857600080fd5b5051919050565b60006020828403121562004b4257600080fd5b8151801515811462002e2857600080fd5b600062004b6462004277846200423c565b905082815283838301111562004b7957600080fd5b62002e288360208301846200459b565b60006020828403121562004b9c57600080fd5b81516001600160401b0381111562004bb357600080fd5b8201601f8101841362004bc557600080fd5b62004b0d8482516020840162004b53565b60208152600062004b0d60208301848662004a87565b6000806040838503121562004c0057600080fd5b8251915060208301516001600160401b0381111562004c1e57600080fd5b8301601f8101851362004c3057600080fd5b620042fe8582516020840162004b53565b60008262004c535762004c5362004885565b500690565b600061010080835262004c6e8184018c620045c1565b9050602060018060a01b03808c16828601528a604086015289606086015280891660808601525083820360a08501528187518084528284019150828160051b850101838a0160005b8381101562004ce857601f1987840301855262004cd5838351620045c1565b9486019492509085019060010162004cb6565b505088151560c0880152945062004cff9350505050565b60ff831660e08301529998505050505050505050565b6000825162004d298184602087016200459b565b9190910192915050565b60c08152600062004d4860c0830189620045c1565b6001600160a01b0397881660208401526040830196909652506060810193909352908416608083015290921660a090920191909152919050565b6000835162004d968184602088016200459b565b83519083019062004dac8183602088016200459b565b01949350505050565b82815260406020820152600062004b0d6040830184620045c1565b87815260e06020820152600062004deb60e0830189620045c1565b6001600160a01b0397881660408401529590961660608201526001600160401b03938416608082015263ffffffff9290921660a083015290911660c0909101529392505050565b85815260a06020820152600062004e4d60a0830187620045c1565b6001600160a01b039590951660408301525063ffffffff9290921660608301526001600160401b031660809091015292915050565b600060ff821660ff810362004e9b5762004e9b62004829565b60010192915050565b60ff818116838216019081111562002f135762002f1362004829565b6000602080838503121562004ed457600080fd5b82516001600160401b0381111562004eeb57600080fd5b8301601f8101851362004efd57600080fd5b805162004f0e6200427782620043bd565b81815260059190911b8201830190838101908783111562004f2e57600080fd5b928401925b828410156200447157835162004f49816200462b565b8252928401929084019062004f33565b600181815b8085111562004f9a57816000190482111562004f7e5762004f7e62004829565b8085161562004f8c57918102915b93841c939080029062004f5e565b509250929050565b60008262004fb35750600162002f13565b8162004fc25750600062002f13565b816001811462004fdb576002811462004fe65762005006565b600191505062002f13565b60ff84111562004ffa5762004ffa62004829565b50506001821b62002f13565b5060208310610133831016604e8410600b84101617156200502b575081810a62002f13565b62005037838362004f59565b80600019048211156200504e576200504e62004829565b029392505050565b600062002e28838362004fa256fe60806040526040516104f33803806104f383398101604081905261002291610120565b600080546001600160a01b0319166001600160a01b038516179055466005146100b65760405163c47f002760e01b81526001600160a01b0382169063c47f0027906100719085906004016101f2565b6020604051808303816000875af1158015610090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b49190610225565b505b50505061023e565b6001600160a01b03811681146100d357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101075781810151838201526020016100ef565b50506000910152565b805161011b816100be565b919050565b60008060006060848603121561013557600080fd5b8351610140816100be565b60208501519093506001600160401b038082111561015d57600080fd5b818601915086601f83011261017157600080fd5b815181811115610183576101836100d6565b604051601f8201601f19908116603f011681019083821181831017156101ab576101ab6100d6565b816040528281528960208487010111156101c457600080fd5b6101d58360208301602088016100ec565b80965050505050506101e960408501610110565b90509250925092565b60208152600082518060208401526102118160408501602087016100ec565b601f01601f19169190910160400192915050565b60006020828403121561023757600080fd5b5051919050565b6102a68061024d6000396000f3fe6080604052600436106100225760003560e01c80630900f010146100b357610061565b3661006157604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b600080546001600160a01b0316632cf35bc960e11b82350161008557808252602082f35b6040513683823782833683855af49150503d82833e806100ae573d6100aa5761050482fd5b3d82fd5b503d81f35b6100c66100c136600461022f565b6100c8565b005b806001600160a01b03166304e80e906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610253565b6001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b03166304e80e906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a89190610253565b6001600160a01b0316146101f55760405162461bcd60e51b815260206004820152601060248201526f206777702067777063206f776e65722160801b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116811461022c57600080fd5b50565b60006020828403121561024157600080fd5b813561024c81610217565b9392505050565b60006020828403121561026557600080fd5b815161024c8161021756fea26469706673582212205775e6c5e9ef753d07c11214b9cc78661edc80f80aa4a5320ece84a06e7b2d1064736f6c63430008130033608060405260405161032e38038061032e83398101604081905261002291610047565b600080546001600160a01b0319166001600160a01b0392909216919091179055610077565b60006020828403121561005957600080fd5b81516001600160a01b038116811461007057600080fd5b9392505050565b6102a8806100866000396000f3fe6080604052600436106100225760003560e01c80630900f010146100b357610061565b3661006157604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b600080546001600160a01b0316632cf35bc960e11b82350161008557808252602082f35b6040513683823782833683855af49150503d82833e806100ae573d6100aa5761040482fd5b3d82fd5b503d81f35b6100c66100c1366004610231565b6100c8565b005b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610255565b6001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a89190610255565b6001600160a01b0316146101f75760405162461bcd60e51b8152602060048201526012602482015271206f776e6572206d6173746572436f70792160701b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116811461022e57600080fd5b50565b60006020828403121561024357600080fd5b813561024e81610219565b9392505050565b60006020828403121561026757600080fd5b815161024e8161021956fea26469706673582212200362ec1e10127fcb1626ac386027d4ab5b2e6aa3ded89dece015d4ae3685de0764736f6c63430008130033202d20696c6c6567616c2f756e6b6e6f776e20696e69746961746f72206f72206f776e65722ea2646970667358221220e032d793cae8095445ac2d47f1919ae2109157c4009178f7a28f5a5805562d2664736f6c63430008130033000000000000000000000000930276f7e709e3bfb66b21ecb969f3dbff90aff30000000000000000000000003298de28e56a490bd78db074e9ede461be54be910000000000000000000000007be4e297ef371edd217369f43e3f82447f2764180000000000000000000000001b8b51f9d13f5956e4778eacd68cac7b13c16d2c0000000000000000000000000b81bf0bcac426d80bc3c83cb628b563706a67a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc9fe3894388ccf70e852eb270bf09d047a8640d

Deployed Bytecode

0x608060405260043610620002375760003560e01c806336aaedbe116200013f57806373a9615c11620000bb578063b5a01c4e1162000079578063b5a01c4e1462000683578063ce2e91cf14620006a5578063deb931a214620005d5578063ee9390df14620006ca578063f23a6e6114620006e15762000282565b806373a9615c14620005b35780637ca7a61c14620005d5578063835c19f3146200060f578063847e10b5146200062a57806394cac45a146200065e5762000282565b80634693d1cd11620001095780634693d1cd146200050857806347c5da98146200052a5780635001f3b5146200054c57806354fd4d50146200056e57806356f9ca5b14620005915762000282565b806336aaedbe14620004925780633ccfd60b14620004b75780633f15457f14620004cf5780634651a1ef14620004f15762000282565b80619aae11620001c7578063179ff2011162000197578063179ff20114620003fe5780631e0c8b8d146200041557806327a58be7146200043f5780632cef86d414620004545780632d551432146200046b5762000282565b80619aae146200037a578061c7bf1462000391578061efba14620003a85780630ab8afac14620003bf5762000282565b80614c3411620002095780614c3414620003075780617853146200031e5780617e761462000335578061852b146200034c5780618c7c14620003635762000282565b806117bb14620002ab5780613a2f14620002c25780613fe614620002d9578061481414620002f05762000282565b366200028257346000036200024857005b604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b620002a9600060405180604001604052806002815260200161333160f11b8152506200072c565b005b620002a9620002bc36600462004114565b6200075c565b620002a9620002d33660046200419d565b6200082a565b620002a9620002ea366004620042a9565b620009bb565b620002a962000301366004620042a9565b62000a1e565b620002a96200031836600462004308565b62000a79565b620002a96200032f36600462004308565b62000a91565b620002a96200034636600462004357565b62000b60565b620002a96200035d366004620043e3565b62000cc3565b620002a9620003743660046200447c565b620017da565b620002a96200038b366004620042a9565b62001a46565b620002a9620003a2366004620042a9565b62001aa1565b620002a9620003b9366004620042a9565b62001b77565b348015620003cc57600080fd5b50600754620003e1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620002a96200040f3660046200451f565b62001bfd565b6200042c620004263660046200454c565b62001ec1565b604051620003f5959493929190620045ef565b3480156200044c57600080fd5b5030620003e1565b620002a96200046536600462004644565b620029a1565b3480156200047857600080fd5b506200048362002b8c565b604051620003f5919062004677565b3480156200049f57600080fd5b50620003e1620004b13660046200468c565b62002c89565b348015620004c457600080fd5b50620002a962002cd2565b348015620004dc57600080fd5b50600354620003e1906001600160a01b031681565b620002a962000502366004620046a6565b62002d38565b3480156200051557600080fd5b50600554620003e1906001600160a01b031681565b3480156200053757600080fd5b50600654620003e1906001600160a01b031681565b3480156200055957600080fd5b50600254620003e1906001600160a01b031681565b3480156200057b57600080fd5b50630131545e5b604051908152602001620003f5565b3480156200059e57600080fd5b50600454620003e1906001600160a01b031681565b348015620005c057600080fd5b50600054620003e1906001600160a01b031681565b348015620005e257600080fd5b50620003e1620005f43660046200468c565b6000908152600960205260409020546001600160a01b031690565b6200061962002dca565b6040519015158152602001620003f5565b3480156200063757600080fd5b506200064f620006493660046200468c565b62002e0b565b604051620003f59190620046c9565b3480156200066b57600080fd5b50620005826200067d3660046200468c565b62002e2f565b3480156200069057600080fd5b50600154620003e1906001600160a01b031681565b348015620006b257600080fd5b5062000619620006c436600462004644565b62002e74565b620002a9620006db36600462004718565b62002f19565b348015620006ee57600080fd5b50620007126200070036600462004792565b63f23a6e6160e01b9695505050505050565b6040516001600160e01b03199091168152602001620003f5565b8082620007575760405162461bcd60e51b81526004016200074e919062004677565b60405180910390fd5b505050565b600060808383600281811062000776576200077662004803565b9050602002013560001c901c905060006001600160801b0384846002818110620007a457620007a462004803565b9050602002013560001c1690506000620007da85856003818110620007cd57620007cd62004803565b90506020020135620032ad565b90506200082385856000818110620007f657620007f662004803565b905060200201358383868989600181811062000816576200081662004803565b9050602002013562002f19565b5050505050565b60008073dadadadadadadadadadadadadadadadadadadada6001600160a01b0316600085856040516200085f92919062004819565b60006040518083038185875af1925050503d80600081146200089e576040519150601f19603f3d011682016040523d82523d6000602084013e620008a3565b606091505b509092509050620008f28315801590620008ba5750825b8015620008c657508151155b8015620008d257508515155b604051806040016040528060018152602001604f60f81b8152506200072c565b6040518681527f3e511999388f0c3a67f72ff8badf470ca0059009c4c98c62ebb899f43d410ded9060200160405180910390a1600154604051631e29f97960e31b8152600481018790526001600160a01b039091169063f14fcbc890602401600060405180830381600087803b1580156200096c57600080fd5b505af115801562000981573d6000803e3d6000fd5b50620009a192503391505060a087901b6001600160a01b0319166200483f565b600096875260096020526040909620959095555050505050565b6000620009c883620032be565b905060008060008451602086016000865af103620009e557600080fd5b6040518381527fe3902a1098e480d8c716fe6a4c40a712754776fb7dc5d11afc1b46f30cd2c1dd906020015b60405180910390a1505050565b600062000a2b83620032be565b905060008060008451602086016000865af10362000a4857600080fd5b6040518381527f097e9cbd79dd42ce23267a0e236cf731271447403ec2b0aae8e3f840e4c56a059060200162000a11565b62000a8483620033d3565b620007578383836200348b565b60008381526009602052604090205462000b026001600160a01b03821633148062000abb57503330145b801562000ae257506001600160401b0360a083901c16600090815260086020526040902054155b604051806040016040528060018152602001601360fa1b8152506200072c565b60a081901c6001600160401b03811660009081526008602052604090205462000b3a90600160a01b906001600160a01b03166200483f565b6001600160401b038216600090815260086020526040902055620008238585856200348b565b60008484600081811062000b785762000b7862004803565b905060200201359050600060808686600281811062000b9b5762000b9b62004803565b9050602002013560001c901c905060006001600160801b038787600281811062000bc95762000bc962004803565b9050602002013560001c169050600062000bf288886003818110620007cd57620007cd62004803565b905062000c12848383868c8c600181811062000816576200081662004803565b6001600160401b0360a085901c166000908152600860209081526040918290205482518084019093526002835261723360f01b9183019190915262000c5a919015906200072c565b60a084901c6001600160401b03811660009081526008602052604090205462000c9290600160a01b906001600160a01b03166200483f565b6001600160401b03821660009081526008602052604090205562000cb88588886200348b565b505050505050505050565b60008160008151811062000cdb5762000cdb62004803565b6020026020010151905060006005835162000cf7919062004855565b9050600067ffffffffffff000062000d12426103e86200486b565b169050600062000d246005846200489b565b62000d319060036200483f565b62000d3d90346200489b565b60008581526009602052604090205490915062000df36001600160a01b03821633148062000d6a57503330145b801562000d785750600a8510155b801562000d86575060a08511155b801562000dc6575060006001600160a01b03168760018151811062000daf5762000daf62004803565b602002602001015160001c6001600160a01b031614155b801562000dd35750600034115b604051806040016040528060018152602001607760f81b8152506200072c565b600062000e026005866200489b565b6001600160401b0381111562000e1c5762000e1c620041f3565b60405190808252806020026020018201604052801562000e46578160200160208202803683370190505b509050600062000e586005876200489b565b62000e659060026200483f565b6001600160401b0381111562000e7f5762000e7f620041f3565b60405190808252806020026020018201604052801562000ea9578160200160208202803683370190505b50905060606000806005815b6001600160a01b038d62000ecb8460026200483f565b8151811062000ede5762000ede62004803565b602002602001015160001c1693508c82600162000efc91906200483f565b8151811062000f0f5762000f0f62004803565b6020026020010151925062000f8d60006001600160a01b0316856001600160a01b03161415801562000f6057508d838151811062000f515762000f5162004803565b60200260200101516000801b14155b801562000f6c57508315155b604051806040016040528060028152602001611d8d60f21b8152506200072c565b8387828151811062000fa35762000fa362004803565b6001600160a01b03909216602092830291909101909101528c62000fc98360026200483f565b8151811062000fdc5762000fdc62004803565b602002602001015160001c86828151811062000ffc5762000ffc62004803565b6020908102919091010152848d620010168460036200483f565b8151811062001029576200102962004803565b602002602001015160405160200162001044929190620048b2565b60408051601f198184030181529082905295506200109f906001600160a01b038616908b156108fc02908c906000818181858888f1935050505060405180604001604052806002815260200161763560f01b8152506200072c565b604080516001600160a01b0386168152602081018b90527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a16006546001600160a01b03166200122257600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001146573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116c9190620048d6565b6001600160a01b0316635ef2c7f08d8f858151811062001190576200119062004803565b60209081029190910101516000546040516001600160e01b031960e086901b168152600481019390935260248301919091523060448301526001600160a01b031660648201526001600160401b038d16608482015260a401600060405180830381600087803b1580156200120357600080fd5b505af115801562001218573d6000803e3d6000fd5b505050506200124d565b6200124d8c8e84815181106200123c576200123c62004803565b60200260200101513060006200354e565b6000620012848e620012618560046200483f565b8151811062001274576200127462004803565b6020026020010151602062003661565b600054604080518082018252600681526530bb30ba30b960d11b6020820152905163043c4ea360e21b81529293506001600160a01b03909116916310f13a8c91620012d7918891908690600401620048f6565b600060405180830381600087803b158015620012f257600080fd5b505af115801562001307573d6000803e3d6000fd5b50505050506200133683858f858151811062001327576200132762004803565b60200260200101518f62003722565b8062001342816200492f565b91506200135390508260056200483f565b91508a6200136360058462004855565b10801562001372575060a08211155b62000eb5575060809250829150819050600562001390818c6200489b565b6200139d9060016200483f565b901b60001b848d600281518110620013b957620013b962004803565b6020026020010151604051602001620013d8969594939291906200494b565b60408051601f1981840301815290829052600054630623195b60e41b83529092506001600160a01b03169063623195b0906200141e908b9060809086906004016200498f565b600060405180830381600087803b1580156200143957600080fd5b505af11580156200144e573d6000803e3d6000fd5b505050506000896004815181106200146a576200146a62004803565b602002602001015160001c620014a78b6003815181106200148f576200148f62004803565b6020026020010151620014a162002b8c565b62003a65565b6004546040516001600160a01b0390911690620014c490620040aa565b620014d293929190620049b9565b604051809103906000f080158015620014ef573d6000803e3d6000fd5b509050806001600160a01b031661efe487866040518363ffffffff1660e01b81526004016200151f9190620046c9565b6000604051808303818588803b1580156200153957600080fd5b505af11580156200154e573d6000803e3d6000fd5b50505050506200156489826000801b8c62003722565b620015836001600160a01b031986166001600160a01b0383166200483f565b60008a81526009602090815260409182902092909255516001600160a01b03831681527f2838c32a89b339c02434475b29ec5c70e152ec9162c07692af7e891edfe0b6c8910160405180910390a160008a600181518110620015e957620015e962004803565b602002602001015160001c6040516200160290620040b8565b6001600160a01b039091168152602001604051809103906000f0801580156200162f573d6000803e3d6000fd5b5090508a60038151811062001648576200164862004803565b602002602001015160001c8460058b6200166391906200489b565b620016709060006200483f565b8151811062001683576200168362004803565b60209081029190910101526001600160a01b03821684620016a660058c6200489b565b620016b39060016200483f565b81518110620016c657620016c662004803565b602090810291909101015260405163177972f960e21b81526001600160a01b03821690635de5cbe490899062001701908890600401620049f0565b6000604051808303818588803b1580156200171b57600080fd5b505af115801562001730573d6000803e3d6000fd5b50505050506001600160a01b031960a08960016200174f919062004a2a565b6001600160401b0316901b16816001600160a01b03166200177191906200483f565b60a087901c6001600160401b031660009081526008602090815260409182902092909255516001600160a01b03831681527f0425e82c117c5472b3e53ef839e6937ab94800a3caaec9093426c1f906633823910160405180910390a15050505050505050505050565b60006004869003620018fa576001600160801b038787600281811062001804576200180462004803565b9050602002013560001c1690506200189c600034118015620018265750600082115b80156200183257508134115b80156200187c5750336001600160a01b03600960008b8b82816200185a576200185a62004803565b90506020020135815260200190815260200160002054166001600160a01b0316145b604051806040016040528060018152602001604760f81b8152506200072c565b604051613f3b60e11b81523090617e76908390620018c5908b908b908b908b9060040162004ab0565b6000604051808303818588803b158015620018df57600080fd5b505af1158015620018f4573d6000803e3d6000fd5b50505050505b6001869003620019c9576200192c60003411604051806040016040528060018152602001600960fb1b8152506200072c565b620019538383600081811062001946576200194662004803565b90506020020135620033d3565b3061785384846000816200196b576200196b62004803565b9050602002013587876040518463ffffffff1660e01b8152600401620019949392919062004adb565b600060405180830381600087803b158015620019af57600080fd5b505af1158015620019c4573d6000803e3d6000fd5b505050505b620019d66019346200489b565b90503061852b620019e8833462004855565b85856040518463ffffffff1660e01b815260040162001a0992919062004af7565b6000604051808303818588803b15801562001a2357600080fd5b505af115801562001a38573d6000803e3d6000fd5b505050505050505050505050565b600062001a5383620032be565b905060008060008451602086016000865af10362001a7057600080fd5b6040518381527f5942e033d058d46e4269ccd9ab9a1a97ec2b2a95c5137a504fe4e1a67b4b6ae19060200162000a11565b600062001aae83620032be565b905060008060008451602086016000865af10362001acb57600080fd5b6001600160a01b0362001aed62001ae6846024602062003be1565b6020015190565b60001c166001600160a01b03166001600160a01b0362001b1562001ae6856004602062003be1565b166001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef606462001b5562001ae6876044602062003be1565b62001b6191906200489b565b60405190815260200160405180910390a3505050565b600062001b8483620032be565b905060008060008451602086016000865af10362001ba157600080fd5b6001600160a01b0362001bbc62001ae6846004602062003be1565b166001600160a01b0316307fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef606462001b5562001ae6876024602062003be1565b62001d0b336001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c66919062004b15565b630131545e11801562001ceb5750336001600160a01b0316634693d1cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001cb3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cd99190620048d6565b6005546001600160a01b039081169116145b604051806040016040528060018152602001606960f81b8152506200072c565b604051631f29e98760e21b8152600481018490526000903390637ca7a61c90602401602060405180830381865afa15801562001d4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d719190620048d6565b604051631b5576df60e11b81526004810186905290915060009033906336aaedbe90602401602060405180830381865afa15801562001db4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dda9190620048d6565b6001600160401b0360a086901c1660009081526008602052604090205490915062001e6a9015801562001e1857506001600160a01b03858116908416145b801562001e3057506001600160a01b03828116908516145b801562001e495750600086815260096020526040902054155b60405180604001604052806002815260200161693560f01b8152506200072c565b6001600160401b0360a085901c16600090815260086020526040902083905562001ea86001600160a01b031985166001600160a01b0384166200483f565b6000958652600960205260409095209490945550505050565b6000806000806060600080602090506060600062001f158c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003c8692505050565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f6d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f939190620048d6565b6001600160a01b03166302571be3836040518263ffffffff1660e01b815260040162001fc191815260200190565b602060405180830381865afa15801562001fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020059190620048d6565b9050600080620020248460009081526009602052604090205460a01c90565b6001600160401b03161190506200203b8362002e2f565b6001169a50600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002094573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020ba9190620048d6565b6001600160a01b031663f79fe538846040518263ffffffff1660e01b8152600401620020e891815260200190565b602060405180830381865afa15801562002106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200212c919062004b2f565b62002141576200213e8b60026200483f565b9a505b6000838152600960205260409020546001600160a01b03838116911614806200217257506001600160a01b03821630145b156200218857620021858b60046200483f565b9a505b60005460025460408051633f15457f60e01b815290516001600160a01b039384169390921691633f15457f916004808201926020929091908290030181865afa158015620021da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022009190620048d6565b6001600160a01b0316630178b8bf856040518263ffffffff1660e01b81526004016200222e91815260200190565b602060405180830381865afa1580156200224c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022729190620048d6565b6001600160a01b03160362002291576200228e8b60086200483f565b9a505b8015620022a857620022a58b60106200483f565b9a505b600054604051631d9dabef60e11b81526004810185905230916001600160a01b031690633b3b57de90602401602060405180830381865afa158015620022f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023189190620048d6565b6001600160a01b0316036200233757620023348b60406200483f565b9a505b6006546001600160a01b031615801562002403575060005460408051631674750f60e21b8152600481018690526024810191909152600f60448201526e7573655f636f6c6f725f7461626c6560881b6064820152620023ec916001600160a01b0316906359d1d43c906084015b600060405180830381865afa158015620023c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ae6919081019062004b89565b6f0f7573655f636f6c6f725f7461626c6560681b14155b80620024c857506006546001600160a01b031615158015620024c857506000805460408051631674750f60e21b8152600481018790526024810191909152600f60448201526e7573655f636f6c6f725f7461626c6560881b6064820152620024c6916001600160a01b0316906359d1d43c90608401600060405180830381865afa15801562002496573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620024c0919081019062004b89565b62003d37565b115b15620024df57620024dc8b6108006200483f565b9a505b6000620024ec8462002c89565b6001600160a01b0316146200250c57620025098b6110006200483f565b9a505b6001600160a01b0382166200252c57620025298b6101006200483f565b9a505b600160009054906101000a90046001600160a01b03166001600160a01b031663aeb8ce9b8f8f6040518363ffffffff1660e01b81526004016200257192919062004bd6565b602060405180830381865afa1580156200258f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025b5919062004b2f565b15620025cc57620025c98b6102006200483f565b9a505b326001600160a01b03831603620025ee57620025eb8b6104006200483f565b9a505b6006546001600160a01b031615158015620026935750600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200267e9190620048d6565b6001600160a01b0316826001600160a01b0316145b15620026aa57620026a78b6120046200483f565b9a505b8015620028e557600054604051631101d5ab60e11b815260048101859052608060248201526001600160a01b0390911690632203ab5690604401600060405180830381865afa15801562002702573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200272c919081019062004bec565b909550935060808514801562002744575060e0845110155b80156200275e5750602084516200275c919062004c41565b155b156200277457620027718b60806200483f565b9a505b600054604051631101d5ab60e11b815260048101859052602060248201526001600160a01b0390911690632203ab5690604401600060405180830381865afa158015620027c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620027ef919081019062004bec565b909550935060208514801562002806575060208451115b80156200281557506110008451105b156200282b57620028288b60206200483f565b9a505b600083815260096020526040902054620028459062003e53565b5160005460408051631674750f60e21b8152600481018790526024810191909152600d60448201526c07573655f74696d655374616d7609c1b6064820152919650620028a6916001600160a01b03909116906359d1d43c90608401620023a4565b9550620028bd6006546001600160a01b0316151590565b158015620028da5750856cd7573655f74696d655374616d7607c1b145b15620028e557600095505b620028f08362002e2f565b604086901b6200290560808e901b896200483f565b6200291191906200483f565b6200291d91906200483f565b9a508b60000362002966576000838152600960205260409020548b906001600160a01b03165b6200294e8562002c89565b30879a509a509a509a509a5050505050505062002996565b8b6001036200298f5760008381526009602052604090205486906001600160a01b031662002943565b5050505050505b939792965093509350565b60008281526009602052604090205462002ad36001600160a01b0382163314801562002a345750826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a2d919062004b15565b630131545e105b801562002ab35750826001600160a01b0316634693d1cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002aa19190620048d6565b6005546001600160a01b039081169116145b604051806040016040528060018152602001607560f81b8152506200072c565b816001600160a01b031663179ff20184836008600062002b028960009081526009602052604090205460a01c90565b6001600160401b03166001600160401b03168152602001908152602001600020546040518463ffffffff1660e01b815260040162002b53939291909283526020830191909152604082015260600190565b600060405180830381600087803b15801562002b6e57600080fd5b505af115801562002b83573d6000803e3d6000fd5b50505050505050565b60604661050481900362002bbb5750506040805180820190915260058152641733b636b960d91b602082015290565b8060890362002be65750506040805180820190915260068152652e6d6174696360d01b602082015290565b8062aa36a70362002c1457505060408051808201909152600781526605ce6cae0cae8d60cb1b602082015290565b8060640362002c405750506040805180820190915260078152662e676e6f73697360c81b602082015290565b8060380362002c695750506040805180820190915260048152632e62736360e01b602082015290565b505060408051808201909152600481526305ccae8d60e31b602082015290565b60006001600160a01b036008600062002cb18560009081526009602052604090205460a01c90565b6001600160401b031681526020810191909152604001600020541692915050565b60055462002d36906001600160a01b03163314801562002d165750336108fc62002cfe60014762004855565b6040518115909202916000818181858888f193505050505b604051806040016040528060018152602001605760f81b8152506200072c565b565b600154604051631e29f97960e31b8152600481018390526001600160a01b039091169063f14fcbc890602401600060405180830381600087803b15801562002d7f57600080fd5b505af115801562002d94573d6000803e3d6000fd5b5062002db492503391505060a083901b6001600160a01b0319166200483f565b6000928352600960205260409092209190915550565b604080513381523460208201526000917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a150600190565b60008181526009602052604090205460609062002e288162003e53565b9392505050565b6000806008600062002e508560009081526009602052604090205460a01c90565b6001600160401b0316815260208101919091526040016000205460a01c9392505050565b6000828152600960205260408120546001600160a01b03811633810362002ea15760009250505062002f13565b604051632b0891e960e01b81526001600160a01b038581166004830152821690632b0891e990602401602060405180830381865afa15801562002ee8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f0e919062004b2f565b925050505b92915050565b6000858152600960205260409020546001600160a01b031662002ff93382148062002f4357503330145b801562002fc1575060015460405163aeb8ce9b60e01b81526001600160a01b039091169063aeb8ce9b9062002f7d90889060040162004677565b602060405180830381865afa15801562002f9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002fc1919062004b2f565b801562002fcd57508215155b801562002fd957508315155b604051806040016040528060018152602001605960f81b8152506200072c565b6006546001600160a01b0316156200319d57604080516001808252818301909252600091816020015b60608152602001906001900390816200302257905050604051638b95dd7160e01b602082015260248101899052603c60448201526060606482018190526014608483015230901b60a482015290915060c4016040516020818303038152906040528160008151811062003099576200309962004803565b602090810291909101015260015460008054604051919283926001600160a01b03918216928b92620030e0928c9230928d928d92909116908b908a90819060240162004c58565b60408051601f198184030181529181526020820180516001600160e01b03166374694a2b60e01b1790525162003117919062004d15565b60006040518083038185875af1925050503d806000811462003156576040519150601f19603f3d011682016040523d82523d6000602084013e6200315b565b606091505b5091509150620031788280156200317157508151155b826200072c565b336001600160a01b038516036200319457620031948462003ed9565b50505062003213565b60015460005460405163f7a1696360e01b81526001600160a01b039283169263f7a16963928992620031de928a9230928b928b921690849060040162004d33565b6000604051808303818588803b158015620031f857600080fd5b505af11580156200320d573d6000803e3d6000fd5b50505050505b6000546001600160a01b0316637737221387866200323062002b8c565b6040516020016200324392919062004d82565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016200327192919062004db5565b600060405180830381600087803b1580156200328c57600080fd5b505af1158015620032a1573d6000803e3d6000fd5b50505050505050505050565b606062002f138260ff811662003661565b600081815260096020526040812054336001600160a01b03821603620033085760a01c6001600160401b03166000908152600860205260409020546001600160a01b031692915050565b6000620033158262003e53565b8051909150602060005b336001600160a01b03168482815181106200333e576200333e62004803565b60200260200101516001600160a01b03160362003359578091505b8062003365816200492f565b9150508281108015620033785750816020145b6200331f57620033a56020831060405180606001604052806026815260200162005886602691396200072c565b5050505060a01c6001600160401b03166000908152600860205260409020546001600160a01b031692915050565b600081815260096020526040902054336001600160a01b03821603620033f7575050565b6000620034048262003e53565b805190915060005b336001600160a01b03168382815181106200342b576200342b62004803565b60200260200101516001600160a01b03160362003449575050505050565b8062003455816200492f565b9150508181106200340c576200082360006040518060400160405280600681526020016537bbb732b91960d11b8152506200072c565b6000546040516001600160a01b039091169063623195b0908590602090620034b99087908790840162004819565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401620034e8939291906200498f565b600060405180830381600087803b1580156200350357600080fd5b505af115801562003518573d6000803e3d6000fd5b505050507f3e511999388f0c3a67f72ff8badf470ca0059009c4c98c62ebb899f43d410ded8360405162000a1191815260200190565b600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620035a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035c89190620048d6565b6001600160a01b03166324c1af4485620035e286620032ad565b600080546040516001600160e01b031960e087901b1681526200361b94939289926001600160a01b031691899190819060040162004dd0565b6020604051808303816000875af11580156200363b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000823919062004b15565b60606000826001600160401b03811115620036805762003680620041f3565b6040519080825280601f01601f191660200182016040528015620036ab576020820181803683370190505b50905060005b848160208110620036c657620036c662004803565b1a60f81b828281518110620036df57620036df62004803565b60200101906001600160f81b031916908160001a9053508062003702816200492f565b9150508381108015620037155750602081105b620036b157509392505050565b60005460405162d5fa2b60e81b8152600481018690526001600160a01b0385811660248301529091169063d5fa2b0090604401600060405180830381600087803b1580156200377057600080fd5b505af115801562003785573d6000803e3d6000fd5b50505050816000801b036200384f57600054604080518082018252600681526530bb30ba30b960d11b602080830191909152825180840184528181527f68747470733a2f2f7777772e756e67726176656c2e636f6d2f756e672e706e6791810191909152915163043c4ea360e21b81526001600160a01b03909316926310f13a8c926200381a928692909190600401620048f6565b600060405180830381600087803b1580156200383557600080fd5b505af11580156200384a573d6000803e3d6000fd5b505050505b6006546001600160a01b03166200394657600260009054906101000a90046001600160a01b03166001600160a01b0316633f15457f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620038b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038da9190620048d6565b604051635b0fc9c360e01b8152600481018690526001600160a01b0385811660248301529190911690635b0fc9c390604401600060405180830381600087803b1580156200392757600080fd5b505af11580156200393c573d6000803e3d6000fd5b5050505062003a5f565b811562003a5457600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620039a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039c79190620048d6565b6001600160a01b031663c658e08682620039e185620032ad565b866000806040518663ffffffff1660e01b815260040162003a0795949392919062004e32565b6020604051808303816000875af115801562003a27573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a4d919062004b15565b5062003a5f565b62003a5f8362003ed9565b50505050565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b858260ff166020811062003aa65762003aa662004803565b1a60f81b6001600160f81b0319161562003b0b57858260ff166020811062003ad25762003ad262004803565b1a60f81b838360ff168151811062003aee5762003aee62004803565b60200101906001600160f81b031916908160001a90535062003b0e565b50805b8162003b1a8162004e82565b92505060ff811615801562003b32575060208260ff16105b62003a8e5760009150600062003b488662003d37565b90505b858360ff168151811062003b635762003b6362004803565b01602001516001600160f81b0319168462003b7f858562004ea4565b60ff168151811062003b955762003b9562004803565b60200101906001600160f81b031916908160001a9053508262003bb88162004e82565b935050808360ff1610801562003bd1575060208360ff16105b62003b4b57509195945050505050565b606062003c198451838562003bf791906200483f565b1115604051806040016040528060018152602001607360f81b8152506200072c565b6000826001600160401b0381111562003c365762003c36620041f3565b6040519080825280601f01601f19166020018201604052801562003c61576020820181803683370190505b5090506020808201908686010162003c7b8282876200401d565b509095945050505050565b60025460408051630ddf7fcb60e41b815290516000926001600160a01b03169163ddf7fcb09160048083019260209291908290030181865afa15801562003cd1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cf7919062004b15565b828051906020012060405160200162003d1a929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b8051600090819081905b8082101562003e4a57600085838151811062003d615762003d6162004803565b01602001516001600160f81b0319169050600160ff1b81101562003d945762003d8c6001846200483f565b925062003e34565b600760fd1b6001600160f81b03198216101562003db85762003d8c6002846200483f565b600f60fc1b6001600160f81b03198216101562003ddc5762003d8c6003846200483f565b601f60fb1b6001600160f81b03198216101562003e005762003d8c6004846200483f565b603f60fa1b6001600160f81b03198216101562003e245762003d8c6005846200483f565b62003e316006846200483f565b92505b508262003e41816200492f565b93505062003d41565b50909392505050565b60606001600160a01b03821632811462003ed057806001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562003ea6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002e28919081019062004ec0565b50606092915050565b600160009054906101000a90046001600160a01b03166001600160a01b031663a8e5fbc06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003f2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f539190620048d6565b60405163a22cb46560e01b81526001600160a01b03838116600483015260016024830152919091169063a22cb46590604401600060405180830381600087803b15801562003fa057600080fd5b505af115801562003fb5573d6000803e3d6000fd5b505060005460405163a22cb46560e01b81526001600160a01b03858116600483015260016024830152909116925063a22cb4659150604401600060405180830381600087803b1580156200400857600080fd5b505af115801562000823573d6000803e3d6000fd5b602081106200405d5781518352620040376020846200483f565b9250620040466020836200483f565b91506200405560208262004855565b90506200401d565b806000036200406b57505050565b600060016200407c83602062004855565b6200408a9061010062005056565b62004096919062004855565b925184518416931916929092179092525050565b6104f3806200506583390190565b61032e806200555883390190565b60008083601f840112620040d957600080fd5b5081356001600160401b03811115620040f157600080fd5b6020830191508360208260051b85010111156200410d57600080fd5b9250929050565b600080602083850312156200412857600080fd5b82356001600160401b038111156200413f57600080fd5b6200414d85828601620040c6565b90969095509350505050565b60008083601f8401126200416c57600080fd5b5081356001600160401b038111156200418457600080fd5b6020830191508360208285010111156200410d57600080fd5b60008060008060608587031215620041b457600080fd5b843593506020850135925060408501356001600160401b03811115620041d957600080fd5b620041e78782880162004159565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620042345762004234620041f3565b604052919050565b60006001600160401b03821115620042585762004258620041f3565b50601f01601f191660200190565b60006200427d62004277846200423c565b62004209565b90508281528383830111156200429257600080fd5b828260208301376000602084830101529392505050565b60008060408385031215620042bd57600080fd5b8235915060208301356001600160401b03811115620042db57600080fd5b8301601f81018513620042ed57600080fd5b620042fe8582356020840162004266565b9150509250929050565b6000806000604084860312156200431e57600080fd5b8335925060208401356001600160401b038111156200433c57600080fd5b6200434a8682870162004159565b9497909650939450505050565b600080600080604085870312156200436e57600080fd5b84356001600160401b03808211156200438657600080fd5b6200439488838901620040c6565b90965094506020870135915080821115620043ae57600080fd5b50620041e78782880162004159565b60006001600160401b03821115620043d957620043d9620041f3565b5060051b60200190565b60006020808385031215620043f757600080fd5b82356001600160401b038111156200440e57600080fd5b8301601f810185136200442057600080fd5b8035620044316200427782620043bd565b81815260059190911b820183019083810190878311156200445157600080fd5b928401925b82841015620044715783358252928401929084019062004456565b979650505050505050565b600080600080600080606087890312156200449657600080fd5b86356001600160401b0380821115620044ae57600080fd5b620044bc8a838b01620040c6565b90985096506020890135915080821115620044d657600080fd5b620044e48a838b0162004159565b90965094506040890135915080821115620044fe57600080fd5b506200450d89828a01620040c6565b979a9699509497509295939492505050565b6000806000606084860312156200453557600080fd5b505081359360208301359350604090920135919050565b6000806000604084860312156200456257600080fd5b83356001600160401b038111156200457957600080fd5b620045878682870162004159565b909790965060209590950135949350505050565b60005b83811015620045b85781810151838201526020016200459e565b50506000910152565b60008151808452620045db8160208601602086016200459b565b601f01601f19169290920160200192915050565b8581526001600160a01b03858116602083015284811660408301528316606082015260a0608082018190526000906200447190830184620045c1565b6001600160a01b03811681146200464157600080fd5b50565b600080604083850312156200465857600080fd5b8235915060208301356200466c816200462b565b809150509250929050565b60208152600062002e286020830184620045c1565b6000602082840312156200469f57600080fd5b5035919050565b60008060408385031215620046ba57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156200470c5783516001600160a01b031683529284019291840191600101620046e5565b50909695505050505050565b600080600080600060a086880312156200473157600080fd5b853594506020860135935060408601356001600160401b038111156200475657600080fd5b8601601f810188136200476857600080fd5b620047798882356020840162004266565b9598949750949560608101359550608001359392505050565b60008060008060008060a08789031215620047ac57600080fd5b8635620047b9816200462b565b95506020870135620047cb816200462b565b9450604087013593506060870135925060808701356001600160401b03811115620047f557600080fd5b6200450d89828a0162004159565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562002f135762002f1362004829565b8181038181111562002f135762002f1362004829565b808202811582820484141762002f135762002f1362004829565b634e487b7160e01b600052601260045260246000fd5b600082620048ad57620048ad62004885565b500490565b60008351620048c68184602088016200459b565b9190910191825250602001919050565b600060208284031215620048e957600080fd5b815162002e28816200462b565b838152606060208201526000620049116060830185620045c1565b8281036040840152620049258185620045c1565b9695505050505050565b60006001820162004944576200494462004829565b5060010190565b86815285602082015284604082015283606082015260008351620049778160808501602088016200459b565b608092019182019290925260a0019695505050505050565b838152826020820152606060408201526000620049b06060830184620045c1565b95945050505050565b600060018060a01b03808616835260606020840152620049dd6060840186620045c1565b9150808416604084015250949350505050565b6020808252825182820181905260009190848201906040850190845b818110156200470c5783518352928401929184019160010162004a0c565b6001600160401b0381811683821601908082111562004a4d5762004a4d62004829565b5092915050565b81835260006001600160fb1b0383111562004a6e57600080fd5b8260051b80836020870137939093016020019392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600062004ac660408301868862004a54565b82810360208401526200447181858762004a87565b838152604060208201526000620049b060408301848662004a87565b60208152600062004b0d60208301848662004a54565b949350505050565b60006020828403121562004b2857600080fd5b5051919050565b60006020828403121562004b4257600080fd5b8151801515811462002e2857600080fd5b600062004b6462004277846200423c565b905082815283838301111562004b7957600080fd5b62002e288360208301846200459b565b60006020828403121562004b9c57600080fd5b81516001600160401b0381111562004bb357600080fd5b8201601f8101841362004bc557600080fd5b62004b0d8482516020840162004b53565b60208152600062004b0d60208301848662004a87565b6000806040838503121562004c0057600080fd5b8251915060208301516001600160401b0381111562004c1e57600080fd5b8301601f8101851362004c3057600080fd5b620042fe8582516020840162004b53565b60008262004c535762004c5362004885565b500690565b600061010080835262004c6e8184018c620045c1565b9050602060018060a01b03808c16828601528a604086015289606086015280891660808601525083820360a08501528187518084528284019150828160051b850101838a0160005b8381101562004ce857601f1987840301855262004cd5838351620045c1565b9486019492509085019060010162004cb6565b505088151560c0880152945062004cff9350505050565b60ff831660e08301529998505050505050505050565b6000825162004d298184602087016200459b565b9190910192915050565b60c08152600062004d4860c0830189620045c1565b6001600160a01b0397881660208401526040830196909652506060810193909352908416608083015290921660a090920191909152919050565b6000835162004d968184602088016200459b565b83519083019062004dac8183602088016200459b565b01949350505050565b82815260406020820152600062004b0d6040830184620045c1565b87815260e06020820152600062004deb60e0830189620045c1565b6001600160a01b0397881660408401529590961660608201526001600160401b03938416608082015263ffffffff9290921660a083015290911660c0909101529392505050565b85815260a06020820152600062004e4d60a0830187620045c1565b6001600160a01b039590951660408301525063ffffffff9290921660608301526001600160401b031660809091015292915050565b600060ff821660ff810362004e9b5762004e9b62004829565b60010192915050565b60ff818116838216019081111562002f135762002f1362004829565b6000602080838503121562004ed457600080fd5b82516001600160401b0381111562004eeb57600080fd5b8301601f8101851362004efd57600080fd5b805162004f0e6200427782620043bd565b81815260059190911b8201830190838101908783111562004f2e57600080fd5b928401925b828410156200447157835162004f49816200462b565b8252928401929084019062004f33565b600181815b8085111562004f9a57816000190482111562004f7e5762004f7e62004829565b8085161562004f8c57918102915b93841c939080029062004f5e565b509250929050565b60008262004fb35750600162002f13565b8162004fc25750600062002f13565b816001811462004fdb576002811462004fe65762005006565b600191505062002f13565b60ff84111562004ffa5762004ffa62004829565b50506001821b62002f13565b5060208310610133831016604e8410600b84101617156200502b575081810a62002f13565b62005037838362004f59565b80600019048211156200504e576200504e62004829565b029392505050565b600062002e28838362004fa256fe60806040526040516104f33803806104f383398101604081905261002291610120565b600080546001600160a01b0319166001600160a01b038516179055466005146100b65760405163c47f002760e01b81526001600160a01b0382169063c47f0027906100719085906004016101f2565b6020604051808303816000875af1158015610090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b49190610225565b505b50505061023e565b6001600160a01b03811681146100d357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101075781810151838201526020016100ef565b50506000910152565b805161011b816100be565b919050565b60008060006060848603121561013557600080fd5b8351610140816100be565b60208501519093506001600160401b038082111561015d57600080fd5b818601915086601f83011261017157600080fd5b815181811115610183576101836100d6565b604051601f8201601f19908116603f011681019083821181831017156101ab576101ab6100d6565b816040528281528960208487010111156101c457600080fd5b6101d58360208301602088016100ec565b80965050505050506101e960408501610110565b90509250925092565b60208152600082518060208401526102118160408501602087016100ec565b601f01601f19169190910160400192915050565b60006020828403121561023757600080fd5b5051919050565b6102a68061024d6000396000f3fe6080604052600436106100225760003560e01c80630900f010146100b357610061565b3661006157604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b600080546001600160a01b0316632cf35bc960e11b82350161008557808252602082f35b6040513683823782833683855af49150503d82833e806100ae573d6100aa5761050482fd5b3d82fd5b503d81f35b6100c66100c136600461022f565b6100c8565b005b806001600160a01b03166304e80e906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610253565b6001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b03166304e80e906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a89190610253565b6001600160a01b0316146101f55760405162461bcd60e51b815260206004820152601060248201526f206777702067777063206f776e65722160801b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116811461022c57600080fd5b50565b60006020828403121561024157600080fd5b813561024c81610217565b9392505050565b60006020828403121561026557600080fd5b815161024c8161021756fea26469706673582212205775e6c5e9ef753d07c11214b9cc78661edc80f80aa4a5320ece84a06e7b2d1064736f6c63430008130033608060405260405161032e38038061032e83398101604081905261002291610047565b600080546001600160a01b0319166001600160a01b0392909216919091179055610077565b60006020828403121561005957600080fd5b81516001600160a01b038116811461007057600080fd5b9392505050565b6102a8806100866000396000f3fe6080604052600436106100225760003560e01c80630900f010146100b357610061565b3661006157604080513381523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a1005b600080546001600160a01b0316632cf35bc960e11b82350161008557808252602082f35b6040513683823782833683855af49150503d82833e806100ae573d6100aa5761040482fd5b3d82fd5b503d81f35b6100c66100c1366004610231565b6100c8565b005b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a9190610255565b6001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a89190610255565b6001600160a01b0316146101f75760405162461bcd60e51b8152602060048201526012602482015271206f776e6572206d6173746572436f70792160701b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116811461022e57600080fd5b50565b60006020828403121561024357600080fd5b813561024e81610219565b9392505050565b60006020828403121561026757600080fd5b815161024e8161021956fea26469706673582212200362ec1e10127fcb1626ac386027d4ab5b2e6aa3ded89dece015d4ae3685de0764736f6c63430008130033202d20696c6c6567616c2f756e6b6e6f776e20696e69746961746f72206f72206f776e65722ea2646970667358221220e032d793cae8095445ac2d47f1919ae2109157c4009178f7a28f5a5805562d2664736f6c63430008130033

Deployed Bytecode Sourcemap

14774:35383:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49321:9;49332:1;49321:12;49317:25;;14774:35383;49317:25;49424:30;;;49432:10;188:51:1;;49444:9:0;270:2:1;255:18;;248:34;49424:30:0;;161:18:1;49424:30:0;;;;;;;14774:35383;;49232:23;49243:5;49232:23;;;;;;;;;;;;;-1:-1:-1;;;49232:23:0;;;:10;:23::i;:::-;14774:35383;29144:642;;;;;;:::i;:::-;;:::i;25372:595::-;;;;;;:::i;:::-;;:::i;45345:360::-;;;;;;:::i;:::-;;:::i;45713:356::-;;;;;;:::i;:::-;;:::i;30021:160::-;;;;;;:::i;:::-;;:::i;30189:632::-;;;;;;:::i;:::-;;:::i;30833:1279::-;;;;;;:::i;:::-;;:::i;36608:4810::-;;;;;;:::i;:::-;;:::i;42892:943::-;;;;;;:::i;:::-;;:::i;46079:355::-;;;;;;:::i;:::-;;:::i;46938:551::-;;;;;;:::i;:::-;;:::i;46446:484::-;;;;;;:::i;:::-;;:::i;16591:55::-;;;;;;;;;;-1:-1:-1;16591:55:0;;;;-1:-1:-1;;;;;16591:55:0;;;;;;-1:-1:-1;;;;;7048:32:1;;;7030:51;;7018:2;7003:18;16591:55:0;;;;;;;;42070:812;;;;;;:::i;:::-;;:::i;32124:4472::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;16888:206::-;;;;;;;;;;-1:-1:-1;16962:4:0;16888:206;;41708:350;;;;;;:::i;:::-;;:::i;47664:352::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18129:195::-;;;;;;;;;;-1:-1:-1;18129:195:0;;;;;:::i;:::-;;:::i;47501:151::-;;;;;;;;;;;;;:::i;16363:43::-;;;;;;;;;;-1:-1:-1;16363:43:0;;;;-1:-1:-1;;;;;16363:43:0;;;25975:305;;;;;;:::i;:::-;;:::i;16475:48::-;;;;;;;;;;-1:-1:-1;16475:48:0;;;;-1:-1:-1;;;;;16475:48:0;;;16530:54;;;;;;;;;;-1:-1:-1;16530:54:0;;;;-1:-1:-1;;;;;16530:54:0;;;16312:44;;;;;;;;;;-1:-1:-1;16312:44:0;;;;-1:-1:-1;;;;;16312:44:0;;;48904:82;;;;;;;;;;-1:-1:-1;48970:8:0;48904:82;;;11164:25:1;;;11152:2;11137:18;48904:82:0;11018:177:1;16413:55:0;;;;;;;;;;-1:-1:-1;16413:55:0;;;;-1:-1:-1;;;;;16413:55:0;;;16184:56;;;;;;;;;;-1:-1:-1;16184:56:0;;;;-1:-1:-1;;;;;16184:56:0;;;18332:141;;;;;;;;;;-1:-1:-1;18332:141:0;;;;;:::i;:::-;18389:7;18432:19;;;:11;:19;;;;;;-1:-1:-1;;;;;18432:29:0;;18332:141;48998:184;;;:::i;:::-;;;11941:14:1;;11934:22;11916:41;;11904:2;11889:18;48998:184:0;11776:187:1;19519:161:0;;;;;;;;;;-1:-1:-1;19519:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17873:248::-;;;;;;;;;;-1:-1:-1;17873:248:0;;;;;:::i;:::-;;:::i;16247:58::-;;;;;;;;;;-1:-1:-1;16247:58:0;;;;-1:-1:-1;;;;;16247:58:0;;;19125:386;;;;;;;;;;-1:-1:-1;19125:386:0;;;;;:::i;:::-;;:::i;26924:1342::-;;;;;;:::i;:::-;;:::i;26432:161::-;;;;;;;;;;-1:-1:-1;26432:161:0;;;;;:::i;:::-;-1:-1:-1;;;26432:161:0;;;;;;;;;;;;-1:-1:-1;;;;;;14590:33:1;;;14572:52;;14560:2;14545:18;26432:161:0;14428:202:1;25269:91:0;25348:3;25346:1;25338:14;;;;-1:-1:-1;;;25338:14:0;;;;;;;;:::i;:::-;;;;;;;;;;25269:91;;:::o;29144:642::-;29417:14;29457:3;29449:2;;29452:1;29449:5;;;;;;;:::i;:::-;;;;;;;29441:14;;:19;;29417:43;;29517:15;-1:-1:-1;;;;;29549:2:0;;29552:1;29549:5;;;;;;;:::i;:::-;;;;;;;29541:14;;:25;29517:49;;29613:19;29637:26;29657:2;;29660:1;29657:5;;;;;;;:::i;:::-;;;;;;;29637:19;:26::i;:::-;29613:50;;29739:39;29749:2;;29752:1;29749:5;;;;;;;:::i;:::-;;;;;;;29755;29761;29767:4;29772:2;;29775:1;29772:5;;;;;;;:::i;:::-;;;;;;;29739:9;:39::i;:::-;29206:580;;;29144:642;;:::o;25372:595::-;25481:12;25495:23;25530:42;-1:-1:-1;;;;;25522:56:0;25586:1;25589:4;;25522:72;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25480:114:0;;-1:-1:-1;25480:114:0;-1:-1:-1;25611:84:0;25622:13;;;;;:24;;;25639:7;25622:24;:48;;;;-1:-1:-1;25650:17:0;;:20;25622:48;:68;;;;-1:-1:-1;25674:16:0;;;25622:68;25611:84;;;;;;;;;;;;;-1:-1:-1;;;25611:84:0;;;:10;:84::i;:::-;25709:30;;11164:25:1;;;25709:30:0;;11152:2:1;11137:18;25709:30:0;;;;;;;25756:18;;:38;;-1:-1:-1;;;25756:38:0;;;;;11164:25:1;;;-1:-1:-1;;;;;25756:18:0;;;;:25;;11137:18:1;;25756:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25832:96:0;;-1:-1:-1;25905:10:0;;-1:-1:-1;;25864:3:0;25842:25;;;-1:-1:-1;;;;;;25841:42:0;25832:96;:::i;:::-;25803:26;;;;:11;:26;;;;;;:125;;;;-1:-1:-1;;;;;25372:595:0:o;45345:360::-;45432:14;45449:27;45469:6;45449:19;:27::i;:::-;45432:44;;45634:1;45630;45627;45620:4;45614:11;45607:4;45601;45597:15;45594:1;45586:6;45579:5;45574:58;45571:65;45568:85;;45649:1;45646;45639:12;45568:85;45675:21;;11164:25:1;;;45675:21:0;;11152:2:1;11137:18;45675:21:0;;;;;;;;45422:283;45345:360;;:::o;45713:356::-;45801:14;45818:27;45838:6;45818:19;:27::i;:::-;45801:44;;46003:1;45999;45996;45989:4;45983:11;45976:4;45970;45966:15;45963:1;45955:6;45948:5;45943:58;45940:65;45937:85;;46018:1;46015;46008:12;45937:85;46044:17;;11164:25:1;;;46044:17:0;;11152:2:1;11137:18;46044:17:0;11018:177:1;30021:160:0;30105:28;30126:6;30105:20;:28::i;:::-;30142:31;30159:6;30166;;30142:16;:31::i;30189:632::-;30271:9;30283:19;;;:11;:19;;;;;;30317:170;-1:-1:-1;;;;;30345:11:0;;30360:10;30329:41;;:68;;-1:-1:-1;30372:10:0;30392:4;30372:25;30329:68;30328:154;;;;-1:-1:-1;;;;;;30453:3:0;30426:30;;;30402:75;;;;;:13;:75;;;;;;:80;30328:154;30317:170;;;;;;;;;;;;;-1:-1:-1;;;30317:170:0;;;:10;:170::i;:::-;30615:3;30588:30;;;-1:-1:-1;;;;;30676:18:0;;30565:10;30676:18;;;:13;:18;;;;;;30667:54;;-1:-1:-1;;;15832:66:0;-1:-1:-1;;;;;30676:28:0;30667:54;:::i;:::-;-1:-1:-1;;;;;30646:18:0;;;;;;:13;:18;;;;;:75;30782:31;30799:6;30806;;30782:16;:31::i;30833:1279::-;30934:9;30946:2;;30949:1;30946:5;;;;;;;:::i;:::-;;;;;;;30934:17;;31222:14;31262:3;31254:2;;31257:1;31254:5;;;;;;;:::i;:::-;;;;;;;31246:14;;:19;;31222:43;;31328:15;-1:-1:-1;;;;;31360:2:0;;31363:1;31360:5;;;;;;;:::i;:::-;;;;;;;31352:14;;:25;31328:49;;31434:19;31458:26;31478:2;;31481:1;31478:5;;;;;;;:::i;31458:26::-;31434:50;;31564:35;31574:1;31576:5;31582;31588:4;31593:2;;31596:1;31593:5;;;;;;;:::i;31564:35::-;-1:-1:-1;;;;;31771:3:0;31735:39;;;31711:84;;;;;:13;:84;;;;;;;;;;31700:106;;;;;;;;;;;-1:-1:-1;;;31700:106:0;;;;;;;;;31711:89;;;31700:10;:106::i;:::-;31932:3;31896:39;;;-1:-1:-1;;;;;31993:18:0;;31874:10;31993:18;;;:13;:18;;;;;;31984:54;;-1:-1:-1;;;15832:66:0;-1:-1:-1;;;;;31993:28:0;31984:54;:::i;:::-;-1:-1:-1;;;;;31963:18:0;;;;;;:13;:18;;;;;:75;32078:26;32095:1;32097:6;;32078:16;:26::i;:::-;30925:1187;;;;;30833:1279;;;;:::o;36608:4810::-;36694:14;36711:4;36716:1;36711:7;;;;;;;;:::i;:::-;;;;;;;36694:24;;36824:6;36853:1;36841:4;:11;:13;;;;:::i;:::-;36824:30;-1:-1:-1;36916:11:0;36969:18;36940:20;:15;36956:4;36940:20;:::i;:::-;36933:55;;-1:-1:-1;37014:14:0;37060:3;37062:1;37060;:3;:::i;:::-;37059:9;;37067:1;37059:9;:::i;:::-;37039:30;;:9;:30;:::i;:::-;37171:9;37188:19;;;:11;:19;;;;;;37014:56;;-1:-1:-1;37234:168:0;-1:-1:-1;;;;;37262:11:0;;37277:10;37246:41;;:77;;-1:-1:-1;37297:10:0;37318:4;37289:34;37246:77;37245:86;;;;;37329:2;37326:1;:5;;37245:86;:94;;;;;37336:3;37333:1;:6;;37245:94;:139;;;;;16169:3;-1:-1:-1;;;;;37341:43:0;37365:4;37370:1;37365:7;;;;;;;;:::i;:::-;;;;;;;37357:16;;-1:-1:-1;;;;;37341:43:0;;;37245:139;:152;;;;;37396:1;37386:9;:11;37245:152;37234:168;;;;;;;;;;;;;-1:-1:-1;;;37234:168:0;;;:10;:168::i;:::-;37468:25;37510:3;37512:1;37510;:3;:::i;:::-;-1:-1:-1;;;;;37496:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37496:18:0;-1:-1:-1;37468:46:0;-1:-1:-1;37577:25:0;37620:3;37622:1;37620;:3;:::i;:::-;37619:7;;37625:1;37619:7;:::i;:::-;-1:-1:-1;;;;;37605:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37605:22:0;-1:-1:-1;37577:50:0;-1:-1:-1;37688:19:0;37815:9;;37872:1;37815:9;37906:1679;-1:-1:-1;;;;;37950:4:0;37955:3;:1;37957;37955:3;:::i;:::-;37950:9;;;;;;;;:::i;:::-;;;;;;;37942:18;;:28;37922:50;;38025:4;38030:1;38032;38030:3;;;;:::i;:::-;38025:9;;;;;;;;:::i;:::-;;;;;;;38021:13;;38201:54;16169:3;-1:-1:-1;;;;;38212:10:0;:1;-1:-1:-1;;;;;38212:10:0;;;:26;;;;;38226:4;38231:1;38226:7;;;;;;;;:::i;:::-;;;;;;;38235:3;38226:12;;;;38212:26;:36;;;;-1:-1:-1;38242:6:0;;;38212:36;38201:54;;;;;;;;;;;;;-1:-1:-1;;;38201:54:0;;;:10;:54::i;:::-;38397:1;38382:8;38391:2;38382:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38382:16:0;;;:12;;;;;;;;;;;:16;38510:4;38515:3;:1;38517;38515:3;:::i;:::-;38510:9;;;;;;;;:::i;:::-;;;;;;;38502:18;;38487:8;38496:2;38487:12;;;;;;;;:::i;:::-;;;;;;;;;;:33;38680:6;38687:4;38692:3;:1;38694;38692:3;:::i;:::-;38687:9;;;;;;;;:::i;:::-;;;;;;;38663:34;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;38663:34:0;;;;;;;;;;;-1:-1:-1;38777:58:0;;-1:-1:-1;;;;;38788:33:0;;;:41;;;;;38822:6;;38788:41;38663:34;38788:41;38663:34;38822:6;38788:33;:41;;;;;;;38777:58;;;;;;;;;;;;;-1:-1:-1;;;38777:58:0;;;:10;:58::i;:::-;38853:35;;;-1:-1:-1;;;;;206:32:1;;188:51;;270:2;255:18;;248:34;;;38853:35:0;;161:18:1;38853:35:0;;;;;;;26391:14;;-1:-1:-1;;;;;26391:14:0;38913:279;;38944:4;;;;;;;;;-1:-1:-1;;;;;38944:4:0;-1:-1:-1;;;;;38944:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38944:27:0;;38972:6;38980:4;38985:1;38980:7;;;;;;;;:::i;:::-;;;;;;;;;;;39012:16;;38944:92;;-1:-1:-1;;;;;;38944:92:0;;;;;;;;;;16962:25:1;;;;17003:18;;;16996:34;;;;38997:4:0;17084:18:1;;;17077:43;-1:-1:-1;;;;;39012:16:0;17136:18:1;;;17129:43;-1:-1:-1;;;;;17209:31:1;;17188:19;;;17181:60;16934:19;;38944:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38913:279;;;39127:51;39147:6;39154:4;39159:1;39154:7;;;;;;;;:::i;:::-;;;;;;;39170:4;39176:1;39127:19;:51::i;:::-;39221:20;39244:24;39255:4;39260:3;:1;39262;39260:3;:::i;:::-;39255:9;;;;;;;;:::i;:::-;;;;;;;39265:2;39244:10;:24::i;:::-;39327:16;;39354;;;;;;;;;;;-1:-1:-1;;;39354:16:0;;;;39327:51;;-1:-1:-1;;;39327:51:0;;39221:47;;-1:-1:-1;;;;;;39327:16:0;;;;:24;;:51;;39352:1;;39354:16;39221:47;;39327:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39206:186;39405:30;39415:1;39418;39420:4;39425:1;39420:7;;;;;;;;:::i;:::-;;;;;;;39428:6;39405:9;:30::i;:::-;39524:4;;;;:::i;:::-;;-1:-1:-1;39545:3:0;;-1:-1:-1;39545:1:0;39547;39545:3;:::i;:::-;39541:7;-1:-1:-1;39574:1:0;39569:3;39571:1;39541:7;39569:3;:::i;:::-;39568:7;:15;;;;;39580:3;39577:1;:6;;39568:15;37906:1679;;-1:-1:-1;15945:66:0;;-1:-1:-1;15945:66:0;;-1:-1:-1;15945:66:0;;-1:-1:-1;39697:1:0;39688:3;39697:1;39688;:3;:::i;:::-;39687:7;;39693:1;39687:7;:::i;:::-;39679:19;;39671:28;;39700:6;39707:4;39712:1;39707:7;;;;;;;;:::i;:::-;;;;;;;39630:85;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;39630:85:0;;;;;;;;;;39726:16;;-1:-1:-1;;;39726:42:0;;39630:85;;-1:-1:-1;;;;;;39726:16:0;;:23;;:42;;39750:6;;39757:3;;39630:85;;39726:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39899:24;39971:4;39976:1;39971:7;;;;;;;;:::i;:::-;;;;;;;39963:16;;39982:27;39995:4;40000:1;39995:7;;;;;;;;:::i;:::-;;;;;;;40003:5;:3;:5::i;:::-;39982:12;:27::i;:::-;40010:15;;39926:100;;-1:-1:-1;;;;;40010:15:0;;;;39926:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;39899:127;;40134:7;-1:-1:-1;;;;;40110:57:0;;40175:6;40184:8;40110:84;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40256:45;40266:6;40281:7;40290:3;40256:45;;40294:6;40256:9;:45::i;:::-;40336:70;-1:-1:-1;;;;;;40391:14:0;;-1:-1:-1;;;;;40344:35:0;;40336:70;:::i;:::-;40314:19;;;;:11;:19;;;;;;;;;:92;;;;40473:33;-1:-1:-1;;;;;7048:32:1;;7030:51;;40473:33:0;;7003:18:1;40473:33:0;;;;;;;40537:16;40596:4;40601:1;40596:7;;;;;;;;:::i;:::-;;;;;;;40588:16;;40556:52;;;;;:::i;:::-;-1:-1:-1;;;;;7048:32:1;;;7030:51;;7018:2;7003:18;40556:52:0;;;;;;;;;;;;;;;;;;;;;;;40537:71;;40765:4;40770:1;40765:7;;;;;;;;:::i;:::-;;;;;;;40757:16;;40737:8;40749:1;40747;:3;;;;:::i;:::-;40746:7;;40752:1;40746:7;:::i;:::-;40737:17;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;;;;;40891:34:0;;40871:8;40881:3;40883:1;40881;:3;:::i;:::-;40880:7;;40886:1;40880:7;:::i;:::-;40871:17;;;;;;;;:::i;:::-;;;;;;;;;;:54;41025:71;;-1:-1:-1;;;41025:71:0;;-1:-1:-1;;;;;41025:44:0;;;;;41077:6;;41025:71;;41086:8;;41025:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41257:3:0;41248:4;41253:1;41248:6;;;;:::i;:::-;-1:-1:-1;;;;;41240:15:0;:20;;41239:37;41218:5;-1:-1:-1;;;;;41193:34:0;:85;;;;:::i;:::-;41166:3;41139:30;;;-1:-1:-1;;;;;41115:75:0;;;;;:13;:75;;;;;;;;;:163;;;;41371:25;-1:-1:-1;;;;;7048:32:1;;7030:51;;41371:25:0;;7003:18:1;41371:25:0;;;;;;;40526:885;36679:4739;;;;;;;;;36608:4810;:::o;42892:943::-;43018:9;43061:1;43050:12;;;43046:322;;-1:-1:-1;;;;;43160:2:0;;43163:1;43160:5;;;;;;;:::i;:::-;;;;;;;43152:14;;:25;43148:29;;43188:109;43209:1;43199:9;:11;:16;;;;;43214:1;43212;:3;43199:16;:29;;;;;43227:1;43217:9;:11;43199:29;:93;;;;-1:-1:-1;43282:10:0;-1:-1:-1;;;;;43247:11:0;:20;43260:2;;43247:20;43260:5;;;;;:::i;:::-;;;;;;;43247:20;;;;;;;;;;;;:30;-1:-1:-1;;;;;43230:62:0;;43199:93;43188:109;;;;;;;;;;;;;-1:-1:-1;;;43188:109:0;;;:10;:109::i;:::-;43308:50;;-1:-1:-1;;;43308:50:0;;43309:4;;43308:26;;43342:1;;43308:50;;43346:2;;;;43350:6;;;;43308:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43046:322;43399:1;43388:12;;;43384:229;;43493:27;43514:1;43504:9;:11;43493:27;;;;;;;;;;;;;-1:-1:-1;;;43493:27:0;;;:10;:27::i;:::-;43531:29;43552:4;;43557:1;43552:7;;;;;;;:::i;:::-;;;;;;;43531:20;:29::i;:::-;43572:4;43571:15;43587:4;;43592:1;43587:7;;;;;:::i;:::-;;;;;;;43596:6;;43571:32;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43384:229;43633:12;43643:2;43633:9;:12;:::i;:::-;43629:16;-1:-1:-1;43761:4:0;43760:30;43798:20;43629:16;43806:9;43798:20;:::i;:::-;43821:4;;43760:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43009:826;42892:943;;;;;;:::o;46079:355::-;46164:14;46181:27;46201:6;46181:19;:27::i;:::-;46164:44;;46366:1;46362;46359;46352:4;46346:11;46339:4;46333;46329:15;46326:1;46318:6;46311:5;46306:58;46303:65;46300:85;;46381:1;46378;46371:12;46300:85;46407:19;;11164:25:1;;;46407:19:0;;11152:2:1;11137:18;46407:19:0;11018:177:1;46938:551:0;47029:14;47046:27;47066:6;47046:19;:27::i;:::-;47029:44;;47231:1;47227;47224;47217:4;47211:11;47204:4;47198;47194:15;47191:1;47183:6;47176:5;47171:58;47168:65;47165:85;;47246:1;47243;47236:12;47165:85;-1:-1:-1;;;;;47392:27:0;47397:21;47407:4;47412:2;47415;47397:9;:21::i;:::-;22180:2;22169:14;22163:21;;21998:202;47392:27;47384:36;;:46;-1:-1:-1;;;;;47272:209:0;-1:-1:-1;;;;;47315:26:0;47320:20;47330:4;47335:1;47337:2;47320:9;:20::i;47315:26::-;47307:45;-1:-1:-1;;;;;47272:209:0;;47477:3;47445:27;47450:21;47460:4;47465:2;47468;47450:9;:21::i;47445:27::-;47436:44;;;;:::i;:::-;47272:209;;11164:25:1;;;11152:2;11137:18;47272:209:0;;;;;;;47019:470;46938:551;;:::o;46446:484::-;46533:14;46550:27;46570:6;46550:19;:27::i;:::-;46533:44;;46735:1;46731;46728;46721:4;46715:11;46708:4;46702;46698:15;46695:1;46687:6;46680:5;46675:58;46672:65;46669:85;;46750:1;46747;46740:12;46669:85;-1:-1:-1;;;;;46834:26:0;46839:20;46849:4;46854:1;46856:2;46839:9;:20::i;46834:26::-;46826:45;-1:-1:-1;;;;;46776:146:0;46793:4;46776:146;46918:3;46886:27;46891:21;46901:4;46906:2;46909;46891:9;:21::i;42070:812::-;42173:107;42207:10;-1:-1:-1;;;;;42194:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48970:8;42184:44;:91;;;;;42253:10;-1:-1:-1;;;;;42240:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42230:8;;-1:-1:-1;;;;;42230:8:0;;;:45;;;42184:91;42173:107;;;;;;;;;;;;;-1:-1:-1;;;42173:107:0;;;:10;:107::i;:::-;42312:43;;-1:-1:-1;;;42312:43:0;;;;;11164:25:1;;;42297:12:0;;42325:10;;42312:35;;11137:18:1;;42312:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42379:46;;-1:-1:-1;;;42379:46:0;;;;;11164:25:1;;;42297:58:0;;-1:-1:-1;42364:11:0;;42392:10;;42379:38;;11137:18:1;;42379:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42507:3:0;42471:39;;;42447:84;;;;;:13;:84;;;;;;42364:61;;-1:-1:-1;42436:230:0;;42447:87;:133;;;;-1:-1:-1;;;;;;42552:20:0;;;42536:44;;;;42447:133;:189;;;;-1:-1:-1;;;;;;42582:54:0;;;42603:31;;;42582:54;42447:189;:213;;;;-1:-1:-1;42638:19:0;;;;:11;:19;;;;;;:22;42447:213;42436:230;;;;;;;;;;;;;-1:-1:-1;;;42436:230:0;;;:10;:230::i;:::-;-1:-1:-1;;;;;42737:3:0;42701:39;;;42677:84;;;;;:13;:84;;;;;:99;;;42807:67;-1:-1:-1;;;;;;42709:25:0;;-1:-1:-1;;;;;42815:23:0;;42807:67;:::i;:::-;42785:19;;;;:11;:19;;;;;;:89;;;;-1:-1:-1;;;;42070:812:0:o;32124:4472::-;32207:14;32223:12;32237:11;32250:12;32264:22;32298:13;32328:10;32348:2;32328:22;;32359:18;32394:13;32415:19;32429:4;;32415:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32415:13:0;;-1:-1:-1;;;32415:19:0:i;:::-;32394:40;;32536:13;32557:4;;;;;;;;;-1:-1:-1;;;;;32557:4:0;-1:-1:-1;;;;;32557:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32557:16:0;;32574:5;32557:23;;;;;;;;;;;;;11164:25:1;;11152:2;11137:18;;11018:177;32557:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32536:44;;32678:18;32728:3;32706:20;32720:5;17168:11;17215:24;;;:11;:24;;;;;;17258:3;17206:55;;17102:186;32706:20;-1:-1:-1;;;;;32699:32:0;;32678:53;;32916:21;32931:5;32916:14;:21::i;:::-;32940:3;32916:27;32899:45;;33021:4;;;;;;;;;-1:-1:-1;;;;;33021:4:0;-1:-1:-1;;;;;33021:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33021:23:0;;33045:5;33021:30;;;;;;;;;;;;;11164:25:1;;11152:2;11137:18;;11018:177;33021:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33016:106;;33107:14;33112:6;33120:1;33107:14;:::i;:::-;33090:32;;33016:106;18389:7;18432:19;;;:11;:19;;;;;;-1:-1:-1;;;;;33177:35:0;;;18432:29;;33177:35;;:61;;-1:-1:-1;;;;;;33216:22:0;;33233:4;33216:22;33177:61;33173:106;;;33264:14;33269:6;33277:1;33264:14;:::i;:::-;33247:32;;33173:106;33416:16;;33378:4;;:10;;;-1:-1:-1;;;33378:10:0;;;;-1:-1:-1;;;;;33416:16:0;;;;33378:4;;;;:8;;:10;;;;;;;;;;;;;;;:4;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33378:19:0;;33398:5;33378:26;;;;;;;;;;;;;11164:25:1;;11152:2;11137:18;;11018:177;33378:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33378:55:0;;33374:106;;33465:14;33470:6;33478:1;33465:14;:::i;:::-;33448:32;;33374:106;33556:13;33552:109;;;33643:17;33648:6;33658:2;33643:17;:::i;:::-;33626:35;;33552:109;33704:16;;:28;;-1:-1:-1;;;33704:28:0;;;;;11164:25:1;;;33744:4:0;;-1:-1:-1;;;;;33704:16:0;;:21;;11137:18:1;;33704:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33704:45:0;;33700:109;;33791:17;33796:6;33806:2;33791:17;:::i;:::-;33774:35;;33700:109;26391:14;;-1:-1:-1;;;;;26391:14:0;26383:32;;;33887:160;;-1:-1:-1;33930:16:0;;:46;;;-1:-1:-1;;;33930:46:0;;;;;23243:25:1;;;23284:18;;;23277:30;;;;23343:2;23323:18;;;23316:30;-1:-1:-1;;;23362:18:1;;;23355:45;33908:69:0;;-1:-1:-1;;;;;33930:16:0;;:21;;23417:19:1;;33930:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33930:46:0;;;;;;;;;;;;:::i;33908:69::-;-1:-1:-1;;;33900:146:0;;33887:160;33886:235;;;-1:-1:-1;26391:14:0;;-1:-1:-1;;;;;26391:14:0;26383:32;;34053:67;;;;-1:-1:-1;34119:1:0;34071:16;;:46;;;-1:-1:-1;;;34071:46:0;;;;;23243:25:1;;;23284:18;;;23277:30;;;;23343:2;23323:18;;;23316:30;-1:-1:-1;;;23362:18:1;;;23355:45;34064:54:0;;-1:-1:-1;;;;;34071:16:0;;:21;;23417:19:1;;34071:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34071:46:0;;;;;;;;;;;;:::i;:::-;34064:6;:54::i;:::-;:56;34053:67;33882:357;;;34221:17;34226:6;34234:4;34221:17;:::i;:::-;34204:35;;33882:357;16169:3;34274:20;34288:5;34274:13;:20::i;:::-;-1:-1:-1;;;;;34274:31:0;;34270:109;;34361:17;34366:6;34374:4;34361:17;:::i;:::-;34344:35;;34270:109;-1:-1:-1;;;;;34423:16:0;;34419:108;;34510:16;34515:6;34523:3;34510:16;:::i;:::-;34493:34;;34419:108;34603:18;;;;;;;;;-1:-1:-1;;;;;34603:18:0;-1:-1:-1;;;;;34603:28:0;;34632:4;;34603:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34599:108;;;34690:16;34695:6;34703:3;34690:16;:::i;:::-;34673:34;;34599:108;34765:9;-1:-1:-1;;;;;34748:27:0;;;34744:109;;34835:17;34840:6;34848:4;34835:17;:::i;:::-;34818:35;;34744:109;26391:14;;-1:-1:-1;;;;;26391:14:0;26383:32;;34907:56;;;;;34930:18;;;;;;;;;-1:-1:-1;;;;;34930:18:0;-1:-1:-1;;;;;34930:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34921:41:0;:5;-1:-1:-1;;;;;34921:41:0;;34907:56;34903:109;;;34994:17;34999:6;35007:4;34994:17;:::i;:::-;34977:35;;34903:109;35108:13;35104:1046;;;35259:16;;:31;;-1:-1:-1;;;35259:31:0;;;;;24672:25:1;;;35286:3:0;24713:18:1;;;24706:34;-1:-1:-1;;;;;35259:16:0;;;;:20;;24645:18:1;;35259:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35259:31:0;;;;;;;;;;;;:::i;:::-;35245:45;;-1:-1:-1;35245:45:0;-1:-1:-1;35388:3:0;35384:7;;35383:30;;;;;35409:3;35395:5;:12;:17;;35383:30;:54;;;;;35430:2;35417:5;:12;:15;;;;:::i;:::-;35416:20;35383:54;35379:106;;;35468:16;35473:6;35481:3;35468:16;:::i;:::-;35451:34;;35379:106;35512:16;;:30;;-1:-1:-1;;;35512:30:0;;;;;24672:25:1;;;35539:2:0;24713:18:1;;;24706:34;-1:-1:-1;;;;;35512:16:0;;;;:20;;24645:18:1;;35512:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35512:30:0;;;;;;;;;;;;:::i;:::-;35498:44;;-1:-1:-1;35498:44:0;-1:-1:-1;35654:2:0;35650:6;;35649:27;;;;;35673:2;35660:5;:12;:15;35649:27;:50;;;;;35692:6;35679:5;:12;:19;35649:50;35645:105;;;35734:15;35739:6;35747:2;35734:15;:::i;:::-;35717:33;;35645:105;35796:19;;;;:11;:19;;;;;;35776:41;;:18;:41::i;:::-;:48;35959:16;;:44;;;-1:-1:-1;;;35959:44:0;;;;;25866:25:1;;;25907:18;;;25900:30;;;;25966:2;25946:18;;;25939:30;-1:-1:-1;;;25985:18:1;;;25978:43;35776:48:0;;-1:-1:-1;35937:67:0;;-1:-1:-1;;;;;35959:16:0;;;;:21;;26038:19:1;;35959:44:0;25654:409:1;35937:67:0;35929:76;-1:-1:-1;36021:9:0;26391:14;;-1:-1:-1;;;;;26391:14:0;26383:32;;;26318:106;36021:9;36020:10;:87;;;;;36033:5;-1:-1:-1;;;36033:73:0;36020:87;36016:102;;;36117:1;36109:9;;36016:102;36252:21;36267:5;36252:14;:21::i;:::-;36238:2;36232:8;;;36175:46;36217:3;36200:20;;;36183:5;36175:46;:::i;:::-;:66;;;;:::i;:::-;:99;;;;:::i;:::-;36166:108;;36293:7;36304:1;36293:12;36289:95;;18389:7;18432:19;;;:11;:19;;;;;;36315:6;;-1:-1:-1;;;;;18432:29:0;36325:17;36343:20;36357:5;36343:13;:20::i;:::-;36372:4;36378:5;36307:77;;;;;;;;;;;;;;;;;;36289:95;36445:7;36456:1;36445:12;36441:95;;18389:7;18432:19;;;:11;:19;;;;;;36467:5;;-1:-1:-1;;;;;18432:29:0;36477:17;18332:141;36441:95;32288:4308;;;;;;32124:4472;;;;;;;;;;:::o;41708:350::-;41784:9;41796:19;;;:11;:19;;;;;;41824:140;-1:-1:-1;;;;;41852:11:0;;41868:10;41835:43;:83;;;;;41903:4;-1:-1:-1;;;;;41890:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48970:8;41880:38;41835:83;:124;;;;;41943:4;-1:-1:-1;;;;;41930:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41920:8;;-1:-1:-1;;;;;41920:8:0;;;:39;;;41835:124;41824:140;;;;;;;;;;;;;-1:-1:-1;;;41824:140:0;;;:10;:140::i;:::-;41986:4;-1:-1:-1;;;;;41973:28:0;;42002:6;42009:1;42011:13;:38;42026:21;42040:6;17168:11;17215:24;;;:11;:24;;;;;;17258:3;17206:55;;17102:186;42026:21;-1:-1:-1;;;;;42011:38:0;-1:-1:-1;;;;;42011:38:0;;;;;;;;;;;;;41973:77;;;;;;;;;;;;;;;;26270:25:1;;;26326:2;26311:18;;26304:34;;;;26369:2;26354:18;;26347:34;26258:2;26243:18;;26068:319;41973:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41775:283;41708:350;;:::o;47664:352::-;47700:13;47739;47774:4;47765:13;;;47761:37;;-1:-1:-1;;47784:14:0;;;;;;;;;;;;-1:-1:-1;;;47784:14:0;;;;;47664:352::o;47761:37::-;47811:7;47820:3;47811:12;47807:38;;-1:-1:-1;;47830:15:0;;;;;;;;;;;;-1:-1:-1;;;47830:15:0;;;;;47664:352::o;47807:38::-;47858:7;47867:8;47858:17;47854:39;;-1:-1:-1;;47877:16:0;;;;;;;;;;;;-1:-1:-1;;;47877:16:0;;;;;47664:352::o;47854:39::-;47906:7;47915:3;47906:12;47902:39;;-1:-1:-1;;47925:16:0;;;;;;;;;;;;-1:-1:-1;;;47925:16:0;;;;;47664:352::o;47902:39::-;47954:7;47963:2;47954:11;47950:36;;-1:-1:-1;;47973:13:0;;;;;;;;;;;;-1:-1:-1;;;47973:13:0;;;;;47664:352::o;47950:36::-;-1:-1:-1;;47995:13:0;;;;;;;;;;;;-1:-1:-1;;;47995:13:0;;;;;47664:352::o;18129:195::-;18194:9;-1:-1:-1;;;;;18256:13:0;:43;18271:26;18285:11;17168;17215:24;;;:11;:24;;;;;;17258:3;17206:55;;17102:186;18271:26;-1:-1:-1;;;;;18256:43:0;;;;;;;;;;;;-1:-1:-1;18256:43:0;;18239:73;;18129:195;-1:-1:-1;;18129:195:0:o;47501:151::-;47550:8;;47539:105;;-1:-1:-1;;;;;47550:8:0;47560:10;47550:20;:89;;;;-1:-1:-1;47596:10:0;47572:67;47615:23;47637:1;47615:21;:23;:::i;:::-;47572:67;;;;;;;;;;;;;;;;;;;;;47550:89;47539:105;;;;;;;;;;;;;-1:-1:-1;;;47539:105:0;;;:10;:105::i;:::-;47501:151::o;25975:305::-;26069:18;;:38;;-1:-1:-1;;;26069:38:0;;;;;11164:25:1;;;-1:-1:-1;;;;;26069:18:0;;;;:25;;11137:18:1;;26069:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26145:96:0;;-1:-1:-1;26218:10:0;;-1:-1:-1;;26177:3:0;26155:25;;;-1:-1:-1;;;;;;26154:42:0;26145:96;:::i;:::-;26116:26;;;;:11;:26;;;;;;:125;;;;-1:-1:-1;25975:305:0:o;48998:184::-;49124:30;;;49132:10;188:51:1;;49144:9:0;270:2:1;255:18;;248:34;49049:4:0;;49124:30;;161:18:1;49124:30:0;;;;;;;-1:-1:-1;49170:4:0;;48998:184::o;19519:161::-;19604:9;19616:19;;;:11;:19;;;;;;19577:16;;19651:21;19616:19;19651:18;:21::i;:::-;19644:28;19519:161;-1:-1:-1;;;19519:161:0:o;17873:248::-;17939:13;17963:9;17983:13;:43;17998:26;18012:11;17168;17215:24;;;:11;:24;;;;;;17258:3;17206:55;;17102:186;17998:26;-1:-1:-1;;;;;17983:43:0;;;;;;;;;;;;-1:-1:-1;17983:43:0;;18091:3;18053:41;;17873:248;-1:-1:-1;;;17873:248:0:o;19125:386::-;19199:4;19226:19;;;:11;:19;;;;;;-1:-1:-1;;;;;19297:9:0;;19339:10;19323:26;;19319:44;;19358:5;19351:12;;;;;;19319:44;19451:52;;-1:-1:-1;;;19451:52:0;;-1:-1:-1;;;;;7048:32:1;;;19451:52:0;;;7030:51:1;19451:44:0;;;;;7003:18:1;;19451:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19444:59;;;;19125:386;;;;;:::o;26924:1342::-;27054:22;27096:19;;;:11;:19;;;;;;-1:-1:-1;;;;;27096:29:0;27137:131;27165:10;27149:26;;;:55;;-1:-1:-1;27179:10:0;27199:4;27179:25;27149:55;27148:94;;;;-1:-1:-1;27207:18:0;;:35;;-1:-1:-1;;;27207:35:0;;-1:-1:-1;;;;;27207:18:0;;;;:28;;:35;;27236:5;;27207:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27148:106;;;;-1:-1:-1;27244:10:0;;;27148:106;:115;;;;-1:-1:-1;27256:7:0;;;27148:115;27137:131;;;;;;;;;;;;;-1:-1:-1;;;27137:131:0;;;:10;:131::i;:::-;26391:14;;-1:-1:-1;;;;;26391:14:0;26383:32;27278:900;;27401:14;;;27413:1;27401:14;;;;;;;;;27380:18;;27401:14;;;;;;;;;;;;;;;;;;;-1:-1:-1;27435:137:0;;-1:-1:-1;;;27435:137:0;;;26659:46:1;26721:11;;;26714:27;;;27489:4:0;26757:12:1;;;26750:28;27504:4:0;26794:12:1;;;26787:28;;;27519:4:0;26831:13:1;;;26824:29;27558:4:0;27534:35;;26869:13:1;;;26862:29;27380:35:0;;-1:-1:-1;26907:13:1;;27435:137:0;;;;;;;;;;;;27426:3;27430:1;27426:6;;;;;;;;:::i;:::-;;;;;;;;;;:146;27630:18;;27586:12;27815:16;;27679:166;;27586:12;;;;-1:-1:-1;;;;;27630:18:0;;;;27661:5;;27679:166;;27774:5;;27788:4;;27794;;27799:7;;27815:16;;;;27833:3;;27586:12;;;;27679:166;;;:::i;:::-;;;;-1:-1:-1;;27679:166:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27679:166:0;-1:-1:-1;;;27679:166:0;;;27622:225;;;27679:166;27622:225;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27585:262;;;;27860:50;27871:7;:24;;;;-1:-1:-1;27880:12:0;;:15;27871:24;27903:5;27860:10;:50::i;:::-;27943:10;-1:-1:-1;;;;;27927:26:0;;;27923:76;;27955:44;27984:14;27955:28;:44::i;:::-;27293:716;;;27278:900;;;28033:18;;;28126:16;28033:125;;-1:-1:-1;;;28033:125:0;;-1:-1:-1;;;;;28033:18:0;;;;:37;;28078:5;;28033:125;;28085:5;;28099:4;;28105;;28110:7;;28126:16;;28099:4;;28033:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27278:900;28188:16;;-1:-1:-1;;;;;28188:16:0;:24;28213:6;28244:5;28250;:3;:5::i;:::-;28227:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28188:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27037:1229;26924:1342;;;;;:::o;24662:142::-;24729:13;24760:36;24771:6;24791:4;24778:17;;24760:10;:36::i;44377:956::-;44444:14;44580:19;;;:11;:19;;;;;;44643:10;-1:-1:-1;;;;;44628:11:0;;44612:41;44608:175;;44743:3;44714:32;-1:-1:-1;;;;;44689:78:0;;;;;:13;:78;;;;;;-1:-1:-1;;;;;44680:99:0;;;-1:-1:-1;;44377:956:0:o;44608:175::-;44794:23;44820:21;44839:1;44820:18;:21::i;:::-;44916:13;;44794:47;;-1:-1:-1;44955:2:0;44904:9;44991:99;45022:10;-1:-1:-1;;;;;45009:23:0;:6;45016:1;45009:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;45009:23:0;;45005:38;;45042:1;45034:9;;45005:38;45054:3;;;;:::i;:::-;;;;45076:1;45074;:3;:14;;;;;45079:5;45086:2;45079:9;45074:14;44991:99;;45106:74;45135:2;45129:5;:8;45106:74;;;;;;;;;;;;;;;;;:10;:74::i;:::-;-1:-1:-1;;;;45285:3:0;45256:32;-1:-1:-1;;;;;45231:78:0;;;;;:13;:78;;;;;;-1:-1:-1;;;;;45222:99:0;;;-1:-1:-1;;44377:956:0:o;43847:522::-;43955:9;43967:19;;;:11;:19;;;;;;44030:10;-1:-1:-1;;;;;44015:11:0;;43999:41;43995:54;;44042:7;43847:522;:::o;43995:54::-;44065:23;44091:21;44110:1;44091:18;:21::i;:::-;44184:13;;44065:47;;-1:-1:-1;44175:6:0;44233:85;44264:10;-1:-1:-1;;;;;44251:23:0;:6;44258:1;44251:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;44251:23:0;;44247:36;;44276:7;;;;43847:522;:::o;44247:36::-;44293:3;;;;:::i;:::-;;;;44315:1;44313;:3;44233:85;;44334:27;44345:5;44334:27;;;;;;;;;;;;;-1:-1:-1;;;44334:27:0;;;:10;:27::i;29798:215::-;29880:16;;29914:25;;-1:-1:-1;;;;;29880:16:0;;;;:23;;29904:6;;29911:2;;29914:25;;29931:7;;;;29914:25;;;:::i;:::-;;;;;;;;;;;;;29880:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29980:25;29998:6;29980:25;;;;11164::1;;11152:2;11137:18;;11018:177;41426:269:0;41550:18;;;;;;;;;-1:-1:-1;;;;;41550:18:0;-1:-1:-1;;;;;41550:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41539:61:0;;41601:6;41608:30;41628:9;41608:19;:30::i;:::-;41654:16;;;41539:148;;-1:-1:-1;;;;;;41539:148:0;;;;;;;;;;;41639:6;;-1:-1:-1;;;;;41654:16:0;;41672:10;;41654:16;;;41539:148;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20882:284::-;20947:13;20971:17;21001:3;-1:-1:-1;;;;;20991:14:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20991:14:0;;20971:34;;21014:9;21040:82;21073:2;21076:1;21073:5;;;;;;;:::i;:::-;;;;21063:4;21068:1;21063:7;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;21063:15:0;;;;;;;;-1:-1:-1;21089:3:0;;;;:::i;:::-;;;;21111;21109:1;:5;:11;;;;;21118:2;21116:1;:4;21109:11;21040:82;;-1:-1:-1;21152:4:0;20882:284;-1:-1:-1;;;20882:284:0:o;28274:860::-;28376:16;;:41;;-1:-1:-1;;;28376:41:0;;;;;31746:25:1;;;-1:-1:-1;;;;;31807:32:1;;;31787:18;;;31780:60;28376:16:0;;;;:24;;31719:18:1;;28376:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28549:6;28557:1;28549:9;;;28545:201;;28571:16;;28603;;;;;;;;;;;-1:-1:-1;;;28603:16:0;;;;;;;;28620:42;;;;;;;;;;;;;;;;;;28571:92;;-1:-1:-1;;;28571:92:0;;-1:-1:-1;;;;;28571:16:0;;;;:24;;:92;;28596:6;;28603:16;;28620:42;28571:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28545:201;26391:14;;-1:-1:-1;;;;;26391:14:0;28756:371;;28783:4;;;;;;;;;-1:-1:-1;;;;;28783:4:0;-1:-1:-1;;;;;28783:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;-1:-1:-1;;;28783:36:0;;;;;31746:25:1;;;-1:-1:-1;;;;;31807:32:1;;;31787:18;;;31780:60;28783:19:0;;;;;;;31719:18:1;;28783:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28756:371;;;28865:8;;28861:257;;28899:18;;;;;;;;;-1:-1:-1;;;;;28899:18:0;-1:-1:-1;;;;;28899:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28888:60:0;;28949:6;28956:27;28976:6;28956:19;:27::i;:::-;28984:6;28991:1;28993;28888:107;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28861:257;;;29070:36;29099:6;29070:28;:36::i;:::-;28274:860;;;;:::o;21178:580::-;21299:13;;;21309:2;21299:13;;;;;;;;;21255;;21279:17;;21299:13;;;;;;;;;;;-1:-1:-1;21299:13:0;21279:33;;21321:7;21341:9;21371:178;21398:2;21401:1;21398:5;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;21398:8:0;;21394:111;;21432:2;21435:1;21432:5;;;;;;;;;:::i;:::-;;;;21422:4;21427:1;21422:7;;;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;21422:15:0;;;;;;;;;21394:111;;;-1:-1:-1;21492:1:0;21394:111;21515:3;;;;:::i;:::-;;-1:-1:-1;;21535:6:0;;;;:12;;;;;21545:2;21543:1;:4;;;21535:12;21371:178;;21569:1;21565:5;;21579:8;21590:12;21597:4;21590:6;:12::i;:::-;21579:23;;21619:95;21662:4;21668:1;21656:14;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;21656:14:0;21642:4;21647:5;21651:1;21647:3;:5;:::i;:::-;21642:11;;;;;;;;;;:::i;:::-;;;;:28;-1:-1:-1;;;;;21642:28:0;;;;;;;;-1:-1:-1;21681:3:0;;;;:::i;:::-;;;;21703;21701:1;:5;;;:11;;;;;21710:2;21708:1;:4;;;21701:11;21619:95;;-1:-1:-1;21744:4:0;;21178:580;-1:-1:-1;;;;;21178:580:0:o;23304:480::-;23387:12;23412:43;23439:4;:11;23432:3;23423:6;:12;;;;:::i;:::-;:27;;23412:43;;;;;;;;;;;;;-1:-1:-1;;;23412:43:0;;;:10;:43::i;:::-;23468:16;23497:3;-1:-1:-1;;;;;23487:14:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23487:14:0;-1:-1:-1;23468:33:0;-1:-1:-1;23659:2:0;23650:12;;;;23684:26;;;;23731:22;23650:12;23684:26;23749:3;23731:6;:22::i;:::-;-1:-1:-1;23773:3:0;;23304:480;-1:-1:-1;;;;;23304:480:0:o;25013:163::-;25129:4;;:15;;;-1:-1:-1;;;25129:15:0;;;;25077:7;;-1:-1:-1;;;;;25129:4:0;;:13;;:15;;;;;;;;;;;;;;:4;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25162:2;25146:20;;;;;;25112:55;;;;;;;;32934:19:1;;;32978:2;32969:12;;32962:28;33015:2;33006:12;;32777:247;25112:55:0;;;;;;;;;;;;;25102:66;;;;;;25095:73;;25013:163;;;:::o;20241:629::-;20372:15;;20297:4;;;;;;20398:444;20415:10;20411:1;:14;20398:444;;;20449:8;20466:1;20469;20460:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;20460:11:0;;-1:-1:-1;;;;20489:8:0;;20486:345;;;20518:6;20523:1;20518:6;;:::i;:::-;;;20486:345;;;-1:-1:-1;;;;;;;;;20550:8:0;;;20546:285;;;20579:6;20584:1;20579:6;;:::i;20546:285::-;-1:-1:-1;;;;;;;;;20611:8:0;;;20607:224;;;20640:6;20645:1;20640:6;;:::i;20607:224::-;-1:-1:-1;;;;;;;;;20672:8:0;;;20668:163;;;20701:6;20706:1;20701:6;;:::i;20668:163::-;-1:-1:-1;;;;;;;;;20733:8:0;;;20729:102;;;20762:6;20767:1;20762:6;;:::i;20729:102::-;20809:6;20814:1;20809:6;;:::i;:::-;;;20729:102;-1:-1:-1;20427:5:0;;;;:::i;:::-;;;;20398:444;;;-1:-1:-1;20859:3:0;;20241:629;-1:-1:-1;;;20241:629:0:o;19692:265::-;19753:16;-1:-1:-1;;;;;19810:9:0;;19839;19836:12;;19832:57;;19874:1;-1:-1:-1;;;;;19857:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19857:32:0;;;;;;;;;;;;:::i;19832:57::-;-1:-1:-1;19906:22:0;;19692:265;-1:-1:-1;;19692:265:0:o;26601:315::-;26683:18;;;;;;;;;-1:-1:-1;;;;;26683:18:0;-1:-1:-1;;;;;26683:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26672:75;;-1:-1:-1;;;26672:75:0;;-1:-1:-1;;;;;34176:32:1;;;26672:75:0;;;34158:51:1;26742:4:0;34225:18:1;;;34218:50;26672:62:0;;;;;;;34131:18:1;;26672:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26793:16:0;;:47;;-1:-1:-1;;;26793:47:0;;-1:-1:-1;;;;;34176:32:1;;;26793:47:0;;;34158:51:1;26793:16:0;34225:18:1;;;34218:50;26793:16:0;;;;-1:-1:-1;26793:34:0;;-1:-1:-1;34131:18:1;;26793:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22547:749;22683:2;22676:3;:9;22669:240;;22823:10;;22810:24;;22863:10;22871:2;22817:4;22863:10;:::i;:::-;;-1:-1:-1;22888:9:0;22895:2;22888:9;;:::i;:::-;;-1:-1:-1;22687:9:0;22694:2;22687:9;;:::i;:::-;;;22669:240;;;22933:3;22938:1;22933:6;22929:19;;22547:749;;;:::o;22929:19::-;22993:9;23025:1;23013:8;23018:3;23013:2;:8;:::i;:::-;23005:17;;:3;:17;:::i;:::-;:21;;;;:::i;:::-;23155:10;;23211:11;;23207:22;;23167:9;;23151:26;23256:21;;;;23243:35;;;-1:-1:-1;;22547:749:0:o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;293:367:1:-;356:8;366:6;420:3;413:4;405:6;401:17;397:27;387:55;;438:1;435;428:12;387:55;-1:-1:-1;461:20:1;;-1:-1:-1;;;;;493:30:1;;490:50;;;536:1;533;526:12;490:50;573:4;565:6;561:17;549:29;;633:3;626:4;616:6;613:1;609:14;601:6;597:27;593:38;590:47;587:67;;;650:1;647;640:12;587:67;293:367;;;;;:::o;665:437::-;751:6;759;812:2;800:9;791:7;787:23;783:32;780:52;;;828:1;825;818:12;780:52;868:9;855:23;-1:-1:-1;;;;;893:6:1;890:30;887:50;;;933:1;930;923:12;887:50;972:70;1034:7;1025:6;1014:9;1010:22;972:70;:::i;:::-;1061:8;;946:96;;-1:-1:-1;665:437:1;-1:-1:-1;;;;665:437:1:o;1107:347::-;1158:8;1168:6;1222:3;1215:4;1207:6;1203:17;1199:27;1189:55;;1240:1;1237;1230:12;1189:55;-1:-1:-1;1263:20:1;;-1:-1:-1;;;;;1295:30:1;;1292:50;;;1338:1;1335;1328:12;1292:50;1375:4;1367:6;1363:17;1351:29;;1427:3;1420:4;1411:6;1403;1399:19;1395:30;1392:39;1389:59;;;1444:1;1441;1434:12;1459:545;1547:6;1555;1563;1571;1624:2;1612:9;1603:7;1599:23;1595:32;1592:52;;;1640:1;1637;1630:12;1592:52;1676:9;1663:23;1653:33;;1733:2;1722:9;1718:18;1705:32;1695:42;;1788:2;1777:9;1773:18;1760:32;-1:-1:-1;;;;;1807:6:1;1804:30;1801:50;;;1847:1;1844;1837:12;1801:50;1886:58;1936:7;1927:6;1916:9;1912:22;1886:58;:::i;:::-;1459:545;;;;-1:-1:-1;1963:8:1;-1:-1:-1;;;;1459:545:1:o;2009:127::-;2070:10;2065:3;2061:20;2058:1;2051:31;2101:4;2098:1;2091:15;2125:4;2122:1;2115:15;2141:275;2212:2;2206:9;2277:2;2258:13;;-1:-1:-1;;2254:27:1;2242:40;;-1:-1:-1;;;;;2297:34:1;;2333:22;;;2294:62;2291:88;;;2359:18;;:::i;:::-;2395:2;2388:22;2141:275;;-1:-1:-1;2141:275:1:o;2421:186::-;2469:4;-1:-1:-1;;;;;2494:6:1;2491:30;2488:56;;;2524:18;;:::i;:::-;-1:-1:-1;2590:2:1;2569:15;-1:-1:-1;;2565:29:1;2596:4;2561:40;;2421:186::o;2612:336::-;2676:5;2705:52;2721:35;2749:6;2721:35;:::i;:::-;2705:52;:::i;:::-;2696:61;;2780:6;2773:5;2766:21;2820:3;2811:6;2806:3;2802:16;2799:25;2796:45;;;2837:1;2834;2827:12;2796:45;2886:6;2881:3;2874:4;2867:5;2863:16;2850:43;2940:1;2933:4;2924:6;2917:5;2913:18;2909:29;2902:40;2612:336;;;;;:::o;2953:517::-;3030:6;3038;3091:2;3079:9;3070:7;3066:23;3062:32;3059:52;;;3107:1;3104;3097:12;3059:52;3143:9;3130:23;3120:33;;3204:2;3193:9;3189:18;3176:32;-1:-1:-1;;;;;3223:6:1;3220:30;3217:50;;;3263:1;3260;3253:12;3217:50;3286:22;;3339:4;3331:13;;3327:27;-1:-1:-1;3317:55:1;;3368:1;3365;3358:12;3317:55;3391:73;3456:7;3451:2;3438:16;3433:2;3429;3425:11;3391:73;:::i;:::-;3381:83;;;2953:517;;;;;:::o;3475:477::-;3554:6;3562;3570;3623:2;3611:9;3602:7;3598:23;3594:32;3591:52;;;3639:1;3636;3629:12;3591:52;3675:9;3662:23;3652:33;;3736:2;3725:9;3721:18;3708:32;-1:-1:-1;;;;;3755:6:1;3752:30;3749:50;;;3795:1;3792;3785:12;3749:50;3834:58;3884:7;3875:6;3864:9;3860:22;3834:58;:::i;:::-;3475:477;;3911:8;;-1:-1:-1;3808:84:1;;-1:-1:-1;;;;3475:477:1:o;3957:745::-;4063:6;4071;4079;4087;4140:2;4128:9;4119:7;4115:23;4111:32;4108:52;;;4156:1;4153;4146:12;4108:52;4196:9;4183:23;-1:-1:-1;;;;;4266:2:1;4258:6;4255:14;4252:34;;;4282:1;4279;4272:12;4252:34;4321:70;4383:7;4374:6;4363:9;4359:22;4321:70;:::i;:::-;4410:8;;-1:-1:-1;4295:96:1;-1:-1:-1;4498:2:1;4483:18;;4470:32;;-1:-1:-1;4514:16:1;;;4511:36;;;4543:1;4540;4533:12;4511:36;;4582:60;4634:7;4623:8;4612:9;4608:24;4582:60;:::i;4707:183::-;4767:4;-1:-1:-1;;;;;4792:6:1;4789:30;4786:56;;;4822:18;;:::i;:::-;-1:-1:-1;4867:1:1;4863:14;4879:4;4859:25;;4707:183::o;4895:891::-;4979:6;5010:2;5053;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5109:9;5096:23;-1:-1:-1;;;;;5134:6:1;5131:30;5128:50;;;5174:1;5171;5164:12;5128:50;5197:22;;5250:4;5242:13;;5238:27;-1:-1:-1;5228:55:1;;5279:1;5276;5269:12;5228:55;5315:2;5302:16;5338:60;5354:43;5394:2;5354:43;:::i;5338:60::-;5432:15;;;5514:1;5510:10;;;;5502:19;;5498:28;;;5463:12;;;;5538:19;;;5535:39;;;5570:1;5567;5560:12;5535:39;5594:11;;;;5614:142;5630:6;5625:3;5622:15;5614:142;;;5696:17;;5684:30;;5647:12;;;;5734;;;;5614:142;;;5775:5;4895:891;-1:-1:-1;;;;;;;4895:891:1:o;5791:1060::-;5933:6;5941;5949;5957;5965;5973;6026:2;6014:9;6005:7;6001:23;5997:32;5994:52;;;6042:1;6039;6032:12;5994:52;6082:9;6069:23;-1:-1:-1;;;;;6152:2:1;6144:6;6141:14;6138:34;;;6168:1;6165;6158:12;6138:34;6207:70;6269:7;6260:6;6249:9;6245:22;6207:70;:::i;:::-;6296:8;;-1:-1:-1;6181:96:1;-1:-1:-1;6384:2:1;6369:18;;6356:32;;-1:-1:-1;6400:16:1;;;6397:36;;;6429:1;6426;6419:12;6397:36;6468:60;6520:7;6509:8;6498:9;6494:24;6468:60;:::i;:::-;6547:8;;-1:-1:-1;6442:86:1;-1:-1:-1;6635:2:1;6620:18;;6607:32;;-1:-1:-1;6651:16:1;;;6648:36;;;6680:1;6677;6670:12;6648:36;;6719:72;6783:7;6772:8;6761:9;6757:24;6719:72;:::i;:::-;5791:1060;;;;-1:-1:-1;5791:1060:1;;-1:-1:-1;5791:1060:1;;6810:8;;5791:1060;-1:-1:-1;;;5791:1060:1:o;7092:316::-;7169:6;7177;7185;7238:2;7226:9;7217:7;7213:23;7209:32;7206:52;;;7254:1;7251;7244:12;7206:52;-1:-1:-1;;7277:23:1;;;7347:2;7332:18;;7319:32;;-1:-1:-1;7398:2:1;7383:18;;;7370:32;;7092:316;-1:-1:-1;7092:316:1:o;7413:478::-;7493:6;7501;7509;7562:2;7550:9;7541:7;7537:23;7533:32;7530:52;;;7578:1;7575;7568:12;7530:52;7618:9;7605:23;-1:-1:-1;;;;;7643:6:1;7640:30;7637:50;;;7683:1;7680;7673:12;7637:50;7722:58;7772:7;7763:6;7752:9;7748:22;7722:58;:::i;:::-;7799:8;;7696:84;;-1:-1:-1;7881:2:1;7866:18;;;;7853:32;;7413:478;-1:-1:-1;;;;7413:478:1:o;7896:250::-;7981:1;7991:113;8005:6;8002:1;7999:13;7991:113;;;8081:11;;;8075:18;8062:11;;;8055:39;8027:2;8020:10;7991:113;;;-1:-1:-1;;8138:1:1;8120:16;;8113:27;7896:250::o;8151:270::-;8192:3;8230:5;8224:12;8257:6;8252:3;8245:19;8273:76;8342:6;8335:4;8330:3;8326:14;8319:4;8312:5;8308:16;8273:76;:::i;:::-;8403:2;8382:15;-1:-1:-1;;8378:29:1;8369:39;;;;8410:4;8365:50;;8151:270;-1:-1:-1;;8151:270:1:o;8426:569::-;8667:25;;;-1:-1:-1;;;;;8766:15:1;;;8761:2;8746:18;;8739:43;8818:15;;;8813:2;8798:18;;8791:43;8870:15;;8865:2;8850:18;;8843:43;8719:3;8917;8902:19;;8895:32;;;8648:4;;8944:45;;8969:19;;8961:6;8944:45;:::i;9208:131::-;-1:-1:-1;;;;;9283:31:1;;9273:42;;9263:70;;9329:1;9326;9319:12;9263:70;9208:131;:::o;9344:315::-;9412:6;9420;9473:2;9461:9;9452:7;9448:23;9444:32;9441:52;;;9489:1;9486;9479:12;9441:52;9525:9;9512:23;9502:33;;9585:2;9574:9;9570:18;9557:32;9598:31;9623:5;9598:31;:::i;:::-;9648:5;9638:15;;;9344:315;;;;;:::o;9664:219::-;9813:2;9802:9;9795:21;9776:4;9833:44;9873:2;9862:9;9858:18;9850:6;9833:44;:::i;9888:180::-;9947:6;10000:2;9988:9;9979:7;9975:23;9971:32;9968:52;;;10016:1;10013;10006:12;9968:52;-1:-1:-1;10039:23:1;;9888:180;-1:-1:-1;9888:180:1:o;10304:248::-;10372:6;10380;10433:2;10421:9;10412:7;10408:23;10404:32;10401:52;;;10449:1;10446;10439:12;10401:52;-1:-1:-1;;10472:23:1;;;10542:2;10527:18;;;10514:32;;-1:-1:-1;10304:248:1:o;11968:658::-;12139:2;12191:21;;;12261:13;;12164:18;;;12283:22;;;12110:4;;12139:2;12362:15;;;;12336:2;12321:18;;;12110:4;12405:195;12419:6;12416:1;12413:13;12405:195;;;12484:13;;-1:-1:-1;;;;;12480:39:1;12468:52;;12575:15;;;;12540:12;;;;12516:1;12434:9;12405:195;;;-1:-1:-1;12617:3:1;;11968:658;-1:-1:-1;;;;;;11968:658:1:o;12871:724::-;12976:6;12984;12992;13000;13008;13061:3;13049:9;13040:7;13036:23;13032:33;13029:53;;;13078:1;13075;13068:12;13029:53;13114:9;13101:23;13091:33;;13171:2;13160:9;13156:18;13143:32;13133:42;;13226:2;13215:9;13211:18;13198:32;-1:-1:-1;;;;;13245:6:1;13242:30;13239:50;;;13285:1;13282;13275:12;13239:50;13308:22;;13361:4;13353:13;;13349:27;-1:-1:-1;13339:55:1;;13390:1;13387;13380:12;13339:55;13413:73;13478:7;13473:2;13460:16;13455:2;13451;13447:11;13413:73;:::i;:::-;12871:724;;;;-1:-1:-1;13403:83:1;;13533:2;13518:18;;13505:32;;-1:-1:-1;13584:3:1;13569:19;13556:33;;12871:724;-1:-1:-1;;;12871:724:1:o;13600:823::-;13706:6;13714;13722;13730;13738;13746;13799:3;13787:9;13778:7;13774:23;13770:33;13767:53;;;13816:1;13813;13806:12;13767:53;13855:9;13842:23;13874:31;13899:5;13874:31;:::i;:::-;13924:5;-1:-1:-1;13981:2:1;13966:18;;13953:32;13994:33;13953:32;13994:33;:::i;:::-;14046:7;-1:-1:-1;14100:2:1;14085:18;;14072:32;;-1:-1:-1;14151:2:1;14136:18;;14123:32;;-1:-1:-1;14206:3:1;14191:19;;14178:33;-1:-1:-1;;;;;14223:30:1;;14220:50;;;14266:1;14263;14256:12;14220:50;14305:58;14355:7;14346:6;14335:9;14331:22;14305:58;:::i;14635:127::-;14696:10;14691:3;14687:20;14684:1;14677:31;14727:4;14724:1;14717:15;14751:4;14748:1;14741:15;14767:271;14950:6;14942;14937:3;14924:33;14906:3;14976:16;;15001:13;;;14976:16;14767:271;-1:-1:-1;14767:271:1:o;15225:127::-;15286:10;15281:3;15277:20;15274:1;15267:31;15317:4;15314:1;15307:15;15341:4;15338:1;15331:15;15357:125;15422:9;;;15443:10;;;15440:36;;;15456:18;;:::i;15487:128::-;15554:9;;;15575:11;;;15572:37;;;15589:18;;:::i;15620:168::-;15693:9;;;15724;;15741:15;;;15735:22;;15721:37;15711:71;;15762:18;;:::i;15793:127::-;15854:10;15849:3;15845:20;15842:1;15835:31;15885:4;15882:1;15875:15;15909:4;15906:1;15899:15;15925:120;15965:1;15991;15981:35;;15996:18;;:::i;:::-;-1:-1:-1;16030:9:1;;15925:120::o;16050:383::-;16207:3;16245:6;16239:13;16261:66;16320:6;16315:3;16308:4;16300:6;16296:17;16261:66;:::i;:::-;16349:16;;;;16374:21;;;-1:-1:-1;16422:4:1;16411:16;;16050:383;-1:-1:-1;16050:383:1:o;16438:262::-;16519:6;16572:2;16560:9;16551:7;16547:23;16543:32;16540:52;;;16588:1;16585;16578:12;16540:52;16620:9;16614:16;16639:31;16664:5;16639:31;:::i;17252:452::-;17477:6;17466:9;17459:25;17520:2;17515;17504:9;17500:18;17493:30;17440:4;17546:44;17586:2;17575:9;17571:18;17563:6;17546:44;:::i;:::-;17638:9;17630:6;17626:22;17621:2;17610:9;17606:18;17599:50;17666:32;17691:6;17683;17666:32;:::i;:::-;17658:40;17252:452;-1:-1:-1;;;;;;17252:452:1:o;17709:135::-;17748:3;17769:17;;;17766:43;;17789:18;;:::i;:::-;-1:-1:-1;17836:1:1;17825:13;;17709:135::o;17849:642::-;18148:6;18143:3;18136:19;18185:6;18180:2;18175:3;18171:12;18164:28;18222:6;18217:2;18212:3;18208:12;18201:28;18259:6;18254:2;18249:3;18245:12;18238:28;18118:3;18295:6;18289:13;18311:74;18378:6;18372:3;18367;18363:13;18358:2;18350:6;18346:15;18311:74;:::i;:::-;18444:3;18404:16;;18436:12;;;18429:28;;;;18481:3;18473:12;;17849:642;-1:-1:-1;;;;;;17849:642:1:o;18496:369::-;18709:6;18698:9;18691:25;18752:6;18747:2;18736:9;18732:18;18725:34;18795:2;18790;18779:9;18775:18;18768:30;18672:4;18815:44;18855:2;18844:9;18840:18;18832:6;18815:44;:::i;:::-;18807:52;18496:369;-1:-1:-1;;;;;18496:369:1:o;18870:453::-;19074:4;19120:1;19116;19111:3;19107:11;19103:19;19161:2;19153:6;19149:15;19138:9;19131:34;19201:2;19196;19185:9;19181:18;19174:30;19221:44;19261:2;19250:9;19246:18;19238:6;19221:44;:::i;:::-;19213:52;;19313:2;19305:6;19301:15;19296:2;19285:9;19281:18;19274:43;;18870:453;;;;;;:::o;19568:632::-;19739:2;19791:21;;;19861:13;;19764:18;;;19883:22;;;19710:4;;19739:2;19962:15;;;;19936:2;19921:18;;;19710:4;20005:169;20019:6;20016:1;20013:13;20005:169;;;20080:13;;20068:26;;20149:15;;;;20114:12;;;;20041:1;20034:9;20005:169;;20205:180;-1:-1:-1;;;;;20310:10:1;;;20322;;;20306:27;;20345:11;;;20342:37;;;20359:18;;:::i;:::-;20342:37;20205:180;;;;:::o;20624:311::-;20712:19;;;20694:3;-1:-1:-1;;;;;20743:31:1;;20740:51;;;20787:1;20784;20777:12;20740:51;20823:6;20820:1;20816:14;20875:8;20868:5;20861:4;20856:3;20852:14;20839:45;20904:18;;;;20924:4;20900:29;;20624:311;-1:-1:-1;;;20624:311:1:o;20940:266::-;21028:6;21023:3;21016:19;21080:6;21073:5;21066:4;21061:3;21057:14;21044:43;-1:-1:-1;21132:1:1;21107:16;;;21125:4;21103:27;;;21096:38;;;;21188:2;21167:15;;;-1:-1:-1;;21163:29:1;21154:39;;;21150:50;;20940:266::o;21211:475::-;21456:2;21445:9;21438:21;21419:4;21482:73;21551:2;21540:9;21536:18;21528:6;21520;21482:73;:::i;:::-;21603:9;21595:6;21591:22;21586:2;21575:9;21571:18;21564:50;21631:49;21673:6;21665;21657;21631:49;:::i;21691:315::-;21876:6;21865:9;21858:25;21919:2;21914;21903:9;21899:18;21892:30;21839:4;21939:61;21996:2;21985:9;21981:18;21973:6;21965;21939:61;:::i;22011:288::-;22200:2;22189:9;22182:21;22163:4;22220:73;22289:2;22278:9;22274:18;22266:6;22258;22220:73;:::i;:::-;22212:81;22011:288;-1:-1:-1;;;;22011:288:1:o;22304:184::-;22374:6;22427:2;22415:9;22406:7;22402:23;22398:32;22395:52;;;22443:1;22440;22433:12;22395:52;-1:-1:-1;22466:16:1;;22304:184;-1:-1:-1;22304:184:1:o;22749:277::-;22816:6;22869:2;22857:9;22848:7;22844:23;22840:32;22837:52;;;22885:1;22882;22875:12;22837:52;22917:9;22911:16;22970:5;22963:13;22956:21;22949:5;22946:32;22936:60;;22992:1;22989;22982:12;23447:321;23523:5;23552:52;23568:35;23596:6;23568:35;:::i;23552:52::-;23543:61;;23627:6;23620:5;23613:21;23667:3;23658:6;23653:3;23649:16;23646:25;23643:45;;;23684:1;23681;23674:12;23643:45;23697:65;23755:6;23748:4;23741:5;23737:16;23732:3;23697:65;:::i;23773:459::-;23853:6;23906:2;23894:9;23885:7;23881:23;23877:32;23874:52;;;23922:1;23919;23912:12;23874:52;23955:9;23949:16;-1:-1:-1;;;;;23980:6:1;23977:30;23974:50;;;24020:1;24017;24010:12;23974:50;24043:22;;24096:4;24088:13;;24084:27;-1:-1:-1;24074:55:1;;24125:1;24122;24115:12;24074:55;24148:78;24218:7;24213:2;24207:9;24202:2;24198;24194:11;24148:78;:::i;24237:246::-;24396:2;24385:9;24378:21;24359:4;24416:61;24473:2;24462:9;24458:18;24450:6;24442;24416:61;:::i;24751:519::-;24839:6;24847;24900:2;24888:9;24879:7;24875:23;24871:32;24868:52;;;24916:1;24913;24906:12;24868:52;24945:9;24939:16;24929:26;;24999:2;24988:9;24984:18;24978:25;-1:-1:-1;;;;;25018:6:1;25015:30;25012:50;;;25058:1;25055;25048:12;25012:50;25081:22;;25134:4;25126:13;;25122:27;-1:-1:-1;25112:55:1;;25163:1;25160;25153:12;25112:55;25186:78;25256:7;25251:2;25245:9;25240:2;25236;25232:11;25186:78;:::i;25275:112::-;25307:1;25333;25323:35;;25338:18;;:::i;:::-;-1:-1:-1;25372:9:1;;25275:112::o;27017:1457::-;27393:4;27422:3;27452:2;27441:9;27434:21;27478:44;27518:2;27507:9;27503:18;27495:6;27478:44;:::i;:::-;27464:58;;27541:2;27579:1;27575;27570:3;27566:11;27562:19;27629:2;27621:6;27617:15;27612:2;27601:9;27597:18;27590:43;27669:6;27664:2;27653:9;27649:18;27642:34;27712:6;27707:2;27696:9;27692:18;27685:34;27768:2;27760:6;27756:15;27750:3;27739:9;27735:19;27728:44;;27821:9;27813:6;27809:22;27803:3;27792:9;27788:19;27781:51;27852:6;27887;27881:13;27918:6;27910;27903:22;27953:2;27945:6;27941:15;27934:22;;28012:2;28002:6;27999:1;27995:14;27987:6;27983:27;27979:36;28050:2;28042:6;28038:15;28071:1;28081:251;28095:6;28092:1;28089:13;28081:251;;;28185:2;28181:7;28172:6;28164;28160:19;28156:33;28151:3;28144:46;28213:39;28245:6;28236;28230:13;28213:39;:::i;:::-;28310:12;;;;28203:49;-1:-1:-1;28275:15:1;;;;28117:1;28110:9;28081:251;;;-1:-1:-1;;11750:13:1;;11743:21;28403:3;28388:19;;11731:34;28349:6;-1:-1:-1;28364:44:1;;-1:-1:-1;;;;11680:91:1;28364:44;27004:4;26993:16;;28463:3;28448:19;;26981:29;27017:1457;;;;;;;;;;;:::o;28479:287::-;28608:3;28646:6;28640:13;28662:66;28721:6;28716:3;28709:4;28701:6;28697:17;28662:66;:::i;:::-;28744:16;;;;;28479:287;-1:-1:-1;;28479:287:1:o;28771:643::-;29060:3;29049:9;29042:22;29023:4;29081:45;29121:3;29110:9;29106:19;29098:6;29081:45;:::i;:::-;-1:-1:-1;;;;;29200:15:1;;;29195:2;29180:18;;29173:43;29247:2;29232:18;;29225:34;;;;-1:-1:-1;29290:2:1;29275:18;;29268:34;;;;29339:15;;;29333:3;29318:19;;29311:44;29392:15;;;29153:3;29371:19;;;29364:44;;;;29225:34;29073:53;-1:-1:-1;28771:643:1:o;29419:496::-;29598:3;29636:6;29630:13;29652:66;29711:6;29706:3;29699:4;29691:6;29687:17;29652:66;:::i;:::-;29781:13;;29740:16;;;;29803:70;29781:13;29740:16;29850:4;29838:17;;29803:70;:::i;:::-;29889:20;;29419:496;-1:-1:-1;;;;29419:496:1:o;29920:290::-;30097:6;30086:9;30079:25;30140:2;30135;30124:9;30120:18;30113:30;30060:4;30160:44;30200:2;30189:9;30185:18;30177:6;30160:44;:::i;30588:790::-;30917:6;30906:9;30899:25;30960:3;30955:2;30944:9;30940:18;30933:31;30880:4;30981:45;31021:3;31010:9;31006:19;30998:6;30981:45;:::i;:::-;-1:-1:-1;;;;;31100:15:1;;;31095:2;31080:18;;31073:43;31152:15;;;;31147:2;31132:18;;31125:43;-1:-1:-1;;;;;31242:15:1;;;31236:3;31221:19;;31214:44;31307:10;31295:23;;;;31053:3;31274:19;;31267:52;31356:15;;;31350:3;31335:19;;;31328:44;30973:53;30588:790;-1:-1:-1;;;30588:790:1:o;31851:588::-;32126:6;32115:9;32108:25;32169:3;32164:2;32153:9;32149:18;32142:31;32089:4;32190:45;32230:3;32219:9;32215:19;32207:6;32190:45;:::i;:::-;-1:-1:-1;;;;;32271:32:1;;;;32266:2;32251:18;;32244:60;-1:-1:-1;32352:10:1;32340:23;;;;32335:2;32320:18;;32313:51;-1:-1:-1;;;;;32401:31:1;32395:3;32380:19;;;32373:60;32182:53;31851:588;-1:-1:-1;;31851:588:1:o;32444:175::-;32481:3;32525:4;32518:5;32514:16;32554:4;32545:7;32542:17;32539:43;;32562:18;;:::i;:::-;32611:1;32598:15;;32444:175;-1:-1:-1;;32444:175:1:o;32624:148::-;32712:4;32691:12;;;32705;;;32687:31;;32730:13;;32727:39;;;32746:18;;:::i;33029:956::-;33124:6;33155:2;33198;33186:9;33177:7;33173:23;33169:32;33166:52;;;33214:1;33211;33204:12;33166:52;33247:9;33241:16;-1:-1:-1;;;;;33272:6:1;33269:30;33266:50;;;33312:1;33309;33302:12;33266:50;33335:22;;33388:4;33380:13;;33376:27;-1:-1:-1;33366:55:1;;33417:1;33414;33407:12;33366:55;33446:2;33440:9;33469:60;33485:43;33525:2;33485:43;:::i;33469:60::-;33563:15;;;33645:1;33641:10;;;;33633:19;;33629:28;;;33594:12;;;;33669:19;;;33666:39;;;33701:1;33698;33691:12;33666:39;33725:11;;;;33745:210;33761:6;33756:3;33753:15;33745:210;;;33834:3;33828:10;33851:31;33876:5;33851:31;:::i;:::-;33895:18;;33778:12;;;;33933;;;;33745:210;;34279:422;34368:1;34411:5;34368:1;34425:270;34446:7;34436:8;34433:21;34425:270;;;34505:4;34501:1;34497:6;34493:17;34487:4;34484:27;34481:53;;;34514:18;;:::i;:::-;34564:7;34554:8;34550:22;34547:55;;;34584:16;;;;34547:55;34663:22;;;;34623:15;;;;34425:270;;;34429:3;34279:422;;;;;:::o;34706:806::-;34755:5;34785:8;34775:80;;-1:-1:-1;34826:1:1;34840:5;;34775:80;34874:4;34864:76;;-1:-1:-1;34911:1:1;34925:5;;34864:76;34956:4;34974:1;34969:59;;;;35042:1;35037:130;;;;34949:218;;34969:59;34999:1;34990:10;;35013:5;;;35037:130;35074:3;35064:8;35061:17;35058:43;;;35081:18;;:::i;:::-;-1:-1:-1;;35137:1:1;35123:16;;35152:5;;34949:218;;35251:2;35241:8;35238:16;35232:3;35226:4;35223:13;35219:36;35213:2;35203:8;35200:16;35195:2;35189:4;35186:12;35182:35;35179:77;35176:159;;;-1:-1:-1;35288:19:1;;;35320:5;;35176:159;35367:34;35392:8;35386:4;35367:34;:::i;:::-;35437:6;35433:1;35429:6;35425:19;35416:7;35413:32;35410:58;;;35448:18;;:::i;:::-;35486:20;;34706:806;-1:-1:-1;;;34706:806:1:o;35517:131::-;35577:5;35606:36;35633:8;35627:4;35606:36;:::i

Swarm Source

ipfs://e032d793cae8095445ac2d47f1919ae2109157c4009178f7a28f5a5805562d26

Block Transaction Gas Used Reward
view all blocks collator

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.