add lib function [ci skip]