code: def get_distributable(
          sender: NettingChannelEndState,
          receiver: NettingChannelEndState,
  ) -> TokenAmount:
      
      _, _, transferred_amount, locked_amount = get_current_balanceproof(sender)
  
      distributable = get_balance(sender, receiver) - get_amount_locked(sender)
  
      overflow_limit = max(
          UINT256_MAX - transferred_amount - locked_amount,
          0,
      )
  
      return TokenAmount(min(overflow_limit, distributable))
docs: Return the amount of tokens that can be used by the `sender`.
  
      The returned value is limited to a UINT256, since that is the representation
      used in the smart contracts and we cannot use a larger value. The limit is
      enforced on transferred_amount + locked_amount to avoid overflows. This is
      an additional security check.