code: public static final ParseResult parseParams(Object[] params) {
  		Tree data = null;
  		CallOptions.Options opts = null;
  		Groups groups = null;
  		PacketStream stream = null;
  		if (params != null) {
  			if (params.length == 1) {
  				if (params[0] instanceof Tree) {
  					data = (Tree) params[0];
  				} else if (params[0] instanceof CallOptions.Options) {
  					opts = (CallOptions.Options) params[0];
  				} else if (params[0] instanceof Groups) {
  					groups = (Groups) params[0];
  				} else if (params[0] instanceof PacketStream) {
  					data = new Tree();
  					stream = (PacketStream) params[0];
  				} else {
  					data = new CheckedTree(params[0]);
  				}
  			} else {
  				LinkedHashMap<String, Object> map = new LinkedHashMap<>();
  				String prev = null;
  				Object value;
  				for (int i = 0; i < params.length; i++) {
  					value = params[i];
  					if (prev == null) {
  						if (!(value instanceof String)) {
  							if (value instanceof CallOptions.Options) {
  								opts = (CallOptions.Options) value;
  								continue;
  							}
  							if (value instanceof Groups) {
  								groups = (Groups) value;
  								continue;
  							}
  							if (value instanceof PacketStream) {
  								stream = (PacketStream) value;
  								continue;
  							}
  							i++;
  							throw new IllegalArgumentException("Parameter #" + i + " (\"" + value
  									+ "\") must be String, Context, Groups, PacketStream or CallOptions!");
  						}
  						prev = (String) value;
  						continue;
  					}
  					map.put(prev, value);
  					prev = null;
  				}
  				data = new Tree(map);
  			}
  		}
  		return new ParseResult(data, opts, groups, stream);
  	}
docs: --- PARSE CALL / BROADCAST PARAMS ---