package  tg 
 
import  ( 
	"context"  
	"errors"  
	"fmt"  
	"sort"  
	"strings"  
 
	"go.uber.org/multierr"  
 
	"github.com/gotd/td/bin"  
	"github.com/gotd/td/tdjson"  
	"github.com/gotd/td/tdp"  
	"github.com/gotd/td/tgerr"  
) 
 
 
var  ( 
	_ = bin .Buffer {} 
	_ = context .Background () 
	_ = fmt .Stringer (nil ) 
	_ = strings .Builder {} 
	_ = errors .Is  
	_ = multierr .AppendInto  
	_ = sort .Ints  
	_ = tdp .Format  
	_ = tgerr .Error {} 
	_ = tdjson .Encoder {} 
) 
 
 
type  InputChannelClassArray  []InputChannelClass  
 
 
func  (s  InputChannelClassArray ) Sort  (less  func (a , b  InputChannelClass ) bool ) InputChannelClassArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelClassArray ) SortStable  (less  func (a , b  InputChannelClass ) bool ) InputChannelClassArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelClassArray ) Retain  (keep  func (x  InputChannelClass ) bool ) InputChannelClassArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputChannelClassArray ) First  () (v  InputChannelClass , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputChannelClassArray ) Last  () (v  InputChannelClass , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputChannelClassArray ) PopFirst  () (v  InputChannelClass , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputChannelClass  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputChannelClassArray ) Pop  () (v  InputChannelClass , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  InputChannelClassArray ) AsInputChannel  () (to  InputChannelArray ) { 
	for  _ , elem  := range  s  { 
		value , ok  := elem .(*InputChannel ) 
		if  !ok  { 
			continue  
		} 
		to  = append (to , *value ) 
	} 
 
	return  to  
} 
 
 
func  (s  InputChannelClassArray ) AsInputChannelFromMessage  () (to  InputChannelFromMessageArray ) { 
	for  _ , elem  := range  s  { 
		value , ok  := elem .(*InputChannelFromMessage ) 
		if  !ok  { 
			continue  
		} 
		to  = append (to , *value ) 
	} 
 
	return  to  
} 
 
 
 
func  (s  InputChannelClassArray ) AppendOnlyNotEmpty  (to  []NotEmptyInputChannel ) []NotEmptyInputChannel  { 
	for  _ , elem  := range  s  { 
		value , ok  := elem .AsNotEmpty () 
		if  !ok  { 
			continue  
		} 
		to  = append (to , value ) 
	} 
 
	return  to  
} 
 
 
func  (s  InputChannelClassArray ) AsNotEmpty  () (to  []NotEmptyInputChannel ) { 
	return  s .AppendOnlyNotEmpty (to ) 
} 
 
 
func  (s  InputChannelClassArray ) FirstAsNotEmpty  () (v  NotEmptyInputChannel , ok  bool ) { 
	value , ok  := s .First () 
	if  !ok  { 
		return  
	} 
	return  value .AsNotEmpty () 
} 
 
 
func  (s  InputChannelClassArray ) LastAsNotEmpty  () (v  NotEmptyInputChannel , ok  bool ) { 
	value , ok  := s .Last () 
	if  !ok  { 
		return  
	} 
	return  value .AsNotEmpty () 
} 
 
 
func  (s  *InputChannelClassArray ) PopFirstAsNotEmpty  () (v  NotEmptyInputChannel , ok  bool ) { 
	value , ok  := s .PopFirst () 
	if  !ok  { 
		return  
	} 
	return  value .AsNotEmpty () 
} 
 
 
func  (s  *InputChannelClassArray ) PopAsNotEmpty  () (v  NotEmptyInputChannel , ok  bool ) { 
	value , ok  := s .Pop () 
	if  !ok  { 
		return  
	} 
	return  value .AsNotEmpty () 
} 
 
 
type  InputChannelArray  []InputChannel  
 
 
func  (s  InputChannelArray ) Sort  (less  func (a , b  InputChannel ) bool ) InputChannelArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelArray ) SortStable  (less  func (a , b  InputChannel ) bool ) InputChannelArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelArray ) Retain  (keep  func (x  InputChannel ) bool ) InputChannelArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputChannelArray ) First  () (v  InputChannel , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputChannelArray ) Last  () (v  InputChannel , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputChannelArray ) PopFirst  () (v  InputChannel , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputChannel  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputChannelArray ) Pop  () (v  InputChannel , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
type  InputChannelFromMessageArray  []InputChannelFromMessage  
 
 
func  (s  InputChannelFromMessageArray ) Sort  (less  func (a , b  InputChannelFromMessage ) bool ) InputChannelFromMessageArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelFromMessageArray ) SortStable  (less  func (a , b  InputChannelFromMessage ) bool ) InputChannelFromMessageArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputChannelFromMessageArray ) Retain  (keep  func (x  InputChannelFromMessage ) bool ) InputChannelFromMessageArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputChannelFromMessageArray ) First  () (v  InputChannelFromMessage , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputChannelFromMessageArray ) Last  () (v  InputChannelFromMessage , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputChannelFromMessageArray ) PopFirst  () (v  InputChannelFromMessage , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputChannelFromMessage  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputChannelFromMessageArray ) Pop  () (v  InputChannelFromMessage , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .