xref: /aosp_15_r20/external/bc/gen/lib2.bc (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
1*5a6e8488SAndroid Build Coastguard Worker/*
2*5a6e8488SAndroid Build Coastguard Worker * *****************************************************************************
3*5a6e8488SAndroid Build Coastguard Worker *
4*5a6e8488SAndroid Build Coastguard Worker * SPDX-License-Identifier: BSD-2-Clause
5*5a6e8488SAndroid Build Coastguard Worker *
6*5a6e8488SAndroid Build Coastguard Worker * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
7*5a6e8488SAndroid Build Coastguard Worker *
8*5a6e8488SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
9*5a6e8488SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
10*5a6e8488SAndroid Build Coastguard Worker *
11*5a6e8488SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright notice, this
12*5a6e8488SAndroid Build Coastguard Worker *   list of conditions and the following disclaimer.
13*5a6e8488SAndroid Build Coastguard Worker *
14*5a6e8488SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright notice,
15*5a6e8488SAndroid Build Coastguard Worker *   this list of conditions and the following disclaimer in the documentation
16*5a6e8488SAndroid Build Coastguard Worker *   and/or other materials provided with the distribution.
17*5a6e8488SAndroid Build Coastguard Worker *
18*5a6e8488SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*5a6e8488SAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*5a6e8488SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*5a6e8488SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*5a6e8488SAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*5a6e8488SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*5a6e8488SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*5a6e8488SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*5a6e8488SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*5a6e8488SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*5a6e8488SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE.
29*5a6e8488SAndroid Build Coastguard Worker *
30*5a6e8488SAndroid Build Coastguard Worker * *****************************************************************************
31*5a6e8488SAndroid Build Coastguard Worker *
32*5a6e8488SAndroid Build Coastguard Worker * The second bc math library.
33*5a6e8488SAndroid Build Coastguard Worker *
34*5a6e8488SAndroid Build Coastguard Worker */
35*5a6e8488SAndroid Build Coastguard Worker
36*5a6e8488SAndroid Build Coastguard Workerdefine p(x,y){
37*5a6e8488SAndroid Build Coastguard Worker	auto a,i,s,z
38*5a6e8488SAndroid Build Coastguard Worker	if(y==0)return 1@scale
39*5a6e8488SAndroid Build Coastguard Worker	if(x==0){
40*5a6e8488SAndroid Build Coastguard Worker		if(y>0)return 0
41*5a6e8488SAndroid Build Coastguard Worker		return 1/0
42*5a6e8488SAndroid Build Coastguard Worker	}
43*5a6e8488SAndroid Build Coastguard Worker	a=y$
44*5a6e8488SAndroid Build Coastguard Worker	if(y==a)return(x^a)@scale
45*5a6e8488SAndroid Build Coastguard Worker	z=0
46*5a6e8488SAndroid Build Coastguard Worker	if(x<1){
47*5a6e8488SAndroid Build Coastguard Worker		y=-y
48*5a6e8488SAndroid Build Coastguard Worker		a=-a
49*5a6e8488SAndroid Build Coastguard Worker		z=x
50*5a6e8488SAndroid Build Coastguard Worker		x=1/x
51*5a6e8488SAndroid Build Coastguard Worker	}
52*5a6e8488SAndroid Build Coastguard Worker	if(y<0){
53*5a6e8488SAndroid Build Coastguard Worker		return e(y*l(x))
54*5a6e8488SAndroid Build Coastguard Worker	}
55*5a6e8488SAndroid Build Coastguard Worker	i=x^a
56*5a6e8488SAndroid Build Coastguard Worker	s=scale
57*5a6e8488SAndroid Build Coastguard Worker	scale+=length(i)+5
58*5a6e8488SAndroid Build Coastguard Worker	if(z){
59*5a6e8488SAndroid Build Coastguard Worker		x=1/z
60*5a6e8488SAndroid Build Coastguard Worker		i=x^a
61*5a6e8488SAndroid Build Coastguard Worker	}
62*5a6e8488SAndroid Build Coastguard Worker	i*=e((y-a)*l(x))
63*5a6e8488SAndroid Build Coastguard Worker	scale=s
64*5a6e8488SAndroid Build Coastguard Worker	return i@scale
65*5a6e8488SAndroid Build Coastguard Worker}
66*5a6e8488SAndroid Build Coastguard Workerdefine r(x,p){
67*5a6e8488SAndroid Build Coastguard Worker	auto t,n
68*5a6e8488SAndroid Build Coastguard Worker	if(x==0)return x
69*5a6e8488SAndroid Build Coastguard Worker	p=abs(p)$
70*5a6e8488SAndroid Build Coastguard Worker	n=(x<0)
71*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)
72*5a6e8488SAndroid Build Coastguard Worker	t=x@p
73*5a6e8488SAndroid Build Coastguard Worker	if(p<scale(x)&&x-t>=5>>p+1)t+=1>>p
74*5a6e8488SAndroid Build Coastguard Worker	if(n)t=-t
75*5a6e8488SAndroid Build Coastguard Worker	return t
76*5a6e8488SAndroid Build Coastguard Worker}
77*5a6e8488SAndroid Build Coastguard Workerdefine ceil(x,p){
78*5a6e8488SAndroid Build Coastguard Worker	auto t,n
79*5a6e8488SAndroid Build Coastguard Worker	if(x==0)return x
80*5a6e8488SAndroid Build Coastguard Worker	p=abs(p)$
81*5a6e8488SAndroid Build Coastguard Worker	n=(x<0)
82*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)
83*5a6e8488SAndroid Build Coastguard Worker	t=(x+((x@p<x)>>p))@p
84*5a6e8488SAndroid Build Coastguard Worker	if(n)t=-t
85*5a6e8488SAndroid Build Coastguard Worker	return t
86*5a6e8488SAndroid Build Coastguard Worker}
87*5a6e8488SAndroid Build Coastguard Workerdefine f(n){
88*5a6e8488SAndroid Build Coastguard Worker	auto r
89*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$
90*5a6e8488SAndroid Build Coastguard Worker	for(r=1;n>1;--n)r*=n
91*5a6e8488SAndroid Build Coastguard Worker	return r
92*5a6e8488SAndroid Build Coastguard Worker}
93*5a6e8488SAndroid Build Coastguard Workerdefine max(a,b){
94*5a6e8488SAndroid Build Coastguard Worker	if(a>b)return a
95*5a6e8488SAndroid Build Coastguard Worker	return b
96*5a6e8488SAndroid Build Coastguard Worker}
97*5a6e8488SAndroid Build Coastguard Workerdefine min(a,b){
98*5a6e8488SAndroid Build Coastguard Worker	if(a<b)return a
99*5a6e8488SAndroid Build Coastguard Worker	return b
100*5a6e8488SAndroid Build Coastguard Worker}
101*5a6e8488SAndroid Build Coastguard Workerdefine perm(n,k){
102*5a6e8488SAndroid Build Coastguard Worker	auto f,g,s
103*5a6e8488SAndroid Build Coastguard Worker	if(k>n)return 0
104*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$
105*5a6e8488SAndroid Build Coastguard Worker	k=abs(k)$
106*5a6e8488SAndroid Build Coastguard Worker	f=f(n)
107*5a6e8488SAndroid Build Coastguard Worker	g=f(n-k)
108*5a6e8488SAndroid Build Coastguard Worker	s=scale
109*5a6e8488SAndroid Build Coastguard Worker	scale=0
110*5a6e8488SAndroid Build Coastguard Worker	f/=g
111*5a6e8488SAndroid Build Coastguard Worker	scale=s
112*5a6e8488SAndroid Build Coastguard Worker	return f
113*5a6e8488SAndroid Build Coastguard Worker}
114*5a6e8488SAndroid Build Coastguard Workerdefine comb(n,r){
115*5a6e8488SAndroid Build Coastguard Worker	auto s,f,g,h
116*5a6e8488SAndroid Build Coastguard Worker	if(r>n)return 0
117*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$
118*5a6e8488SAndroid Build Coastguard Worker	r=abs(r)$
119*5a6e8488SAndroid Build Coastguard Worker	s=scale
120*5a6e8488SAndroid Build Coastguard Worker	scale=0
121*5a6e8488SAndroid Build Coastguard Worker	f=f(n)
122*5a6e8488SAndroid Build Coastguard Worker	h=f(r)
123*5a6e8488SAndroid Build Coastguard Worker	g=f(n-r)
124*5a6e8488SAndroid Build Coastguard Worker	f/=h*g
125*5a6e8488SAndroid Build Coastguard Worker	scale=s
126*5a6e8488SAndroid Build Coastguard Worker	return f
127*5a6e8488SAndroid Build Coastguard Worker}
128*5a6e8488SAndroid Build Coastguard Workerdefine fib(n){
129*5a6e8488SAndroid Build Coastguard Worker	auto i,t,p,r
130*5a6e8488SAndroid Build Coastguard Worker	if(!n)return 0
131*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$
132*5a6e8488SAndroid Build Coastguard Worker	t=1
133*5a6e8488SAndroid Build Coastguard Worker	for (i=1;i<n;++i){
134*5a6e8488SAndroid Build Coastguard Worker		r=p
135*5a6e8488SAndroid Build Coastguard Worker		p=t
136*5a6e8488SAndroid Build Coastguard Worker		t+=r
137*5a6e8488SAndroid Build Coastguard Worker	}
138*5a6e8488SAndroid Build Coastguard Worker	return t
139*5a6e8488SAndroid Build Coastguard Worker}
140*5a6e8488SAndroid Build Coastguard Workerdefine log(x,b){
141*5a6e8488SAndroid Build Coastguard Worker	auto p,s
142*5a6e8488SAndroid Build Coastguard Worker	s=scale
143*5a6e8488SAndroid Build Coastguard Worker	if(scale<K)scale=K
144*5a6e8488SAndroid Build Coastguard Worker	if(scale(x)>scale)scale=scale(x)
145*5a6e8488SAndroid Build Coastguard Worker	scale*=2
146*5a6e8488SAndroid Build Coastguard Worker	p=l(x)/l(b)
147*5a6e8488SAndroid Build Coastguard Worker	scale=s
148*5a6e8488SAndroid Build Coastguard Worker	return p@s
149*5a6e8488SAndroid Build Coastguard Worker}
150*5a6e8488SAndroid Build Coastguard Workerdefine l2(x){return log(x,2)}
151*5a6e8488SAndroid Build Coastguard Workerdefine l10(x){return log(x,A)}
152*5a6e8488SAndroid Build Coastguard Workerdefine root(x,n){
153*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m,r,q,p
154*5a6e8488SAndroid Build Coastguard Worker	if(n<0)sqrt(n)
155*5a6e8488SAndroid Build Coastguard Worker	n=n$
156*5a6e8488SAndroid Build Coastguard Worker	if(n==0)x/n
157*5a6e8488SAndroid Build Coastguard Worker	if(x==0||n==1)return x
158*5a6e8488SAndroid Build Coastguard Worker	if(n==2)return sqrt(x)
159*5a6e8488SAndroid Build Coastguard Worker	s=scale
160*5a6e8488SAndroid Build Coastguard Worker	scale=0
161*5a6e8488SAndroid Build Coastguard Worker	if(x<0&&n%2==0){
162*5a6e8488SAndroid Build Coastguard Worker		scale=s
163*5a6e8488SAndroid Build Coastguard Worker		sqrt(x)
164*5a6e8488SAndroid Build Coastguard Worker	}
165*5a6e8488SAndroid Build Coastguard Worker	scale=s+scale(x)+5
166*5a6e8488SAndroid Build Coastguard Worker	t=s+5
167*5a6e8488SAndroid Build Coastguard Worker	m=(x<0)
168*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)
169*5a6e8488SAndroid Build Coastguard Worker	p=n-1
170*5a6e8488SAndroid Build Coastguard Worker	q=A^ceil((length(x$)/n)$,0)
171*5a6e8488SAndroid Build Coastguard Worker	while(r@t!=q@t){
172*5a6e8488SAndroid Build Coastguard Worker		r=q
173*5a6e8488SAndroid Build Coastguard Worker		q=(p*r+x/r^p)/n
174*5a6e8488SAndroid Build Coastguard Worker	}
175*5a6e8488SAndroid Build Coastguard Worker	if(m)r=-r
176*5a6e8488SAndroid Build Coastguard Worker	scale=s
177*5a6e8488SAndroid Build Coastguard Worker	return r@s
178*5a6e8488SAndroid Build Coastguard Worker}
179*5a6e8488SAndroid Build Coastguard Workerdefine cbrt(x){return root(x,3)}
180*5a6e8488SAndroid Build Coastguard Workerdefine gcd(a,b){
181*5a6e8488SAndroid Build Coastguard Worker	auto g,s
182*5a6e8488SAndroid Build Coastguard Worker	if(!b)return a
183*5a6e8488SAndroid Build Coastguard Worker	s=scale
184*5a6e8488SAndroid Build Coastguard Worker	scale=0
185*5a6e8488SAndroid Build Coastguard Worker	a=abs(a)$
186*5a6e8488SAndroid Build Coastguard Worker	b=abs(b)$
187*5a6e8488SAndroid Build Coastguard Worker	if(a<b){
188*5a6e8488SAndroid Build Coastguard Worker		g=a
189*5a6e8488SAndroid Build Coastguard Worker		a=b
190*5a6e8488SAndroid Build Coastguard Worker		b=g
191*5a6e8488SAndroid Build Coastguard Worker	}
192*5a6e8488SAndroid Build Coastguard Worker	while(b){
193*5a6e8488SAndroid Build Coastguard Worker		g=a%b
194*5a6e8488SAndroid Build Coastguard Worker		a=b
195*5a6e8488SAndroid Build Coastguard Worker		b=g
196*5a6e8488SAndroid Build Coastguard Worker	}
197*5a6e8488SAndroid Build Coastguard Worker	scale=s
198*5a6e8488SAndroid Build Coastguard Worker	return a
199*5a6e8488SAndroid Build Coastguard Worker}
200*5a6e8488SAndroid Build Coastguard Workerdefine lcm(a,b){
201*5a6e8488SAndroid Build Coastguard Worker	auto r,s
202*5a6e8488SAndroid Build Coastguard Worker	if(!a&&!b)return 0
203*5a6e8488SAndroid Build Coastguard Worker	s=scale
204*5a6e8488SAndroid Build Coastguard Worker	scale=0
205*5a6e8488SAndroid Build Coastguard Worker	a=abs(a)$
206*5a6e8488SAndroid Build Coastguard Worker	b=abs(b)$
207*5a6e8488SAndroid Build Coastguard Worker	r=a*b/gcd(a,b)
208*5a6e8488SAndroid Build Coastguard Worker	scale=s
209*5a6e8488SAndroid Build Coastguard Worker	return r
210*5a6e8488SAndroid Build Coastguard Worker}
211*5a6e8488SAndroid Build Coastguard Workerdefine pi(s){
212*5a6e8488SAndroid Build Coastguard Worker	auto t,v
213*5a6e8488SAndroid Build Coastguard Worker	if(s==0)return 3
214*5a6e8488SAndroid Build Coastguard Worker	s=abs(s)$
215*5a6e8488SAndroid Build Coastguard Worker	t=scale
216*5a6e8488SAndroid Build Coastguard Worker	scale=s+1
217*5a6e8488SAndroid Build Coastguard Worker	v=4*a(1)
218*5a6e8488SAndroid Build Coastguard Worker	scale=t
219*5a6e8488SAndroid Build Coastguard Worker	return v@s
220*5a6e8488SAndroid Build Coastguard Worker}
221*5a6e8488SAndroid Build Coastguard Workerdefine t(x){
222*5a6e8488SAndroid Build Coastguard Worker	auto s,c
223*5a6e8488SAndroid Build Coastguard Worker	l=scale
224*5a6e8488SAndroid Build Coastguard Worker	scale+=2
225*5a6e8488SAndroid Build Coastguard Worker	s=s(x)
226*5a6e8488SAndroid Build Coastguard Worker	c=c(x)
227*5a6e8488SAndroid Build Coastguard Worker	scale-=2
228*5a6e8488SAndroid Build Coastguard Worker	return s/c
229*5a6e8488SAndroid Build Coastguard Worker}
230*5a6e8488SAndroid Build Coastguard Workerdefine a2(y,x){
231*5a6e8488SAndroid Build Coastguard Worker	auto a,p
232*5a6e8488SAndroid Build Coastguard Worker	if(!x&&!y)y/x
233*5a6e8488SAndroid Build Coastguard Worker	if(x<=0){
234*5a6e8488SAndroid Build Coastguard Worker		p=pi(scale+2)
235*5a6e8488SAndroid Build Coastguard Worker		if(y<0)p=-p
236*5a6e8488SAndroid Build Coastguard Worker	}
237*5a6e8488SAndroid Build Coastguard Worker	if(x==0)a=p/2
238*5a6e8488SAndroid Build Coastguard Worker	else{
239*5a6e8488SAndroid Build Coastguard Worker		scale+=2
240*5a6e8488SAndroid Build Coastguard Worker		a=a(y/x)+p
241*5a6e8488SAndroid Build Coastguard Worker		scale-=2
242*5a6e8488SAndroid Build Coastguard Worker	}
243*5a6e8488SAndroid Build Coastguard Worker	return a@scale
244*5a6e8488SAndroid Build Coastguard Worker}
245*5a6e8488SAndroid Build Coastguard Workerdefine sin(x){return s(x)}
246*5a6e8488SAndroid Build Coastguard Workerdefine cos(x){return c(x)}
247*5a6e8488SAndroid Build Coastguard Workerdefine atan(x){return a(x)}
248*5a6e8488SAndroid Build Coastguard Workerdefine tan(x){return t(x)}
249*5a6e8488SAndroid Build Coastguard Workerdefine atan2(y,x){return a2(y,x)}
250*5a6e8488SAndroid Build Coastguard Workerdefine r2d(x){
251*5a6e8488SAndroid Build Coastguard Worker	auto r,i,s
252*5a6e8488SAndroid Build Coastguard Worker	s=scale
253*5a6e8488SAndroid Build Coastguard Worker	scale+=5
254*5a6e8488SAndroid Build Coastguard Worker	i=ibase
255*5a6e8488SAndroid Build Coastguard Worker	ibase=A
256*5a6e8488SAndroid Build Coastguard Worker	r=x*180/pi(scale)
257*5a6e8488SAndroid Build Coastguard Worker	ibase=i
258*5a6e8488SAndroid Build Coastguard Worker	scale=s
259*5a6e8488SAndroid Build Coastguard Worker	return r@s
260*5a6e8488SAndroid Build Coastguard Worker}
261*5a6e8488SAndroid Build Coastguard Workerdefine d2r(x){
262*5a6e8488SAndroid Build Coastguard Worker	auto r,i,s
263*5a6e8488SAndroid Build Coastguard Worker	s=scale
264*5a6e8488SAndroid Build Coastguard Worker	scale+=5
265*5a6e8488SAndroid Build Coastguard Worker	i=ibase
266*5a6e8488SAndroid Build Coastguard Worker	ibase=A
267*5a6e8488SAndroid Build Coastguard Worker	r=x*pi(scale)/180
268*5a6e8488SAndroid Build Coastguard Worker	ibase=i
269*5a6e8488SAndroid Build Coastguard Worker	scale=s
270*5a6e8488SAndroid Build Coastguard Worker	return r@s
271*5a6e8488SAndroid Build Coastguard Worker}
272*5a6e8488SAndroid Build Coastguard Workerdefine frand(p){
273*5a6e8488SAndroid Build Coastguard Worker	p=abs(p)$
274*5a6e8488SAndroid Build Coastguard Worker	return irand(A^p)>>p
275*5a6e8488SAndroid Build Coastguard Worker}
276*5a6e8488SAndroid Build Coastguard Workerdefine ifrand(i,p){return irand(abs(i)$)+frand(p)}
277*5a6e8488SAndroid Build Coastguard Workerdefine i2rand(a,b){
278*5a6e8488SAndroid Build Coastguard Worker	auto n,x
279*5a6e8488SAndroid Build Coastguard Worker	a=a$
280*5a6e8488SAndroid Build Coastguard Worker	b=b$
281*5a6e8488SAndroid Build Coastguard Worker	if(a==b)return a
282*5a6e8488SAndroid Build Coastguard Worker	n=min(a,b)
283*5a6e8488SAndroid Build Coastguard Worker	x=max(a,b)
284*5a6e8488SAndroid Build Coastguard Worker	return irand(x-n+1)+n
285*5a6e8488SAndroid Build Coastguard Worker}
286*5a6e8488SAndroid Build Coastguard Workerdefine srand(x){
287*5a6e8488SAndroid Build Coastguard Worker	if(irand(2))return -x
288*5a6e8488SAndroid Build Coastguard Worker	return x
289*5a6e8488SAndroid Build Coastguard Worker}
290*5a6e8488SAndroid Build Coastguard Workerdefine brand(){return irand(2)}
291*5a6e8488SAndroid Build Coastguard Workerdefine void output(x,b){
292*5a6e8488SAndroid Build Coastguard Worker	auto c
293*5a6e8488SAndroid Build Coastguard Worker	c=obase
294*5a6e8488SAndroid Build Coastguard Worker	obase=b
295*5a6e8488SAndroid Build Coastguard Worker	x
296*5a6e8488SAndroid Build Coastguard Worker	obase=c
297*5a6e8488SAndroid Build Coastguard Worker}
298*5a6e8488SAndroid Build Coastguard Workerdefine void hex(x){output(x,G)}
299*5a6e8488SAndroid Build Coastguard Workerdefine void binary(x){output(x,2)}
300*5a6e8488SAndroid Build Coastguard Workerdefine ubytes(x){
301*5a6e8488SAndroid Build Coastguard Worker	auto p,i
302*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$
303*5a6e8488SAndroid Build Coastguard Worker	i=2^8
304*5a6e8488SAndroid Build Coastguard Worker	for(p=1;i-1<x;p*=2){i*=i}
305*5a6e8488SAndroid Build Coastguard Worker	return p
306*5a6e8488SAndroid Build Coastguard Worker}
307*5a6e8488SAndroid Build Coastguard Workerdefine sbytes(x){
308*5a6e8488SAndroid Build Coastguard Worker	auto p,n,z
309*5a6e8488SAndroid Build Coastguard Worker	z=(x<0)
310*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$
311*5a6e8488SAndroid Build Coastguard Worker	n=ubytes(x)
312*5a6e8488SAndroid Build Coastguard Worker	p=2^(n*8-1)
313*5a6e8488SAndroid Build Coastguard Worker	if(x>p||(!z&&x==p))n*=2
314*5a6e8488SAndroid Build Coastguard Worker	return n
315*5a6e8488SAndroid Build Coastguard Worker}
316*5a6e8488SAndroid Build Coastguard Workerdefine s2un(x,n){
317*5a6e8488SAndroid Build Coastguard Worker	auto t,u,s
318*5a6e8488SAndroid Build Coastguard Worker	x=x$
319*5a6e8488SAndroid Build Coastguard Worker	if(x<0){
320*5a6e8488SAndroid Build Coastguard Worker		x=abs(x)
321*5a6e8488SAndroid Build Coastguard Worker		s=scale
322*5a6e8488SAndroid Build Coastguard Worker		scale=0
323*5a6e8488SAndroid Build Coastguard Worker		t=n*8
324*5a6e8488SAndroid Build Coastguard Worker		u=2^(t-1)
325*5a6e8488SAndroid Build Coastguard Worker		if(x==u)return x
326*5a6e8488SAndroid Build Coastguard Worker		else if(x>u)x%=u
327*5a6e8488SAndroid Build Coastguard Worker		scale=s
328*5a6e8488SAndroid Build Coastguard Worker		return 2^(t)-x
329*5a6e8488SAndroid Build Coastguard Worker	}
330*5a6e8488SAndroid Build Coastguard Worker	return x
331*5a6e8488SAndroid Build Coastguard Worker}
332*5a6e8488SAndroid Build Coastguard Workerdefine s2u(x){return s2un(x,sbytes(x))}
333*5a6e8488SAndroid Build Coastguard Workerdefine void plz(x){
334*5a6e8488SAndroid Build Coastguard Worker	if(leading_zero())print x
335*5a6e8488SAndroid Build Coastguard Worker	else{
336*5a6e8488SAndroid Build Coastguard Worker		if(x>-1&&x<1&&x!=0){
337*5a6e8488SAndroid Build Coastguard Worker			if(x<0)print"-"
338*5a6e8488SAndroid Build Coastguard Worker			print 0,abs(x)
339*5a6e8488SAndroid Build Coastguard Worker		}
340*5a6e8488SAndroid Build Coastguard Worker		else print x
341*5a6e8488SAndroid Build Coastguard Worker	}
342*5a6e8488SAndroid Build Coastguard Worker}
343*5a6e8488SAndroid Build Coastguard Workerdefine void plznl(x){
344*5a6e8488SAndroid Build Coastguard Worker	plz(x)
345*5a6e8488SAndroid Build Coastguard Worker	print"\n"
346*5a6e8488SAndroid Build Coastguard Worker}
347*5a6e8488SAndroid Build Coastguard Workerdefine void pnlz(x){
348*5a6e8488SAndroid Build Coastguard Worker	auto s,i
349*5a6e8488SAndroid Build Coastguard Worker	if(leading_zero()){
350*5a6e8488SAndroid Build Coastguard Worker		if(x>-1&&x<1&&x!=0){
351*5a6e8488SAndroid Build Coastguard Worker			s=scale(x)
352*5a6e8488SAndroid Build Coastguard Worker			if(x<0)print"-"
353*5a6e8488SAndroid Build Coastguard Worker			print"."
354*5a6e8488SAndroid Build Coastguard Worker			x=abs(x)
355*5a6e8488SAndroid Build Coastguard Worker			for(i=0;i<s;++i){
356*5a6e8488SAndroid Build Coastguard Worker				x<<=1
357*5a6e8488SAndroid Build Coastguard Worker				print x$
358*5a6e8488SAndroid Build Coastguard Worker				x-=x$
359*5a6e8488SAndroid Build Coastguard Worker			}
360*5a6e8488SAndroid Build Coastguard Worker			return
361*5a6e8488SAndroid Build Coastguard Worker		}
362*5a6e8488SAndroid Build Coastguard Worker	}
363*5a6e8488SAndroid Build Coastguard Worker	print x
364*5a6e8488SAndroid Build Coastguard Worker}
365*5a6e8488SAndroid Build Coastguard Workerdefine void pnlznl(x){
366*5a6e8488SAndroid Build Coastguard Worker	pnlz(x)
367*5a6e8488SAndroid Build Coastguard Worker	print"\n"
368*5a6e8488SAndroid Build Coastguard Worker}
369*5a6e8488SAndroid Build Coastguard Workerdefine void output_byte(x,i){
370*5a6e8488SAndroid Build Coastguard Worker	auto j,p,y,b,s
371*5a6e8488SAndroid Build Coastguard Worker	s=scale
372*5a6e8488SAndroid Build Coastguard Worker	scale=0
373*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$
374*5a6e8488SAndroid Build Coastguard Worker	b=x/(2^(i*8))
375*5a6e8488SAndroid Build Coastguard Worker	j=2^8
376*5a6e8488SAndroid Build Coastguard Worker	b%=j
377*5a6e8488SAndroid Build Coastguard Worker	y=log(j,obase)
378*5a6e8488SAndroid Build Coastguard Worker	if(b>1)p=log(b,obase)+1
379*5a6e8488SAndroid Build Coastguard Worker	else p=b
380*5a6e8488SAndroid Build Coastguard Worker	for(i=y-p;i>0;--i)print 0
381*5a6e8488SAndroid Build Coastguard Worker	if(b)print b
382*5a6e8488SAndroid Build Coastguard Worker	scale=s
383*5a6e8488SAndroid Build Coastguard Worker}
384*5a6e8488SAndroid Build Coastguard Workerdefine void output_uint(x,n){
385*5a6e8488SAndroid Build Coastguard Worker	auto i
386*5a6e8488SAndroid Build Coastguard Worker	for(i=n-1;i>=0;--i){
387*5a6e8488SAndroid Build Coastguard Worker		output_byte(x,i)
388*5a6e8488SAndroid Build Coastguard Worker		if(i)print" "
389*5a6e8488SAndroid Build Coastguard Worker		else print"\n"
390*5a6e8488SAndroid Build Coastguard Worker	}
391*5a6e8488SAndroid Build Coastguard Worker}
392*5a6e8488SAndroid Build Coastguard Workerdefine void hex_uint(x,n){
393*5a6e8488SAndroid Build Coastguard Worker	auto o
394*5a6e8488SAndroid Build Coastguard Worker	o=obase
395*5a6e8488SAndroid Build Coastguard Worker	obase=G
396*5a6e8488SAndroid Build Coastguard Worker	output_uint(x,n)
397*5a6e8488SAndroid Build Coastguard Worker	obase=o
398*5a6e8488SAndroid Build Coastguard Worker}
399*5a6e8488SAndroid Build Coastguard Workerdefine void binary_uint(x,n){
400*5a6e8488SAndroid Build Coastguard Worker	auto o
401*5a6e8488SAndroid Build Coastguard Worker	o=obase
402*5a6e8488SAndroid Build Coastguard Worker	obase=2
403*5a6e8488SAndroid Build Coastguard Worker	output_uint(x,n)
404*5a6e8488SAndroid Build Coastguard Worker	obase=o
405*5a6e8488SAndroid Build Coastguard Worker}
406*5a6e8488SAndroid Build Coastguard Workerdefine void uintn(x,n){
407*5a6e8488SAndroid Build Coastguard Worker	if(scale(x)){
408*5a6e8488SAndroid Build Coastguard Worker		print"Error: ",x," is not an integer.\n"
409*5a6e8488SAndroid Build Coastguard Worker		return
410*5a6e8488SAndroid Build Coastguard Worker	}
411*5a6e8488SAndroid Build Coastguard Worker	if(x<0){
412*5a6e8488SAndroid Build Coastguard Worker		print"Error: ",x," is negative.\n"
413*5a6e8488SAndroid Build Coastguard Worker		return
414*5a6e8488SAndroid Build Coastguard Worker	}
415*5a6e8488SAndroid Build Coastguard Worker	if(x>=2^(n*8)){
416*5a6e8488SAndroid Build Coastguard Worker		print"Error: ",x," cannot fit into ",n," unsigned byte(s).\n"
417*5a6e8488SAndroid Build Coastguard Worker		return
418*5a6e8488SAndroid Build Coastguard Worker	}
419*5a6e8488SAndroid Build Coastguard Worker	binary_uint(x,n)
420*5a6e8488SAndroid Build Coastguard Worker	hex_uint(x,n)
421*5a6e8488SAndroid Build Coastguard Worker}
422*5a6e8488SAndroid Build Coastguard Workerdefine void intn(x,n){
423*5a6e8488SAndroid Build Coastguard Worker	auto t
424*5a6e8488SAndroid Build Coastguard Worker	if(scale(x)){
425*5a6e8488SAndroid Build Coastguard Worker		print"Error: ",x," is not an integer.\n"
426*5a6e8488SAndroid Build Coastguard Worker		return
427*5a6e8488SAndroid Build Coastguard Worker	}
428*5a6e8488SAndroid Build Coastguard Worker	t=2^(n*8-1)
429*5a6e8488SAndroid Build Coastguard Worker	if(abs(x)>=t&&(x>0||x!=-t)){
430*5a6e8488SAndroid Build Coastguard Worker		print "Error: ",x," cannot fit into ",n," signed byte(s).\n"
431*5a6e8488SAndroid Build Coastguard Worker		return
432*5a6e8488SAndroid Build Coastguard Worker	}
433*5a6e8488SAndroid Build Coastguard Worker	x=s2un(x,n)
434*5a6e8488SAndroid Build Coastguard Worker	binary_uint(x,n)
435*5a6e8488SAndroid Build Coastguard Worker	hex_uint(x,n)
436*5a6e8488SAndroid Build Coastguard Worker}
437*5a6e8488SAndroid Build Coastguard Workerdefine void uint8(x){uintn(x,1)}
438*5a6e8488SAndroid Build Coastguard Workerdefine void int8(x){intn(x,1)}
439*5a6e8488SAndroid Build Coastguard Workerdefine void uint16(x){uintn(x,2)}
440*5a6e8488SAndroid Build Coastguard Workerdefine void int16(x){intn(x,2)}
441*5a6e8488SAndroid Build Coastguard Workerdefine void uint32(x){uintn(x,4)}
442*5a6e8488SAndroid Build Coastguard Workerdefine void int32(x){intn(x,4)}
443*5a6e8488SAndroid Build Coastguard Workerdefine void uint64(x){uintn(x,8)}
444*5a6e8488SAndroid Build Coastguard Workerdefine void int64(x){intn(x,8)}
445*5a6e8488SAndroid Build Coastguard Workerdefine void uint(x){uintn(x,ubytes(x))}
446*5a6e8488SAndroid Build Coastguard Workerdefine void int(x){intn(x,sbytes(x))}
447*5a6e8488SAndroid Build Coastguard Workerdefine bunrev(t){
448*5a6e8488SAndroid Build Coastguard Worker	auto a,s,m[]
449*5a6e8488SAndroid Build Coastguard Worker	s=scale
450*5a6e8488SAndroid Build Coastguard Worker	scale=0
451*5a6e8488SAndroid Build Coastguard Worker	t=abs(t)$
452*5a6e8488SAndroid Build Coastguard Worker	while(t!=1){
453*5a6e8488SAndroid Build Coastguard Worker		t=divmod(t,2,m[])
454*5a6e8488SAndroid Build Coastguard Worker		a*=2
455*5a6e8488SAndroid Build Coastguard Worker		a+=m[0]
456*5a6e8488SAndroid Build Coastguard Worker	}
457*5a6e8488SAndroid Build Coastguard Worker	scale=s
458*5a6e8488SAndroid Build Coastguard Worker	return a
459*5a6e8488SAndroid Build Coastguard Worker}
460*5a6e8488SAndroid Build Coastguard Workerdefine band(a,b){
461*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[],n[]
462*5a6e8488SAndroid Build Coastguard Worker	a=abs(a)$
463*5a6e8488SAndroid Build Coastguard Worker	b=abs(b)$
464*5a6e8488SAndroid Build Coastguard Worker	if(b>a){
465*5a6e8488SAndroid Build Coastguard Worker		t=b
466*5a6e8488SAndroid Build Coastguard Worker		b=a
467*5a6e8488SAndroid Build Coastguard Worker		a=t
468*5a6e8488SAndroid Build Coastguard Worker	}
469*5a6e8488SAndroid Build Coastguard Worker	s=scale
470*5a6e8488SAndroid Build Coastguard Worker	scale=0
471*5a6e8488SAndroid Build Coastguard Worker	t=1
472*5a6e8488SAndroid Build Coastguard Worker	while(b){
473*5a6e8488SAndroid Build Coastguard Worker		a=divmod(a,2,m[])
474*5a6e8488SAndroid Build Coastguard Worker		b=divmod(b,2,n[])
475*5a6e8488SAndroid Build Coastguard Worker		t*=2
476*5a6e8488SAndroid Build Coastguard Worker		t+=(m[0]&&n[0])
477*5a6e8488SAndroid Build Coastguard Worker	}
478*5a6e8488SAndroid Build Coastguard Worker	scale=s
479*5a6e8488SAndroid Build Coastguard Worker	return bunrev(t)
480*5a6e8488SAndroid Build Coastguard Worker}
481*5a6e8488SAndroid Build Coastguard Workerdefine bor(a,b){
482*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[],n[]
483*5a6e8488SAndroid Build Coastguard Worker	a=abs(a)$
484*5a6e8488SAndroid Build Coastguard Worker	b=abs(b)$
485*5a6e8488SAndroid Build Coastguard Worker	if(b>a){
486*5a6e8488SAndroid Build Coastguard Worker		t=b
487*5a6e8488SAndroid Build Coastguard Worker		b=a
488*5a6e8488SAndroid Build Coastguard Worker		a=t
489*5a6e8488SAndroid Build Coastguard Worker	}
490*5a6e8488SAndroid Build Coastguard Worker	s=scale
491*5a6e8488SAndroid Build Coastguard Worker	scale=0
492*5a6e8488SAndroid Build Coastguard Worker	t=1
493*5a6e8488SAndroid Build Coastguard Worker	while(b){
494*5a6e8488SAndroid Build Coastguard Worker		a=divmod(a,2,m[])
495*5a6e8488SAndroid Build Coastguard Worker		b=divmod(b,2,n[])
496*5a6e8488SAndroid Build Coastguard Worker		t*=2
497*5a6e8488SAndroid Build Coastguard Worker		t+=(m[0]||n[0])
498*5a6e8488SAndroid Build Coastguard Worker	}
499*5a6e8488SAndroid Build Coastguard Worker	while(a){
500*5a6e8488SAndroid Build Coastguard Worker		a=divmod(a,2,m[])
501*5a6e8488SAndroid Build Coastguard Worker		t*=2
502*5a6e8488SAndroid Build Coastguard Worker		t+=m[0]
503*5a6e8488SAndroid Build Coastguard Worker	}
504*5a6e8488SAndroid Build Coastguard Worker	scale=s
505*5a6e8488SAndroid Build Coastguard Worker	return bunrev(t)
506*5a6e8488SAndroid Build Coastguard Worker}
507*5a6e8488SAndroid Build Coastguard Workerdefine bxor(a,b){
508*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[],n[]
509*5a6e8488SAndroid Build Coastguard Worker	a=abs(a)$
510*5a6e8488SAndroid Build Coastguard Worker	b=abs(b)$
511*5a6e8488SAndroid Build Coastguard Worker	if(b>a){
512*5a6e8488SAndroid Build Coastguard Worker		t=b
513*5a6e8488SAndroid Build Coastguard Worker		b=a
514*5a6e8488SAndroid Build Coastguard Worker		a=t
515*5a6e8488SAndroid Build Coastguard Worker	}
516*5a6e8488SAndroid Build Coastguard Worker	s=scale
517*5a6e8488SAndroid Build Coastguard Worker	scale=0
518*5a6e8488SAndroid Build Coastguard Worker	t=1
519*5a6e8488SAndroid Build Coastguard Worker	while(b){
520*5a6e8488SAndroid Build Coastguard Worker		a=divmod(a,2,m[])
521*5a6e8488SAndroid Build Coastguard Worker		b=divmod(b,2,n[])
522*5a6e8488SAndroid Build Coastguard Worker		t*=2
523*5a6e8488SAndroid Build Coastguard Worker		t+=(m[0]+n[0]==1)
524*5a6e8488SAndroid Build Coastguard Worker	}
525*5a6e8488SAndroid Build Coastguard Worker	while(a){
526*5a6e8488SAndroid Build Coastguard Worker		a=divmod(a,2,m[])
527*5a6e8488SAndroid Build Coastguard Worker		t*=2
528*5a6e8488SAndroid Build Coastguard Worker		t+=m[0]
529*5a6e8488SAndroid Build Coastguard Worker	}
530*5a6e8488SAndroid Build Coastguard Worker	scale=s
531*5a6e8488SAndroid Build Coastguard Worker	return bunrev(t)
532*5a6e8488SAndroid Build Coastguard Worker}
533*5a6e8488SAndroid Build Coastguard Workerdefine bshl(a,b){return abs(a)$*2^abs(b)$}
534*5a6e8488SAndroid Build Coastguard Workerdefine bshr(a,b){return(abs(a)$/2^abs(b)$)$}
535*5a6e8488SAndroid Build Coastguard Workerdefine bnotn(x,n){
536*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[]
537*5a6e8488SAndroid Build Coastguard Worker	s=scale
538*5a6e8488SAndroid Build Coastguard Worker	scale=0
539*5a6e8488SAndroid Build Coastguard Worker	t=2^(abs(n)$*8)
540*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$%t+t
541*5a6e8488SAndroid Build Coastguard Worker	t=1
542*5a6e8488SAndroid Build Coastguard Worker	while(x!=1){
543*5a6e8488SAndroid Build Coastguard Worker		x=divmod(x,2,m[])
544*5a6e8488SAndroid Build Coastguard Worker		t*=2
545*5a6e8488SAndroid Build Coastguard Worker		t+=!m[0]
546*5a6e8488SAndroid Build Coastguard Worker	}
547*5a6e8488SAndroid Build Coastguard Worker	scale=s
548*5a6e8488SAndroid Build Coastguard Worker	return bunrev(t)
549*5a6e8488SAndroid Build Coastguard Worker}
550*5a6e8488SAndroid Build Coastguard Workerdefine bnot8(x){return bnotn(x,1)}
551*5a6e8488SAndroid Build Coastguard Workerdefine bnot16(x){return bnotn(x,2)}
552*5a6e8488SAndroid Build Coastguard Workerdefine bnot32(x){return bnotn(x,4)}
553*5a6e8488SAndroid Build Coastguard Workerdefine bnot64(x){return bnotn(x,8)}
554*5a6e8488SAndroid Build Coastguard Workerdefine bnot(x){return bnotn(x,ubytes(x))}
555*5a6e8488SAndroid Build Coastguard Workerdefine brevn(x,n){
556*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[]
557*5a6e8488SAndroid Build Coastguard Worker	s=scale
558*5a6e8488SAndroid Build Coastguard Worker	scale=0
559*5a6e8488SAndroid Build Coastguard Worker	t=2^(abs(n)$*8)
560*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$%t+t
561*5a6e8488SAndroid Build Coastguard Worker	scale=s
562*5a6e8488SAndroid Build Coastguard Worker	return bunrev(x)
563*5a6e8488SAndroid Build Coastguard Worker}
564*5a6e8488SAndroid Build Coastguard Workerdefine brev8(x){return brevn(x,1)}
565*5a6e8488SAndroid Build Coastguard Workerdefine brev16(x){return brevn(x,2)}
566*5a6e8488SAndroid Build Coastguard Workerdefine brev32(x){return brevn(x,4)}
567*5a6e8488SAndroid Build Coastguard Workerdefine brev64(x){return brevn(x,8)}
568*5a6e8488SAndroid Build Coastguard Workerdefine brev(x){return brevn(x,ubytes(x))}
569*5a6e8488SAndroid Build Coastguard Workerdefine broln(x,p,n){
570*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[]
571*5a6e8488SAndroid Build Coastguard Worker	s=scale
572*5a6e8488SAndroid Build Coastguard Worker	scale=0
573*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$*8
574*5a6e8488SAndroid Build Coastguard Worker	p=abs(p)$%n
575*5a6e8488SAndroid Build Coastguard Worker	t=2^n
576*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$%t
577*5a6e8488SAndroid Build Coastguard Worker	if(!p)return x
578*5a6e8488SAndroid Build Coastguard Worker	x=divmod(x,2^(n-p),m[])
579*5a6e8488SAndroid Build Coastguard Worker	x+=m[0]*2^p%t
580*5a6e8488SAndroid Build Coastguard Worker	scale=s
581*5a6e8488SAndroid Build Coastguard Worker	return x
582*5a6e8488SAndroid Build Coastguard Worker}
583*5a6e8488SAndroid Build Coastguard Workerdefine brol8(x,p){return broln(x,p,1)}
584*5a6e8488SAndroid Build Coastguard Workerdefine brol16(x,p){return broln(x,p,2)}
585*5a6e8488SAndroid Build Coastguard Workerdefine brol32(x,p){return broln(x,p,4)}
586*5a6e8488SAndroid Build Coastguard Workerdefine brol64(x,p){return broln(x,p,8)}
587*5a6e8488SAndroid Build Coastguard Workerdefine brol(x,p){return broln(x,p,ubytes(x))}
588*5a6e8488SAndroid Build Coastguard Workerdefine brorn(x,p,n){
589*5a6e8488SAndroid Build Coastguard Worker	auto s,t,m[]
590*5a6e8488SAndroid Build Coastguard Worker	s=scale
591*5a6e8488SAndroid Build Coastguard Worker	scale=0
592*5a6e8488SAndroid Build Coastguard Worker	n=abs(n)$*8
593*5a6e8488SAndroid Build Coastguard Worker	p=abs(p)$%n
594*5a6e8488SAndroid Build Coastguard Worker	t=2^n
595*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$%t
596*5a6e8488SAndroid Build Coastguard Worker	if(!p)return x
597*5a6e8488SAndroid Build Coastguard Worker	x=divmod(x,2^p,m[])
598*5a6e8488SAndroid Build Coastguard Worker	x+=m[0]*2^(n-p)%t
599*5a6e8488SAndroid Build Coastguard Worker	scale=s
600*5a6e8488SAndroid Build Coastguard Worker	return x
601*5a6e8488SAndroid Build Coastguard Worker}
602*5a6e8488SAndroid Build Coastguard Workerdefine bror8(x,p){return brorn(x,p,1)}
603*5a6e8488SAndroid Build Coastguard Workerdefine bror16(x,p){return brorn(x,p,2)}
604*5a6e8488SAndroid Build Coastguard Workerdefine bror32(x,p){return brorn(x,p,4)}
605*5a6e8488SAndroid Build Coastguard Workerdefine bror64(x,p){return brorn(x,p,8)}
606*5a6e8488SAndroid Build Coastguard Workerdefine brol(x,p){return brorn(x,p,ubytes(x))}
607*5a6e8488SAndroid Build Coastguard Workerdefine bmodn(x,n){
608*5a6e8488SAndroid Build Coastguard Worker	auto s
609*5a6e8488SAndroid Build Coastguard Worker	s=scale
610*5a6e8488SAndroid Build Coastguard Worker	scale=0
611*5a6e8488SAndroid Build Coastguard Worker	x=abs(x)$%2^(abs(n)$*8)
612*5a6e8488SAndroid Build Coastguard Worker	scale=s
613*5a6e8488SAndroid Build Coastguard Worker	return x
614*5a6e8488SAndroid Build Coastguard Worker}
615*5a6e8488SAndroid Build Coastguard Workerdefine bmod8(x){return bmodn(x,1)}
616*5a6e8488SAndroid Build Coastguard Workerdefine bmod16(x){return bmodn(x,2)}
617*5a6e8488SAndroid Build Coastguard Workerdefine bmod32(x){return bmodn(x,4)}
618*5a6e8488SAndroid Build Coastguard Workerdefine bmod64(x){return bmodn(x,8)}
619