mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
Compare commits
4139 Commits
v3.3
...
v4.8.2-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f0723fb8d | ||
|
|
8603f66cc4 | ||
|
|
5fdf49bebf | ||
|
|
3d82d9240b | ||
|
|
081372922e | ||
|
|
0e11ad297a | ||
|
|
cd11eb06a0 | ||
|
|
2b56e0c87c | ||
|
|
bf4c9564c6 | ||
|
|
cc58080238 | ||
|
|
9fba862176 | ||
|
|
7609706115 | ||
|
|
b9b1fe9b2d | ||
|
|
8e15e559b7 | ||
|
|
63d33bc303 | ||
|
|
9c2433cf6b | ||
|
|
3408b51a2b | ||
|
|
774e2c928e | ||
|
|
c4101c8a25 | ||
|
|
1b85111181 | ||
|
|
0d55ca947c | ||
|
|
b37506b58a | ||
|
|
b577126eaf | ||
|
|
7c529f280f | ||
|
|
44cd2f4c2c | ||
|
|
38292c7e5d | ||
|
|
49f0a5b293 | ||
|
|
6e07b889a4 | ||
|
|
7222770923 | ||
|
|
f90d9f7618 | ||
|
|
434dde999b | ||
|
|
ae2e02afb5 | ||
|
|
32d4779a40 | ||
|
|
24301299e4 | ||
|
|
026f87ef23 | ||
|
|
fa02636706 | ||
|
|
59cb532035 | ||
|
|
19ee07fd66 | ||
|
|
c9fa2dcd83 | ||
|
|
c4b91f0433 | ||
|
|
5eba3c989e | ||
|
|
f88de850a1 | ||
|
|
315bc32a66 | ||
|
|
334fb94505 | ||
|
|
35cb2c39ce | ||
|
|
54d2adc2c5 | ||
|
|
347ef7f014 | ||
|
|
c012e6201e | ||
|
|
ef3ee1194b | ||
|
|
0451d1958f | ||
|
|
006beb88f0 | ||
|
|
3c958f6639 | ||
|
|
4539342098 | ||
|
|
c1c0c14fde | ||
|
|
2685c40d17 | ||
|
|
2634acd8d2 | ||
|
|
956cf5778e | ||
|
|
e001326987 | ||
|
|
24ab5410b3 | ||
|
|
9341f6b3d3 | ||
|
|
2e8218d5c1 | ||
|
|
00c5e4eb1a | ||
|
|
8dfaa3a35a | ||
|
|
c408fe622b | ||
|
|
80748a7c91 | ||
|
|
d0d864df3c | ||
|
|
0e240ff050 | ||
|
|
e8aaca422a | ||
|
|
1c8844e740 | ||
|
|
2971cc9d9a | ||
|
|
965668db75 | ||
|
|
6bb955cba7 | ||
|
|
716ab41ade | ||
|
|
ef02c2e5b1 | ||
|
|
e17952fe6e | ||
|
|
582b37124d | ||
|
|
8afc9f3ffc | ||
|
|
62bd51f77d | ||
|
|
67a3b8368a | ||
|
|
a8211317c1 | ||
|
|
461fd9419d | ||
|
|
d7af9ecd95 | ||
|
|
6a44663779 | ||
|
|
4d731d2c3b | ||
|
|
12a50d1c92 | ||
|
|
b74d7cda18 | ||
|
|
2a1dcf5745 | ||
|
|
a9697e5629 | ||
|
|
b3b2331cd1 | ||
|
|
27994385f2 | ||
|
|
0996106764 | ||
|
|
f39c93e0f2 | ||
|
|
a8b00ba87b | ||
|
|
18d367ee9e | ||
|
|
1fc4f37ef0 | ||
|
|
f6a82decd2 | ||
|
|
6f70db89c4 | ||
|
|
de5e9424e5 | ||
|
|
c4689fd0d0 | ||
|
|
10b9b9c1cf | ||
|
|
e4f13409c5 | ||
|
|
df812f1241 | ||
|
|
e99651d52b | ||
|
|
5dc843fc83 | ||
|
|
67d038d313 | ||
|
|
4951110bd9 | ||
|
|
269e0dcd07 | ||
|
|
e9dbb56f09 | ||
|
|
cf363aef0f | ||
|
|
98c161d2fc | ||
|
|
68036d7048 | ||
|
|
d18105ccdb | ||
|
|
5d55f90bfe | ||
|
|
b615afa0b7 | ||
|
|
445c897838 | ||
|
|
614c7bd85e | ||
|
|
464038c6cc | ||
|
|
d8fc8d339c | ||
|
|
17d0973f64 | ||
|
|
aa5ab30232 | ||
|
|
74aff44667 | ||
|
|
858bb9fb6d | ||
|
|
9373f5f862 | ||
|
|
ee2d3d1162 | ||
|
|
200ce59e47 | ||
|
|
46eff1ccb0 | ||
|
|
2326190958 | ||
|
|
e5c71c3ed3 | ||
|
|
c00461bb93 | ||
|
|
906eefd998 | ||
|
|
fa2af73c82 | ||
|
|
d7d8b36fb0 | ||
|
|
4822706c47 | ||
|
|
0d46dbb474 | ||
|
|
05c8bbfb8d | ||
|
|
f8ac07ca9c | ||
|
|
77e44c6579 | ||
|
|
09e949b373 | ||
|
|
67dab0e9cb | ||
|
|
89fbf5a668 | ||
|
|
e76e072ede | ||
|
|
9a78bfd9cb | ||
|
|
ed4e6bcf6a | ||
|
|
41ed6eec9a | ||
|
|
75c885e3b1 | ||
|
|
906360a2fe | ||
|
|
dd9e9b758b | ||
|
|
ac9a502d58 | ||
|
|
d258fa80eb | ||
|
|
0ae6e2deae | ||
|
|
f43ffc1f35 | ||
|
|
b441cb9b10 | ||
|
|
2759142e1d | ||
|
|
955c358e90 | ||
|
|
c5f38b1035 | ||
|
|
a57ff81e5e | ||
|
|
99e9029e6d | ||
|
|
2aded57286 | ||
|
|
eaf4f7609f | ||
|
|
3576ae5fa5 | ||
|
|
3177caca4b | ||
|
|
e28fce318b | ||
|
|
157fd3ffe5 | ||
|
|
2966eb1e2a | ||
|
|
b103427ba2 | ||
|
|
e6e11267a4 | ||
|
|
d92d1a7fec | ||
|
|
e2d40e2ed5 | ||
|
|
24bd6cd64b | ||
|
|
9fb64ce140 | ||
|
|
4b37647123 | ||
|
|
e6477b7758 | ||
|
|
ceced45130 | ||
|
|
cfa27376f0 | ||
|
|
6362eaf5c2 | ||
|
|
2e75218a6d | ||
|
|
2678758d70 | ||
|
|
f6f9a7f879 | ||
|
|
192b4e759c | ||
|
|
fdfdd62737 | ||
|
|
a2e5aafffb | ||
|
|
c15d5d6a61 | ||
|
|
6a7a0c712c | ||
|
|
f1d125a202 | ||
|
|
993013603c | ||
|
|
aeb3cfb0d7 | ||
|
|
ec561e6a61 | ||
|
|
0688de2c6c | ||
|
|
26ead84646 | ||
|
|
7eeef88b93 | ||
|
|
0340efbb60 | ||
|
|
9ff7d16b23 | ||
|
|
6329213e58 | ||
|
|
9a54bb1809 | ||
|
|
3c7e62bfef | ||
|
|
7ab21dad9b | ||
|
|
7a934afd4f | ||
|
|
3cb80dc973 | ||
|
|
c410747b19 | ||
|
|
bddd8484b3 | ||
|
|
e6df4deca2 | ||
|
|
5794a1005a | ||
|
|
9ddbdf7d2c | ||
|
|
571440b52b | ||
|
|
e48a99eba5 | ||
|
|
68b3b15693 | ||
|
|
1b334f5ed4 | ||
|
|
8949554d97 | ||
|
|
cd214977c6 | ||
|
|
d44cc3ceeb | ||
|
|
5424776536 | ||
|
|
bff4c929b1 | ||
|
|
86febb5b1a | ||
|
|
6ad134fb4b | ||
|
|
4995d6c80e | ||
|
|
48f9b6cbb7 | ||
|
|
1dd3e47cea | ||
|
|
eb46fbf1bd | ||
|
|
61d0aebce8 | ||
|
|
87cc036342 | ||
|
|
8102e4785f | ||
|
|
d861de4cde | ||
|
|
4d69b24990 | ||
|
|
71675abc18 | ||
|
|
f1a3b7bec1 | ||
|
|
5c33fa6e83 | ||
|
|
21617270bc | ||
|
|
1fdaa4af14 | ||
|
|
37918f7d15 | ||
|
|
3d83b80dd6 | ||
|
|
5abf4f0c1c | ||
|
|
9d8d5f705f | ||
|
|
f7f3d10677 | ||
|
|
ec87edc15e | ||
|
|
c0f2c74d94 | ||
|
|
8ec26208e0 | ||
|
|
4e5bd87fb1 | ||
|
|
bae271c09b | ||
|
|
0af4042eee | ||
|
|
053a8843a9 | ||
|
|
5d0634e691 | ||
|
|
f5ffe1bd8d | ||
|
|
bedb25eb7e | ||
|
|
8dd6ddb514 | ||
|
|
a319c3c35e | ||
|
|
cf1d3132ac | ||
|
|
27752e6214 | ||
|
|
c6b98d2f41 | ||
|
|
7874fd0e65 | ||
|
|
8256205a47 | ||
|
|
92356c097b | ||
|
|
e62d0804db | ||
|
|
84c49f193e | ||
|
|
d210e8b409 | ||
|
|
1e8e36249a | ||
|
|
f4cf8ed9d8 | ||
|
|
cc5db25fe5 | ||
|
|
984db76c2d | ||
|
|
6350b23477 | ||
|
|
c44f4b90d8 | ||
|
|
df7ecaac7a | ||
|
|
4235ce9358 | ||
|
|
b81d53ee48 | ||
|
|
d6d2313f5b | ||
|
|
0441493a34 | ||
|
|
68fa1548f9 | ||
|
|
5885abc550 | ||
|
|
82973d9383 | ||
|
|
a7926263e9 | ||
|
|
e5206bbe96 | ||
|
|
32fa9bd98c | ||
|
|
d1c6d00baf | ||
|
|
2f30cae07a | ||
|
|
8da3e972cc | ||
|
|
f8ac05037f | ||
|
|
b465d23127 | ||
|
|
14f9ca6ad3 | ||
|
|
0f704d2ebf | ||
|
|
e1c744c139 | ||
|
|
634d9c6c46 | ||
|
|
ae40f6141a | ||
|
|
6193f602b6 | ||
|
|
2eb40523b3 | ||
|
|
39c1adb1a3 | ||
|
|
9e20f72e7d | ||
|
|
cc3bd7e82c | ||
|
|
307e3febbe | ||
|
|
c15e67001e | ||
|
|
0e66c59dab | ||
|
|
070e2d35cb | ||
|
|
b426533954 | ||
|
|
a4814e23ae | ||
|
|
6a1b95ce29 | ||
|
|
a08bae0a5c | ||
|
|
06fb11d9d6 | ||
|
|
bb01894350 | ||
|
|
5218e89d04 | ||
|
|
52d6614961 | ||
|
|
0e4881bfa8 | ||
|
|
f76f7ad47d | ||
|
|
25ca5805b9 | ||
|
|
b4e559b544 | ||
|
|
7c8a7caba1 | ||
|
|
3f1bafd90c | ||
|
|
4b16d93d68 | ||
|
|
b3dbbde1f5 | ||
|
|
fc3eff4881 | ||
|
|
0d2be1e432 | ||
|
|
269207ca85 | ||
|
|
8d50698c72 | ||
|
|
eae4571a77 | ||
|
|
2f5bdbae3f | ||
|
|
48f94432a8 | ||
|
|
a9f5198687 | ||
|
|
1a0b8cf3d6 | ||
|
|
77f0ae3011 | ||
|
|
ae7c3dbd6a | ||
|
|
c0ec3a19f2 | ||
|
|
63ade1f3bc | ||
|
|
4b7ac76144 | ||
|
|
9e75a488ea | ||
|
|
ff277f265f | ||
|
|
175b140bdf | ||
|
|
cfd1ec2abe | ||
|
|
575d701334 | ||
|
|
749d7d0fa3 | ||
|
|
1e694868f5 | ||
|
|
55c8c9cfb6 | ||
|
|
67131b3aca | ||
|
|
fb55b01094 | ||
|
|
dee99ae06c | ||
|
|
f0d938578d | ||
|
|
49b3aba96b | ||
|
|
b8e4080339 | ||
|
|
9c140181fa | ||
|
|
cb1a93244b | ||
|
|
0db99775c7 | ||
|
|
1fbcf09ef4 | ||
|
|
7b2c9e4db9 | ||
|
|
344deabf79 | ||
|
|
91abbb7f17 | ||
|
|
4b3b84df8f | ||
|
|
2cec773c91 | ||
|
|
910572fdf2 | ||
|
|
f9e6dd3e5a | ||
|
|
a92cb7b5d3 | ||
|
|
9e5337d240 | ||
|
|
c6cdd30f4f | ||
|
|
416c05bca1 | ||
|
|
44de3ef45b | ||
|
|
423dbdae70 | ||
|
|
a4198da68d | ||
|
|
f14576bd59 | ||
|
|
10bb86dc98 | ||
|
|
32f6fc0d35 | ||
|
|
2d1196849c | ||
|
|
2360bbcbb1 | ||
|
|
7e14dc8e6a | ||
|
|
313b19b894 | ||
|
|
b00bee5745 | ||
|
|
617d50080f | ||
|
|
95b265ed4d | ||
|
|
86c052aa82 | ||
|
|
b3c209a235 | ||
|
|
c361426dc0 | ||
|
|
5af2011055 | ||
|
|
61bc4f2da4 | ||
|
|
e2f4cbff29 | ||
|
|
2b1cc4796e | ||
|
|
b1c4c0b83c | ||
|
|
7f3d1ae1b8 | ||
|
|
c01755e16a | ||
|
|
e5d8d22a7f | ||
|
|
a7b7e2fe60 | ||
|
|
42582fb0e1 | ||
|
|
77dfd44ae2 | ||
|
|
2a20acd443 | ||
|
|
9d868348bf | ||
|
|
bb9f15fe0d | ||
|
|
e326cd3c2b | ||
|
|
01cdc39326 | ||
|
|
6754d75cdc | ||
|
|
5340b984ef | ||
|
|
70ca43e566 | ||
|
|
17d14953ec | ||
|
|
a8a03d7e73 | ||
|
|
0f8140753c | ||
|
|
200564a6a8 | ||
|
|
b051c6f099 | ||
|
|
5d98fd023e | ||
|
|
2795384484 | ||
|
|
ae6079e862 | ||
|
|
8bd902133a | ||
|
|
397f4c90a8 | ||
|
|
243931937a | ||
|
|
238dfcbaaf | ||
|
|
611e8f238b | ||
|
|
258081ee31 | ||
|
|
f24e218eb5 | ||
|
|
39929e7ad5 | ||
|
|
f8cc5b6750 | ||
|
|
0db2226e1a | ||
|
|
d0af1cec90 | ||
|
|
ec389a6509 | ||
|
|
e1c6a2999f | ||
|
|
1f39fc75b9 | ||
|
|
f22e98fb0c | ||
|
|
9e6fc6a738 | ||
|
|
82418535ff | ||
|
|
890f032375 | ||
|
|
6ca90b52bc | ||
|
|
8fe6599e08 | ||
|
|
0b98dc3208 | ||
|
|
cd77388c36 | ||
|
|
541ce591b2 | ||
|
|
ced7f27428 | ||
|
|
adba9affee | ||
|
|
effb5e9e4e | ||
|
|
f35f0de6ca | ||
|
|
110fc9e50a | ||
|
|
eed5d3a3d3 | ||
|
|
417f306b43 | ||
|
|
2819166dfd | ||
|
|
087c60e58e | ||
|
|
ca574a6b8c | ||
|
|
1269446ba7 | ||
|
|
05c902c11c | ||
|
|
590dac3390 | ||
|
|
8898ac4009 | ||
|
|
39705649a2 | ||
|
|
185670b264 | ||
|
|
01346f0613 | ||
|
|
1879848120 | ||
|
|
c4429b83eb | ||
|
|
770cd127db | ||
|
|
42a6cc275e | ||
|
|
03bd52d730 | ||
|
|
d196671255 | ||
|
|
481714dd23 | ||
|
|
a341bac7cc | ||
|
|
273cc4418a | ||
|
|
f0a7d68959 | ||
|
|
cf6fc5a723 | ||
|
|
b4b5faf2ba | ||
|
|
22d89dd992 | ||
|
|
281c0a470b | ||
|
|
dedf9a2e95 | ||
|
|
4b19fbb141 | ||
|
|
3bd4069304 | ||
|
|
bcc7bdbc09 | ||
|
|
a7a9ceaf7a | ||
|
|
14f8d96f11 | ||
|
|
01bff8d972 | ||
|
|
9dac57f8b4 | ||
|
|
bfdc3d43cc | ||
|
|
cb783ccf80 | ||
|
|
c510585fbd | ||
|
|
fef6005f75 | ||
|
|
da32d7e5b1 | ||
|
|
dd968b8274 | ||
|
|
64634a9a94 | ||
|
|
6528bd2f01 | ||
|
|
5aaae7077c | ||
|
|
98e3f22bd6 | ||
|
|
88c2e5c691 | ||
|
|
35eb427a83 | ||
|
|
62817d8369 | ||
|
|
0f1d615108 | ||
|
|
47f827e015 | ||
|
|
5c7edb2d6a | ||
|
|
04d0c61b2e | ||
|
|
047a34cff2 | ||
|
|
a96136cfd9 | ||
|
|
32d4567c24 | ||
|
|
d300c026f9 | ||
|
|
1d84c240a8 | ||
|
|
6c8f51af22 | ||
|
|
6d10f56a98 | ||
|
|
32fbf8d9f2 | ||
|
|
842c6a9dac | ||
|
|
26cce08fd5 | ||
|
|
0d0a824869 | ||
|
|
a29d87296d | ||
|
|
af07e2ddfd | ||
|
|
7a8d9432bd | ||
|
|
54a90186dd | ||
|
|
fd2ef4335b | ||
|
|
c16d7e6111 | ||
|
|
3937595aad | ||
|
|
9454be263d | ||
|
|
9a4b01f760 | ||
|
|
5202455301 | ||
|
|
8447162869 | ||
|
|
ad25df94cb | ||
|
|
bdb4f39c4c | ||
|
|
f55acb4220 | ||
|
|
49484943fc | ||
|
|
c63b2bd94a | ||
|
|
55b0ce2118 | ||
|
|
3a7a00d490 | ||
|
|
2fb6ef096d | ||
|
|
a0e5c4614b | ||
|
|
a50a60c528 | ||
|
|
e8be52e366 | ||
|
|
ebaed23681 | ||
|
|
8dab15d593 | ||
|
|
96c3ac8eed | ||
|
|
4d021c4681 | ||
|
|
b73e24cbe9 | ||
|
|
9dad127ef3 | ||
|
|
0491b1ede8 | ||
|
|
b2009a92f6 | ||
|
|
6eaf631943 | ||
|
|
614f5033e7 | ||
|
|
17eb851d4b | ||
|
|
4b943f0f7a | ||
|
|
eca64fda08 | ||
|
|
d078c6fc37 | ||
|
|
0fad489ec7 | ||
|
|
4f5d04d771 | ||
|
|
52351348dc | ||
|
|
5dc465cee0 | ||
|
|
aa6df8bbcb | ||
|
|
b1ea3c7ccb | ||
|
|
d398c141cf | ||
|
|
b2cc2ab931 | ||
|
|
afd5fe8cdc | ||
|
|
8179450da2 | ||
|
|
289e897e27 | ||
|
|
a16caa7849 | ||
|
|
e150a2bf22 | ||
|
|
8d9704b37b | ||
|
|
c076a005a0 | ||
|
|
2ccba7f101 | ||
|
|
50edd9e5e2 | ||
|
|
b8574ad1fb | ||
|
|
8d9c5b9d8d | ||
|
|
04d74f1c04 | ||
|
|
a1b7598810 | ||
|
|
902783b851 | ||
|
|
cb6b057f92 | ||
|
|
9055670e7d | ||
|
|
ed107d6b35 | ||
|
|
b46b278d5c | ||
|
|
411c9a8538 | ||
|
|
1785f5fb8d | ||
|
|
c986354648 | ||
|
|
904d01684b | ||
|
|
e1c3d30fbf | ||
|
|
4cabf9f53e | ||
|
|
d9413606ab | ||
|
|
d0c12b8fc2 | ||
|
|
d0e7a5211a | ||
|
|
c1a8dc4cc5 | ||
|
|
9614cff5e5 | ||
|
|
3699d19042 | ||
|
|
7e3c3d558a | ||
|
|
e36a02cea6 | ||
|
|
b959958dfc | ||
|
|
632f479e0f | ||
|
|
545fb1ef00 | ||
|
|
876f8296a8 | ||
|
|
5fe5335a5c | ||
|
|
c7f1d633ff | ||
|
|
05dc0147c1 | ||
|
|
35aa7379a5 | ||
|
|
4c839ba817 | ||
|
|
7b34f4fe1c | ||
|
|
6970094a12 | ||
|
|
b159e48a0a | ||
|
|
88aa12e60b | ||
|
|
07b58a8a50 | ||
|
|
2fca0a3203 | ||
|
|
02d203a248 | ||
|
|
72263db4de | ||
|
|
836a3c6212 | ||
|
|
b6b65cd43a | ||
|
|
4892142df2 | ||
|
|
7cdea06f59 | ||
|
|
b629e6ba35 | ||
|
|
51836dd8d4 | ||
|
|
a1d3b606ea | ||
|
|
1064dea5db | ||
|
|
672094ca0a | ||
|
|
3e7fba84f8 | ||
|
|
3746e6b343 | ||
|
|
5748a8e927 | ||
|
|
353fb41a55 | ||
|
|
00460754ee | ||
|
|
3abf8e5f27 | ||
|
|
614847935f | ||
|
|
a93c3d3c63 | ||
|
|
ef4c7218cf | ||
|
|
bf15b7ad09 | ||
|
|
f0e4bf7b09 | ||
|
|
b6dc09a5b5 | ||
|
|
8793be0588 | ||
|
|
59f9cf03df | ||
|
|
4d222e7992 | ||
|
|
baaead6895 | ||
|
|
bfb16d5a8b | ||
|
|
fe93b27515 | ||
|
|
8a7e71c0f2 | ||
|
|
d30e88fff2 | ||
|
|
f329624b9e | ||
|
|
a98be921da | ||
|
|
56d75bc2ab | ||
|
|
81a1569a24 | ||
|
|
d5f69687f6 | ||
|
|
0b921ef4db | ||
|
|
9bfd4246ec | ||
|
|
2d28d448bf | ||
|
|
32cacd4b0d | ||
|
|
28576c1ad9 | ||
|
|
3355b97d26 | ||
|
|
e62cfdbf8d | ||
|
|
ee12dc56d1 | ||
|
|
00073745c9 | ||
|
|
ea6842d94c | ||
|
|
ddbcbd6481 | ||
|
|
9c17767484 | ||
|
|
cc4e4bde3c | ||
|
|
6a1b72638e | ||
|
|
23f49acbc4 | ||
|
|
8d2664e0cc | ||
|
|
12787f8f0e | ||
|
|
ac39e81db4 | ||
|
|
4df87953f3 | ||
|
|
63691306e0 | ||
|
|
c43dfcb7e0 | ||
|
|
878c908829 | ||
|
|
63d7857e71 | ||
|
|
ca39ae1c14 | ||
|
|
45af45d73e | ||
|
|
98b60e9d18 | ||
|
|
01af0ffc24 | ||
|
|
46b7682b50 | ||
|
|
1087690f59 | ||
|
|
824669c684 | ||
|
|
789dbb813a | ||
|
|
b2e7cc4afc | ||
|
|
ba708e0a87 | ||
|
|
ac511992e2 | ||
|
|
3a15a74129 | ||
|
|
7b50951c80 | ||
|
|
7cacdd9512 | ||
|
|
c04dbb6d7c | ||
|
|
68b096aceb | ||
|
|
96ba747663 | ||
|
|
8a8bdce98f | ||
|
|
09cbb365d4 | ||
|
|
42db89cdb1 | ||
|
|
3b01e8f6f9 | ||
|
|
a470ab442a | ||
|
|
ab1cad05a2 | ||
|
|
4182eecc43 | ||
|
|
e723b22ecd | ||
|
|
b0b0fd3a64 | ||
|
|
1a88f572cc | ||
|
|
6bfe952bfa | ||
|
|
ac2b54457f | ||
|
|
59aa87a823 | ||
|
|
9f013a59a6 | ||
|
|
625ccd2c6d | ||
|
|
68c5a67bde | ||
|
|
adc2a3e623 | ||
|
|
413ae17f21 | ||
|
|
02bca1130b | ||
|
|
ebb243d574 | ||
|
|
d2959e5266 | ||
|
|
6ff7754151 | ||
|
|
ffb37d670a | ||
|
|
b5cd1a018f | ||
|
|
a5ce8f0234 | ||
|
|
853d6542eb | ||
|
|
9aa4a299d9 | ||
|
|
0efbfe6293 | ||
|
|
e44913f67c | ||
|
|
98ce13b8b5 | ||
|
|
797f418f5b | ||
|
|
faab4b3c18 | ||
|
|
b02ed4e588 | ||
|
|
2c572199cf | ||
|
|
a622bb6c89 | ||
|
|
4f040c9ab2 | ||
|
|
f00abbb42f | ||
|
|
ba645aa787 | ||
|
|
a5cd569f01 | ||
|
|
dd952714f9 | ||
|
|
965f92cd7d | ||
|
|
297cf35eeb | ||
|
|
1ecc9f060e | ||
|
|
1983bc2424 | ||
|
|
94c08cfd89 | ||
|
|
376cbbc3b8 | ||
|
|
0ae74d8fe3 | ||
|
|
3d51081294 | ||
|
|
d3bf05b6e0 | ||
|
|
c5b95bc303 | ||
|
|
7a08bf6b46 | ||
|
|
d6fca7b6a1 | ||
|
|
f989f5d84d | ||
|
|
d07b5e8b05 | ||
|
|
f6bfdd54b6 | ||
|
|
769ce6d79d | ||
|
|
3acee1f7d9 | ||
|
|
260139052a | ||
|
|
cd77beee43 | ||
|
|
8c331c3e5f | ||
|
|
64cbc15568 | ||
|
|
2fe3d84b4b | ||
|
|
182fc61c82 | ||
|
|
157c548d0d | ||
|
|
60ab6ac729 | ||
|
|
6092c283bc | ||
|
|
c9a354d238 | ||
|
|
2596c9437b | ||
|
|
746574d8cb | ||
|
|
bb6faab2af | ||
|
|
eea0050dba | ||
|
|
d269ef69a8 | ||
|
|
9bd2866cf0 | ||
|
|
117f5fa115 | ||
|
|
f6b85040f6 | ||
|
|
cc84d689ee | ||
|
|
aeda24cba0 | ||
|
|
9bdb60ac4c | ||
|
|
1ba88343b3 | ||
|
|
2eed9cc19e | ||
|
|
6ad11e123a | ||
|
|
9dcde5fdf0 | ||
|
|
19f3854dc1 | ||
|
|
475d49d14b | ||
|
|
36215f0d96 | ||
|
|
880f33b208 | ||
|
|
33841362bf | ||
|
|
e2b2366481 | ||
|
|
1e6c33527b | ||
|
|
f27e9199d4 | ||
|
|
fee582a2bf | ||
|
|
1396bddb18 | ||
|
|
697b37b971 | ||
|
|
881e9e23d6 | ||
|
|
8a2506b1cf | ||
|
|
826008551c | ||
|
|
f1a31de286 | ||
|
|
6177369408 | ||
|
|
7084dede2f | ||
|
|
27f3ad7e73 | ||
|
|
ab82930118 | ||
|
|
7b0d9168f5 | ||
|
|
97835f7bf0 | ||
|
|
8175cd6e82 | ||
|
|
b3549c49a7 | ||
|
|
dca4a21487 | ||
|
|
2968ec6552 | ||
|
|
3e4efddd0c | ||
|
|
52ce7ae26b | ||
|
|
e4ef921c0a | ||
|
|
e0acccf634 | ||
|
|
907627cbf6 | ||
|
|
571577f457 | ||
|
|
b1da06b6a8 | ||
|
|
f2df4a8315 | ||
|
|
27b7bb253b | ||
|
|
ebf34d5966 | ||
|
|
50b4cc073e | ||
|
|
8c29796f4c | ||
|
|
6b1e320bd6 | ||
|
|
ca0080f251 | ||
|
|
9fb4790816 | ||
|
|
afeed42931 | ||
|
|
aee4969748 | ||
|
|
45d331726a | ||
|
|
b9adabc231 | ||
|
|
36aa322a24 | ||
|
|
e7530fe781 | ||
|
|
3344771d02 | ||
|
|
289a09be00 | ||
|
|
4887e81a1c | ||
|
|
12c6d37d6f | ||
|
|
05aaa781d4 | ||
|
|
0aa9afe19b | ||
|
|
7bcc73ac82 | ||
|
|
95d80ee7d7 | ||
|
|
19f8d57a9f | ||
|
|
d0e262473d | ||
|
|
fd0b73c27a | ||
|
|
340a9c030e | ||
|
|
11f8ca6507 | ||
|
|
2774c48168 | ||
|
|
a7523c2a99 | ||
|
|
f786dfe9de | ||
|
|
ade6eeac78 | ||
|
|
f37ca0d2f6 | ||
|
|
6759a8e19c | ||
|
|
6cd1518a15 | ||
|
|
350c8420d9 | ||
|
|
1dc1a1fac3 | ||
|
|
81fe123ca2 | ||
|
|
e0306fbfb1 | ||
|
|
44c369dc50 | ||
|
|
ca1bcc3566 | ||
|
|
b722ab6006 | ||
|
|
1d7529cb93 | ||
|
|
d2a0249e35 | ||
|
|
83488137f5 | ||
|
|
5b68a7a5ad | ||
|
|
b839f00187 | ||
|
|
d5451d825d | ||
|
|
a687221087 | ||
|
|
e641692b53 | ||
|
|
e9f8c7d2c0 | ||
|
|
9f31da95d8 | ||
|
|
df903fa77a | ||
|
|
e505881586 | ||
|
|
2598069667 | ||
|
|
989f02c577 | ||
|
|
16e9609e1a | ||
|
|
5563c3ec1e | ||
|
|
cc8f3a3c88 | ||
|
|
9618968d38 | ||
|
|
a541c3e525 | ||
|
|
0d47ad3fd7 | ||
|
|
42d3cdf412 | ||
|
|
7c690c7e45 | ||
|
|
4023747c1c | ||
|
|
9d98268d27 | ||
|
|
d7879ebaec | ||
|
|
dd0de388f7 | ||
|
|
ef78544ef9 | ||
|
|
60d19c85f2 | ||
|
|
9a526e5737 | ||
|
|
fb6737e64f | ||
|
|
9e2c2b8131 | ||
|
|
8b104a297f | ||
|
|
9b74340136 | ||
|
|
7272af282d | ||
|
|
f76d70472b | ||
|
|
b93f796a2c | ||
|
|
0a62b36c47 | ||
|
|
398fda071b | ||
|
|
8167cfefd2 | ||
|
|
7a74447de5 | ||
|
|
740683caf8 | ||
|
|
8b656c957b | ||
|
|
d52bafd4f3 | ||
|
|
2de1d9e827 | ||
|
|
7e14628529 | ||
|
|
7cf4529946 | ||
|
|
65ae4d29e0 | ||
|
|
96db264e52 | ||
|
|
76f66976c3 | ||
|
|
ae3e2f9bcb | ||
|
|
b58ecd022d | ||
|
|
815d7be24c | ||
|
|
e916a21eea | ||
|
|
8306396cb8 | ||
|
|
ec7f10f424 | ||
|
|
d686cdfb8b | ||
|
|
63f15cbaf0 | ||
|
|
d1ff082212 | ||
|
|
14c3f1886f | ||
|
|
1d7e194c26 | ||
|
|
dccb4efbb7 | ||
|
|
79099d4ba2 | ||
|
|
9d5f4a6861 | ||
|
|
22705d1406 | ||
|
|
16e93186e6 | ||
|
|
d8c922eb6a | ||
|
|
d54a513d12 | ||
|
|
8de5d5d1c7 | ||
|
|
155a74d95d | ||
|
|
190d930c2c | ||
|
|
d016f4dacb | ||
|
|
d3cae73a86 | ||
|
|
247600e607 | ||
|
|
03746598ab | ||
|
|
f903d110e4 | ||
|
|
42da45e807 | ||
|
|
44516bb79e | ||
|
|
64696a8380 | ||
|
|
915f15fd21 | ||
|
|
0e23311aea | ||
|
|
2ec3022eae | ||
|
|
96e7b01496 | ||
|
|
b305ac96fb | ||
|
|
1cc03e8775 | ||
|
|
656e675326 | ||
|
|
c2b9e88585 | ||
|
|
fc1ba2bd74 | ||
|
|
6eaa812eab | ||
|
|
61483af38a | ||
|
|
8f85844370 | ||
|
|
a36679f1ee | ||
|
|
aab55771c5 | ||
|
|
0295b1d525 | ||
|
|
27d7f3537c | ||
|
|
9d18abcd46 | ||
|
|
71fd1ce7ad | ||
|
|
2ab5cdb33b | ||
|
|
fff0865d6e | ||
|
|
0b492b519d | ||
|
|
a0080952c1 | ||
|
|
a31b303eec | ||
|
|
e7d702598f | ||
|
|
eaed0d4cd6 | ||
|
|
3727fcad6a | ||
|
|
4b81064289 | ||
|
|
2af05e8e75 | ||
|
|
5b6328b3cd | ||
|
|
85f5f7365b | ||
|
|
b514ab9547 | ||
|
|
bb82bc1d6e | ||
|
|
70f6bbf980 | ||
|
|
91c1aace9e | ||
|
|
a0256d7bba | ||
|
|
28366130d1 | ||
|
|
24d1dfd3e8 | ||
|
|
d2b5191ca7 | ||
|
|
a2b26cf426 | ||
|
|
71135979d8 | ||
|
|
a9780d51dc | ||
|
|
99bae5c1a3 | ||
|
|
d4c026be2f | ||
|
|
e4e6bf074e | ||
|
|
633301f365 | ||
|
|
fd4dfbf6ce | ||
|
|
5236543d3d | ||
|
|
d04ef3f4f4 | ||
|
|
cc24509cdd | ||
|
|
aa189aed40 | ||
|
|
b977ae03cf | ||
|
|
ceb62f91c1 | ||
|
|
c03b7389e9 | ||
|
|
0d82787073 | ||
|
|
75200911cf | ||
|
|
1a90afb018 | ||
|
|
1d1a7be644 | ||
|
|
1c95de7214 | ||
|
|
8aadb7b0f5 | ||
|
|
e99de1ba6a | ||
|
|
066e8e0034 | ||
|
|
951fa75e15 | ||
|
|
989c844f56 | ||
|
|
cd49d0733f | ||
|
|
25f86b0a31 | ||
|
|
f7f72e9f56 | ||
|
|
33a14dd378 | ||
|
|
00794ab032 | ||
|
|
c5039fa7c3 | ||
|
|
973d64a113 | ||
|
|
b8a66f2229 | ||
|
|
2acf75e7b1 | ||
|
|
5a12c7eaf4 | ||
|
|
19f4ff80ec | ||
|
|
24b53619b9 | ||
|
|
b7c7a43083 | ||
|
|
125ccb8962 | ||
|
|
a8f57a2a09 | ||
|
|
89ded9f2c1 | ||
|
|
2ddba7f54d | ||
|
|
fbe3b4b3e4 | ||
|
|
e5564dd81c | ||
|
|
9120427650 | ||
|
|
b67cb2d19e | ||
|
|
612da61223 | ||
|
|
ad8cc9e0a4 | ||
|
|
a206754575 | ||
|
|
6c96193f72 | ||
|
|
bc915ef5a1 | ||
|
|
6f3441d6db | ||
|
|
7414232bc6 | ||
|
|
224613c112 | ||
|
|
e03c184817 | ||
|
|
68910b759b | ||
|
|
543bb05d32 | ||
|
|
59440c7acb | ||
|
|
f6a7354f4f | ||
|
|
77fd1b1186 | ||
|
|
ed8e0b3df1 | ||
|
|
e5f56cb322 | ||
|
|
2cc4019779 | ||
|
|
f05e1ecf85 | ||
|
|
6737267d2d | ||
|
|
0fe585f731 | ||
|
|
2029be5fcc | ||
|
|
0326465a2d | ||
|
|
559be69a7d | ||
|
|
79df443023 | ||
|
|
11979bf8b0 | ||
|
|
7a445e8525 | ||
|
|
ab02b4175d | ||
|
|
ee8720ed09 | ||
|
|
0522380c13 | ||
|
|
75378e69c2 | ||
|
|
776bc7770e | ||
|
|
3a3247cfda | ||
|
|
6ebc2b48c7 | ||
|
|
a724dafe98 | ||
|
|
cc63eaa79a | ||
|
|
41cfb66736 | ||
|
|
e509d36fdc | ||
|
|
99eebad482 | ||
|
|
ef0cd8efc8 | ||
|
|
80d539b2df | ||
|
|
3ffd653d2d | ||
|
|
ccfadc4221 | ||
|
|
fbc4d4d738 | ||
|
|
2a928a7263 | ||
|
|
1946585c1b | ||
|
|
a63efe1fa9 | ||
|
|
f46bb3a03d | ||
|
|
57e21066ab | ||
|
|
409fc199e0 | ||
|
|
f7fefcde9c | ||
|
|
1d3acf411b | ||
|
|
1083b5ed3f | ||
|
|
77820b134c | ||
|
|
b450e6f265 | ||
|
|
cc50427ae3 | ||
|
|
7d49ea1eab | ||
|
|
cd31802fc7 | ||
|
|
d6d45efc39 | ||
|
|
a421c5c3cb | ||
|
|
9d877b46d9 | ||
|
|
30b1e84b37 | ||
|
|
31cb5e8a4a | ||
|
|
c353fc7c7c | ||
|
|
769082db9c | ||
|
|
6ec11bf0a8 | ||
|
|
30abf0242c | ||
|
|
333a97a829 | ||
|
|
c8bf252ff6 | ||
|
|
b5cda20163 | ||
|
|
435854934f | ||
|
|
05087fb663 | ||
|
|
afb7895433 | ||
|
|
93af574386 | ||
|
|
01f9ec08ab | ||
|
|
0269d33af2 | ||
|
|
e6de08c26d | ||
|
|
677aa3f90c | ||
|
|
809453e40a | ||
|
|
0a8db14315 | ||
|
|
b2cf7163fb | ||
|
|
b8811e587a | ||
|
|
9fb1b94f34 | ||
|
|
e7ca26ec9a | ||
|
|
71f113a8a1 | ||
|
|
cb29b09250 | ||
|
|
3757a561e5 | ||
|
|
ff0949ac02 | ||
|
|
73e47e81c2 | ||
|
|
1361de769c | ||
|
|
a687037a36 | ||
|
|
d935d69bc2 | ||
|
|
2cfccc28bf | ||
|
|
c21b14847b | ||
|
|
7c37b51e40 | ||
|
|
12d05841be | ||
|
|
d40952f519 | ||
|
|
413e4207f5 | ||
|
|
245692f531 | ||
|
|
7a40588606 | ||
|
|
b1d1d5beaf | ||
|
|
436cef62bf | ||
|
|
96545be6c1 | ||
|
|
b995fdc81a | ||
|
|
4da88f326a | ||
|
|
7eb1a55b8c | ||
|
|
c42c40df83 | ||
|
|
75cd67b18d | ||
|
|
35906ec920 | ||
|
|
db1650a9d6 | ||
|
|
275494af3f | ||
|
|
3110fac2c6 | ||
|
|
4b1665edd5 | ||
|
|
251c5d66dc | ||
|
|
1203361a74 | ||
|
|
270d766ed3 | ||
|
|
b8c616a074 | ||
|
|
61bc27d57e | ||
|
|
ce3c338cee | ||
|
|
ada43862ad | ||
|
|
de0ceebba6 | ||
|
|
159700b2df | ||
|
|
d89db93145 | ||
|
|
3e8b2e9b16 | ||
|
|
19010e9ce8 | ||
|
|
74dd879953 | ||
|
|
b63c763c09 | ||
|
|
a399b7cea0 | ||
|
|
de9e2b2f64 | ||
|
|
2c9fa536ab | ||
|
|
fe54e6c85a | ||
|
|
ce9ac86ef5 | ||
|
|
9454424a06 | ||
|
|
3405ed878f | ||
|
|
1ae8b563d6 | ||
|
|
6ade08b8d9 | ||
|
|
4110d233ac | ||
|
|
d2528b6f70 | ||
|
|
019f219ef8 | ||
|
|
c3d6a33966 | ||
|
|
1688ff4daa | ||
|
|
eb484b1950 | ||
|
|
0de7eece6d | ||
|
|
6d583f4ac3 | ||
|
|
d13134dd4a | ||
|
|
2892b45631 | ||
|
|
dfcbcad066 | ||
|
|
f97c68dbe2 | ||
|
|
199967f948 | ||
|
|
134d91fb06 | ||
|
|
450953f711 | ||
|
|
719a169a66 | ||
|
|
7421179be0 | ||
|
|
886eec5e66 | ||
|
|
1d782c6a35 | ||
|
|
8104e7f17c | ||
|
|
9aee5bd4e2 | ||
|
|
43a205c2d5 | ||
|
|
3847bf216d | ||
|
|
deb35c8f6f | ||
|
|
dd2fd782c1 | ||
|
|
965dfb7a09 | ||
|
|
93eca2df02 | ||
|
|
e070db97ed | ||
|
|
26457b7234 | ||
|
|
d68cf0f091 | ||
|
|
03cbeec5d0 | ||
|
|
8a71c873c4 | ||
|
|
77b86d27b3 | ||
|
|
d8ec02d27c | ||
|
|
883db7eaa0 | ||
|
|
f5f2da6a57 | ||
|
|
8f894dae9b | ||
|
|
fb64271f07 | ||
|
|
01e91ec61a | ||
|
|
40479f54f6 | ||
|
|
80eb8f5e1d | ||
|
|
c793ab9284 | ||
|
|
e9b0687547 | ||
|
|
6c53187366 | ||
|
|
be199c574a | ||
|
|
b99dd7d0ff | ||
|
|
aa5286e483 | ||
|
|
f0a65bf721 | ||
|
|
0f41a9cd75 | ||
|
|
737aa36ec9 | ||
|
|
82c3485ed6 | ||
|
|
269bf9a947 | ||
|
|
1ad9f2d482 | ||
|
|
a592711adb | ||
|
|
3603cc15cf | ||
|
|
747e725c8f | ||
|
|
ebb236bbc4 | ||
|
|
05cf6f8bec | ||
|
|
51d8a29d96 | ||
|
|
69d14dbcff | ||
|
|
e9970736ad | ||
|
|
263436eb45 | ||
|
|
9d53747be1 | ||
|
|
e1bce7ceb5 | ||
|
|
a113ae4cd2 | ||
|
|
b2c0572f3e | ||
|
|
501563d215 | ||
|
|
4325b0b00c | ||
|
|
09c1b8e6ca | ||
|
|
6757a12177 | ||
|
|
b90d7892e4 | ||
|
|
f1e53df76e | ||
|
|
6f9b44a7ae | ||
|
|
d2dee78bc7 | ||
|
|
af67aea49b | ||
|
|
1d3fc6254a | ||
|
|
479b235f28 | ||
|
|
c5c6958dee | ||
|
|
740a14c84b | ||
|
|
86a12cce8d | ||
|
|
3c6d4b13d5 | ||
|
|
caf4071cd9 | ||
|
|
9b1d960334 | ||
|
|
40ecedaf74 | ||
|
|
add9ca6ae8 | ||
|
|
b251fe56e4 | ||
|
|
4d1307c2ee | ||
|
|
4562baba31 | ||
|
|
a3aa69849d | ||
|
|
f06231eae0 | ||
|
|
cd4b4fb64d | ||
|
|
d952854591 | ||
|
|
c3ff8f1268 | ||
|
|
0f705361f3 | ||
|
|
9890c942da | ||
|
|
bbb2eda626 | ||
|
|
92b694a46c | ||
|
|
5f5032b4fd | ||
|
|
47b5ecf40b | ||
|
|
deb2213d1c | ||
|
|
553de2be46 | ||
|
|
c9459dfe44 | ||
|
|
c2dd0a67b6 | ||
|
|
278c63938d | ||
|
|
84ed87e322 | ||
|
|
0e442767f7 | ||
|
|
deaacba25e | ||
|
|
18050712d2 | ||
|
|
f131044643 | ||
|
|
c1c6fb721e | ||
|
|
330596eff2 | ||
|
|
9c08e8c4b2 | ||
|
|
c05972396f | ||
|
|
d631e1f8b4 | ||
|
|
05aa9fc425 | ||
|
|
db724a3c6c | ||
|
|
053d76507c | ||
|
|
28f0d9ecec | ||
|
|
249bc9fdb0 | ||
|
|
11064c631f | ||
|
|
3d834e763e | ||
|
|
4eedfb0273 | ||
|
|
b30e598998 | ||
|
|
1978c17e6c | ||
|
|
37ca1f07a0 | ||
|
|
64c3f8f5c2 | ||
|
|
68585a70ab | ||
|
|
fd23720b4e | ||
|
|
05282c95bd | ||
|
|
8e978cfd0f | ||
|
|
e7ab0fc41a | ||
|
|
d488883946 | ||
|
|
c876256d2a | ||
|
|
69a2308528 | ||
|
|
3b87d395bb | ||
|
|
1527e2e863 | ||
|
|
d52981637b | ||
|
|
9771ab3933 | ||
|
|
20d3f8ee9c | ||
|
|
7c524bf46c | ||
|
|
db7d8dc728 | ||
|
|
58e8c9f0e7 | ||
|
|
6b5802488a | ||
|
|
6a2f6d1534 | ||
|
|
366b95fdc2 | ||
|
|
16e074fe18 | ||
|
|
de8dd265f3 | ||
|
|
ebefa51911 | ||
|
|
92e7e029ff | ||
|
|
8c06519996 | ||
|
|
97f3a860b7 | ||
|
|
666b0c58f0 | ||
|
|
7ab69085a3 | ||
|
|
58e838e653 | ||
|
|
7cccce31d1 | ||
|
|
2a3f38a876 | ||
|
|
fdb398a22f | ||
|
|
1f5d243efd | ||
|
|
33eb9ec6b1 | ||
|
|
5761ba3af1 | ||
|
|
61d0bdf715 | ||
|
|
46198a9807 | ||
|
|
7cd2d4c673 | ||
|
|
5eb9a7d27a | ||
|
|
e54c16d64e | ||
|
|
27debb67e9 | ||
|
|
45bc7b5607 | ||
|
|
4c753794df | ||
|
|
bdbcbe17e9 | ||
|
|
8b0d552eff | ||
|
|
883719b1bb | ||
|
|
943e8ca6ff | ||
|
|
9f334be58e | ||
|
|
e8b500b15a | ||
|
|
23d2948707 | ||
|
|
ce792e8e51 | ||
|
|
37a9fb6729 | ||
|
|
0c51b4da33 | ||
|
|
6902ed23b3 | ||
|
|
75fccffa5c | ||
|
|
e5c28eeca0 | ||
|
|
fa002b6003 | ||
|
|
1cc8e1cf46 | ||
|
|
f4c3651f8f | ||
|
|
ae4fe7dbe8 | ||
|
|
446aefea8f | ||
|
|
e0c92d8787 | ||
|
|
eb981d494a | ||
|
|
242da9ba77 | ||
|
|
f515b8f80b | ||
|
|
437d7b0a77 | ||
|
|
ce8ee94dc9 | ||
|
|
d4471e4e91 | ||
|
|
34f6447cb8 | ||
|
|
37dc58a1ec | ||
|
|
45e5189cfa | ||
|
|
509ec9d0ad | ||
|
|
23e2a67153 | ||
|
|
88711b2b50 | ||
|
|
edf3da646f | ||
|
|
a3887f6583 | ||
|
|
bd045487a1 | ||
|
|
d8eec5b208 | ||
|
|
a81ba7db02 | ||
|
|
f19f55fe61 | ||
|
|
e7c26fd347 | ||
|
|
05ddee8c50 | ||
|
|
23d4dfd3cb | ||
|
|
404ae31214 | ||
|
|
1366108eea | ||
|
|
d23c6efb3c | ||
|
|
5542b6c458 | ||
|
|
58f12882bd | ||
|
|
87085bc28d | ||
|
|
9fadcbca38 | ||
|
|
06e6962867 | ||
|
|
6fa071c21d | ||
|
|
a9c8f09461 | ||
|
|
34e82dd08d | ||
|
|
e40fc37648 | ||
|
|
95afc10b58 | ||
|
|
54803c23a1 | ||
|
|
753a0650d4 | ||
|
|
2ca58d2953 | ||
|
|
acfe3395b2 | ||
|
|
8ba056a643 | ||
|
|
c3591787aa | ||
|
|
d5024989e2 | ||
|
|
23369da077 | ||
|
|
2fc6fc2c94 | ||
|
|
b84f129d8b | ||
|
|
8c8b4885a6 | ||
|
|
17e992e6a4 | ||
|
|
607bc8f544 | ||
|
|
369c4fc35e | ||
|
|
a9365a1fa6 | ||
|
|
097516fa5d | ||
|
|
74306d6d4f | ||
|
|
21dfe881af | ||
|
|
d8f794d9f7 | ||
|
|
14733b1430 | ||
|
|
7a13b937c9 | ||
|
|
644e2f6f8f | ||
|
|
02400176ec | ||
|
|
883429ffb1 | ||
|
|
beddc7c828 | ||
|
|
5cdb64d96c | ||
|
|
81c3c5640d | ||
|
|
59bb50a26d | ||
|
|
6936700515 | ||
|
|
bab3668c22 | ||
|
|
fffbfc5d9d | ||
|
|
774b820302 | ||
|
|
af89771086 | ||
|
|
6bd8bb82ea | ||
|
|
077b43a1f4 | ||
|
|
785cd4a44e | ||
|
|
dad2fdd7a4 | ||
|
|
38ed0ed408 | ||
|
|
7416357248 | ||
|
|
674abf9639 | ||
|
|
76d1aaff6d | ||
|
|
13c4dd4b21 | ||
|
|
375db8107a | ||
|
|
decd22cd46 | ||
|
|
0302bbf4b7 | ||
|
|
e5fe9b8b32 | ||
|
|
051871f077 | ||
|
|
8bd5a390cc | ||
|
|
da0cfd4dbb | ||
|
|
809611503a | ||
|
|
7ceb7cead6 | ||
|
|
54ddca80df | ||
|
|
0a20d9904e | ||
|
|
984db71aca | ||
|
|
cd46dcc5ee | ||
|
|
a3677518b6 | ||
|
|
439555b2d3 | ||
|
|
727907c7ed | ||
|
|
b63b687245 | ||
|
|
9f3c79d446 | ||
|
|
cada49478f | ||
|
|
df37355d6f | ||
|
|
af157c4da4 | ||
|
|
2a24f1cadf | ||
|
|
cf579ecafa | ||
|
|
d9534908e3 | ||
|
|
16455719d0 | ||
|
|
327d633cee | ||
|
|
8a071b2a07 | ||
|
|
f552bdc79d | ||
|
|
a33e708b2b | ||
|
|
08d45ed839 | ||
|
|
ef2a7e8ce1 | ||
|
|
76dce545a7 | ||
|
|
ec30b7c3b2 | ||
|
|
30ede2d7c8 | ||
|
|
37de7332e2 | ||
|
|
c87d6a9e8a | ||
|
|
da00534847 | ||
|
|
ac1e9e537c | ||
|
|
f62694525b | ||
|
|
8857aa0e7b | ||
|
|
8e6c7dd0eb | ||
|
|
d39b138faf | ||
|
|
2036426d47 | ||
|
|
719746c95d | ||
|
|
494092369c | ||
|
|
cb678fb86d | ||
|
|
0ed041b089 | ||
|
|
419f704429 | ||
|
|
97261abe25 | ||
|
|
5847e3685f | ||
|
|
11fa16a488 | ||
|
|
e5c69bb322 | ||
|
|
b9f51e4f4b | ||
|
|
255758bb1c | ||
|
|
559c913fca | ||
|
|
c9b5aa638a | ||
|
|
206df466fd | ||
|
|
1fae5d65d2 | ||
|
|
24ea6ce17c | ||
|
|
9d1547a150 | ||
|
|
7d2b074620 | ||
|
|
18ae9d07f7 | ||
|
|
e538e4c5f4 | ||
|
|
0a6c2ec158 | ||
|
|
01187b930e | ||
|
|
db94ef864a | ||
|
|
307a474b5f | ||
|
|
7bcd2d9084 | ||
|
|
ae43464668 | ||
|
|
dadfbdf8cf | ||
|
|
50253cd4d2 | ||
|
|
758affb37c | ||
|
|
580e6ca112 | ||
|
|
fc8d809ee2 | ||
|
|
505caebac3 | ||
|
|
d7e041cbe6 | ||
|
|
8bb2971873 | ||
|
|
492b7d66a3 | ||
|
|
ffd2ccd2db | ||
|
|
bd47072a47 | ||
|
|
a5c99ce3bd | ||
|
|
d94a288a70 | ||
|
|
de677f4a76 | ||
|
|
281a12401f | ||
|
|
57817ce34f | ||
|
|
1fdc12afbe | ||
|
|
b3b865aa37 | ||
|
|
375b43198e | ||
|
|
615185a0ea | ||
|
|
4069986170 | ||
|
|
a9fbc444fe | ||
|
|
f4a23e080b | ||
|
|
0a5041ff45 | ||
|
|
916b9565d5 | ||
|
|
dec524a723 | ||
|
|
efdbaecb21 | ||
|
|
b1337cea6e | ||
|
|
c4a6c4548b | ||
|
|
0ac093e6e8 | ||
|
|
a647b9e19c | ||
|
|
38b3b9d594 | ||
|
|
0ad4877bf8 | ||
|
|
5ccdea5deb | ||
|
|
85b3583dce | ||
|
|
acff028f1a | ||
|
|
e4a3b2b644 | ||
|
|
9b333e8025 | ||
|
|
66d0ff1972 | ||
|
|
2db46731c4 | ||
|
|
f86a198b38 | ||
|
|
d56dd5a1ad | ||
|
|
7f0661d45f | ||
|
|
048ca128d3 | ||
|
|
b727266268 | ||
|
|
52390525db | ||
|
|
637990da93 | ||
|
|
3fc24d1662 | ||
|
|
d358f3ea4f | ||
|
|
346fcd0f77 | ||
|
|
72cc3ff0f6 | ||
|
|
f24aa187ee | ||
|
|
ef70f00c6c | ||
|
|
70325f45ac | ||
|
|
6d1cecf77f | ||
|
|
a973c95cf3 | ||
|
|
fd8ebb02c0 | ||
|
|
26ba3b9d2e | ||
|
|
34c369ad97 | ||
|
|
7990475023 | ||
|
|
87b2d48bde | ||
|
|
48350c4612 | ||
|
|
b9b9110ed6 | ||
|
|
f3a7f353ab | ||
|
|
82bc46925d | ||
|
|
9bdcd2ea1c | ||
|
|
7cb71c51d3 | ||
|
|
0b4f0bc641 | ||
|
|
fc75f62e9d | ||
|
|
e71a13bd07 | ||
|
|
b6bafc462c | ||
|
|
6a49d974a4 | ||
|
|
b2e0fe9f67 | ||
|
|
5b57268420 | ||
|
|
4ff2f54aa8 | ||
|
|
3825aecb4e | ||
|
|
a1e231a4b4 | ||
|
|
335d2f94de | ||
|
|
0d91a01589 | ||
|
|
6470313ea7 | ||
|
|
5a2971dc16 | ||
|
|
d06b7b3020 | ||
|
|
891e3052ac | ||
|
|
a8a7139746 | ||
|
|
5dd73d34bc | ||
|
|
409b71c03c | ||
|
|
0aa2928fe7 | ||
|
|
9981114dba | ||
|
|
97a0137523 | ||
|
|
2f9c28a906 | ||
|
|
0e7ab77b75 | ||
|
|
1ae01df352 | ||
|
|
bc17e6e55c | ||
|
|
2000506866 | ||
|
|
1a6ee14c1c | ||
|
|
bfe5fdbdc1 | ||
|
|
69579c7303 | ||
|
|
f369375455 | ||
|
|
8faa3e8bd5 | ||
|
|
ebafc158ad | ||
|
|
7c3a2778f4 | ||
|
|
0ec438c1bb | ||
|
|
2990378849 | ||
|
|
ce1f670c43 | ||
|
|
af2a0bf0f0 | ||
|
|
c652774086 | ||
|
|
d2255f8913 | ||
|
|
6e292203fa | ||
|
|
636d2ec900 | ||
|
|
128aa0e441 | ||
|
|
8593ffd15e | ||
|
|
6208287327 | ||
|
|
5f87433490 | ||
|
|
4a594c64a2 | ||
|
|
94d2c5af5e | ||
|
|
09c37f1029 | ||
|
|
5b5e34da67 | ||
|
|
217440f529 | ||
|
|
973bea20c4 | ||
|
|
6fba1bf790 | ||
|
|
fa75894087 | ||
|
|
d8afc33cc3 | ||
|
|
db9f3c5c6c | ||
|
|
93b1ac0615 | ||
|
|
81a0e2b6ef | ||
|
|
e97c71b9a2 | ||
|
|
0a15c8b573 | ||
|
|
31874d6bf7 | ||
|
|
089c9e3982 | ||
|
|
d8980c369d | ||
|
|
1f6bacbc84 | ||
|
|
b9e6c12e36 | ||
|
|
da459a363f | ||
|
|
38e36e49d0 | ||
|
|
165bfcbb69 | ||
|
|
ea65f206e6 | ||
|
|
a6c0fdb71a | ||
|
|
79ef3fa842 | ||
|
|
0db8d19561 | ||
|
|
873abb3264 | ||
|
|
088f5359d1 | ||
|
|
bbefd3fbc5 | ||
|
|
c5061487e9 | ||
|
|
db775e15a1 | ||
|
|
4269cea18a | ||
|
|
f6d28d000a | ||
|
|
044c4f55b8 | ||
|
|
bd4b07bfbe | ||
|
|
dfa6f52a2b | ||
|
|
b8a010333a | ||
|
|
79d9371240 | ||
|
|
2ee9d36d08 | ||
|
|
4470427406 | ||
|
|
433e430f3c | ||
|
|
8534e9f27e | ||
|
|
22db06ba94 | ||
|
|
2a2a348a1c | ||
|
|
2eebaff151 | ||
|
|
31e080e1d9 | ||
|
|
9682f62679 | ||
|
|
b8539f33eb | ||
|
|
833b27f315 | ||
|
|
ba78b3d0e3 | ||
|
|
4134c415c5 | ||
|
|
dd853c4b11 | ||
|
|
8add7003ab | ||
|
|
01845db68c | ||
|
|
e9ab64615a | ||
|
|
5786650d07 | ||
|
|
71c776edd3 | ||
|
|
a4ddf376f6 | ||
|
|
9d7488ffc4 | ||
|
|
1e0fb185f9 | ||
|
|
bf65309214 | ||
|
|
549a147186 | ||
|
|
f9eee63abb | ||
|
|
2ab08fc4e6 | ||
|
|
15f784a830 | ||
|
|
b133416a72 | ||
|
|
a457cf8e0b | ||
|
|
f0a44dc619 | ||
|
|
c5f9ef3552 | ||
|
|
c8da32a0b9 | ||
|
|
ddd00f28fc | ||
|
|
3f9e09f4fc | ||
|
|
dd1cab7641 | ||
|
|
9342ce8fc4 | ||
|
|
9262268992 | ||
|
|
35f13a8deb | ||
|
|
fa2105c639 | ||
|
|
08b28cd753 | ||
|
|
8b1ad9e6ec | ||
|
|
c2d44acea0 | ||
|
|
cd0f0514b6 | ||
|
|
1989b6f523 | ||
|
|
126a93fa58 | ||
|
|
2ed51cd6a9 | ||
|
|
e58a3401e0 | ||
|
|
c8fb6e3c3b | ||
|
|
bef151660e | ||
|
|
a724e97c78 | ||
|
|
9e9395f5e8 | ||
|
|
7c034fd81d | ||
|
|
a128a1b920 | ||
|
|
2ca8b9a09f | ||
|
|
9465e253eb | ||
|
|
62e3e036eb | ||
|
|
57eb9c3975 | ||
|
|
9cf437e46f | ||
|
|
5932eb5475 | ||
|
|
dc701e568e | ||
|
|
7bc3d823db | ||
|
|
36d1157066 | ||
|
|
18cbfdfd13 | ||
|
|
7a59f471f2 | ||
|
|
cd87b8a22f | ||
|
|
1625dfe1a3 | ||
|
|
3a52553ad0 | ||
|
|
fd3a272190 | ||
|
|
ed4ae69317 | ||
|
|
1ee9bec320 | ||
|
|
006d3c1a76 | ||
|
|
413c65395c | ||
|
|
d4e403ae78 | ||
|
|
27146545b8 | ||
|
|
09642eecf7 | ||
|
|
af8e878db6 | ||
|
|
c6684accfd | ||
|
|
051ea305d5 | ||
|
|
677a662ea9 | ||
|
|
0dcc1f49cb | ||
|
|
af7ee382ab | ||
|
|
51fba07754 | ||
|
|
23f98083f4 | ||
|
|
40e5886ceb | ||
|
|
61b57ae189 | ||
|
|
24a1bbaf7f | ||
|
|
05346100e4 | ||
|
|
158e4fdd9e | ||
|
|
4a4751fb87 | ||
|
|
e93b116514 | ||
|
|
c911eeff65 | ||
|
|
13a65adfdc | ||
|
|
5ec2d83478 | ||
|
|
71df811e08 | ||
|
|
a62d64f13e | ||
|
|
164b069972 | ||
|
|
aaa4e486c0 | ||
|
|
3f7a1e5e69 | ||
|
|
cc20b1d1ac | ||
|
|
2ee3721fd2 | ||
|
|
2ff4c494fc | ||
|
|
a5b5d1a419 | ||
|
|
45bf72f5f3 | ||
|
|
9f87814c97 | ||
|
|
2ead9ade03 | ||
|
|
361b0f2de2 | ||
|
|
6a75ce291d | ||
|
|
ffa5e921c1 | ||
|
|
4781350098 | ||
|
|
87a82f5185 | ||
|
|
8898f29ba0 | ||
|
|
50755868b4 | ||
|
|
5af1c79fda | ||
|
|
02572e4060 | ||
|
|
960c842fe0 | ||
|
|
ba6b6fdebf | ||
|
|
11531ca256 | ||
|
|
f59082e59f | ||
|
|
a01b9f2147 | ||
|
|
00494bbe69 | ||
|
|
20971b08cd | ||
|
|
b4c8b95078 | ||
|
|
ee396a06fe | ||
|
|
065291ff0a | ||
|
|
2edf306d38 | ||
|
|
c0aaaeca26 | ||
|
|
b09282e751 | ||
|
|
0343fd72f2 | ||
|
|
6a063d1f9e | ||
|
|
726df11563 | ||
|
|
4973b63e20 | ||
|
|
2f53502222 | ||
|
|
e89536c0cf | ||
|
|
935b4fa67f | ||
|
|
d8bac48330 | ||
|
|
e65d77c212 | ||
|
|
1e2c1d357e | ||
|
|
a72ed73d3e | ||
|
|
dd40e84f7e | ||
|
|
437f39a7d8 | ||
|
|
97e34e6e7f | ||
|
|
97eef72428 | ||
|
|
8a1c3062dc | ||
|
|
9410d64466 | ||
|
|
bf3fcaa3d1 | ||
|
|
5741224ee9 | ||
|
|
1972778aee | ||
|
|
8ed1b589c0 | ||
|
|
05a03b64d4 | ||
|
|
a7fa47cdaf | ||
|
|
f3e925f5d7 | ||
|
|
c10a5336aa | ||
|
|
ca569a7f61 | ||
|
|
90afd56523 | ||
|
|
de49f4b763 | ||
|
|
7932d2030d | ||
|
|
6f2445844a | ||
|
|
0814868bb3 | ||
|
|
de0c579917 | ||
|
|
c99da4ec01 | ||
|
|
831e95753f | ||
|
|
7d10b1e773 | ||
|
|
8e331f74e1 | ||
|
|
a72a67f330 | ||
|
|
0c78e3c2a4 | ||
|
|
c557970ef4 | ||
|
|
4e61686e18 | ||
|
|
b46d12ad6a | ||
|
|
d74ed5ed09 | ||
|
|
381cc9bbb9 | ||
|
|
c15bbf866a | ||
|
|
501c853fd6 | ||
|
|
5174e3ea8e | ||
|
|
6400976f24 | ||
|
|
7a5cb927e3 | ||
|
|
36d6db117f | ||
|
|
c42128ee68 | ||
|
|
6225a2e819 | ||
|
|
6ea48f69d8 | ||
|
|
d3fc19d018 | ||
|
|
4c6edc130f | ||
|
|
b4f30a00fd | ||
|
|
83d6b7b738 | ||
|
|
e6ee4bbac4 | ||
|
|
f50966735f | ||
|
|
ced63a522e | ||
|
|
2ff4c034d9 | ||
|
|
ed7b9d4521 | ||
|
|
0d6354d596 | ||
|
|
864ec70796 | ||
|
|
1def108445 | ||
|
|
0817a9e57c | ||
|
|
112861e3be | ||
|
|
3de7b3409c | ||
|
|
85d2a99488 | ||
|
|
32a6377e31 | ||
|
|
7b678475bd | ||
|
|
ef02b1a886 | ||
|
|
1036ffb746 | ||
|
|
ffaf93cd60 | ||
|
|
93a29e28c8 | ||
|
|
7cd77b9d18 | ||
|
|
71fa8e0cda | ||
|
|
de31a644b1 | ||
|
|
0d7c137b2b | ||
|
|
db4bff8774 | ||
|
|
a980a5517a | ||
|
|
51a294b78d | ||
|
|
f6ca683366 | ||
|
|
14d4b0b87e | ||
|
|
b82247b90e | ||
|
|
45e4f01d8b | ||
|
|
cd5ea8754b | ||
|
|
81b6f1ff77 | ||
|
|
92854ebce0 | ||
|
|
b44d11089d | ||
|
|
4a572dd5e6 | ||
|
|
7e900ffc6f | ||
|
|
4feadfbe0b | ||
|
|
2fe874a80a | ||
|
|
4e36709bed | ||
|
|
e52bc9fafc | ||
|
|
0f341c2f30 | ||
|
|
ddedf824c0 | ||
|
|
b822e6a135 | ||
|
|
71afedd93d | ||
|
|
6cc109582d | ||
|
|
6abb56a7e2 | ||
|
|
f11ec22e4e | ||
|
|
b46484a069 | ||
|
|
41557d7a20 | ||
|
|
edf722cccb | ||
|
|
c1a01eff61 | ||
|
|
8c280eaf50 | ||
|
|
ff41275bf3 | ||
|
|
6c5203da10 | ||
|
|
a2a10107a2 | ||
|
|
12b1d416ca | ||
|
|
84a0dac0c5 | ||
|
|
083d115f80 | ||
|
|
1c0b420e2d | ||
|
|
f3138b2dfd | ||
|
|
50aa678f97 | ||
|
|
82f3f4af44 | ||
|
|
62e11b2d48 | ||
|
|
c103875cd9 | ||
|
|
90a0621814 | ||
|
|
1e20c03e32 | ||
|
|
e89e6a955e | ||
|
|
1585340c01 | ||
|
|
f79a26d529 | ||
|
|
bc4663162e | ||
|
|
6d2e3f78af | ||
|
|
3a5b69cc1e | ||
|
|
b96e250486 | ||
|
|
1577423778 | ||
|
|
95219c8e17 | ||
|
|
fc7d38a381 | ||
|
|
ec356ef7b1 | ||
|
|
28d63e4e81 | ||
|
|
d4dee77b9c | ||
|
|
2b78208fd7 | ||
|
|
1b28dfec97 | ||
|
|
c8e7abcb22 | ||
|
|
87df064c7b | ||
|
|
cc103b5d54 | ||
|
|
d10fc79cbf | ||
|
|
1dbdb9730c | ||
|
|
4daed198bd | ||
|
|
6889324572 | ||
|
|
0428b109b5 | ||
|
|
48bfc84292 | ||
|
|
ad71d853f8 | ||
|
|
8f2adc3321 | ||
|
|
400ab8dd0e | ||
|
|
2e4730a236 | ||
|
|
ef6d23b397 | ||
|
|
7f4aae7b33 | ||
|
|
b858435739 | ||
|
|
a7540d965e | ||
|
|
1606fb44a4 | ||
|
|
52a75cf570 | ||
|
|
c37e3d77b3 | ||
|
|
641048a101 | ||
|
|
d9ec6a8466 | ||
|
|
0ae5107498 | ||
|
|
22af1f8829 | ||
|
|
b3a0ccbed5 | ||
|
|
3d491b216a | ||
|
|
5bda830192 | ||
|
|
a31802ea6c | ||
|
|
8f8140dc63 | ||
|
|
3f4e588e83 | ||
|
|
7c8bf92eb4 | ||
|
|
8cfdfbd4f0 | ||
|
|
a50843d7f5 | ||
|
|
0749e12e55 | ||
|
|
54dc0d60d5 | ||
|
|
469a72cb18 | ||
|
|
7292a9a59e | ||
|
|
74e247a5f4 | ||
|
|
dea31e52a8 | ||
|
|
684a4d51cb | ||
|
|
9fad94bd5d | ||
|
|
5d62a1aa00 | ||
|
|
af38c680e7 | ||
|
|
e4310a7fa7 | ||
|
|
925643bd41 | ||
|
|
c1ed0f26df | ||
|
|
0fbb6a6f0b | ||
|
|
a1ad23aa5d | ||
|
|
f85e0db429 | ||
|
|
3f2fd9751d | ||
|
|
ed66cdfe47 | ||
|
|
080ccb6de6 | ||
|
|
1ae56209b2 | ||
|
|
bdc7209210 | ||
|
|
fc9c2cd019 | ||
|
|
2f42bbb16a | ||
|
|
6ead7e1cf1 | ||
|
|
e82c7a227b | ||
|
|
5e18054600 | ||
|
|
16a61e0603 | ||
|
|
e31830cc64 | ||
|
|
dadd77e11b | ||
|
|
2a8ae33a79 | ||
|
|
83bad44256 | ||
|
|
2ceaf7bfdb | ||
|
|
b81be5dcf7 | ||
|
|
44ba022d72 | ||
|
|
13f28ae34b | ||
|
|
4093a08ab6 | ||
|
|
0a3358fb95 | ||
|
|
0942cfb841 | ||
|
|
925ea4edf3 | ||
|
|
81ea2c4d4f | ||
|
|
8410a7bfac | ||
|
|
5d1656b628 | ||
|
|
2e89c82e2b | ||
|
|
69b2996d09 | ||
|
|
36fb6128f2 | ||
|
|
fd97c435ec | ||
|
|
50c9a208bc | ||
|
|
6b7a0452ab | ||
|
|
aabba41a62 | ||
|
|
3db39cf5ad | ||
|
|
9bb38df7bb | ||
|
|
6806763871 | ||
|
|
3b7efa4aad | ||
|
|
960a88ca5a | ||
|
|
498fd886f7 | ||
|
|
3b3246bed1 | ||
|
|
c33f6d8e09 | ||
|
|
44c6a10f70 | ||
|
|
78fa529b63 | ||
|
|
f6ce5111bc | ||
|
|
c8df25f05a | ||
|
|
8a9eea4fa3 | ||
|
|
a0f85b4900 | ||
|
|
f171c9a8d5 | ||
|
|
89f09aab78 | ||
|
|
552655a424 | ||
|
|
d0a53f10ed | ||
|
|
a4f841eb60 | ||
|
|
014197c65b | ||
|
|
541ea4c651 | ||
|
|
ce4634338f | ||
|
|
33a02367a4 | ||
|
|
1467809638 | ||
|
|
0f5a938ef0 | ||
|
|
90eea5502e | ||
|
|
99cfb755d8 | ||
|
|
aafa458342 | ||
|
|
657bd8d7d8 | ||
|
|
94ea1ddc0b | ||
|
|
01c2fe03bd | ||
|
|
fa0a63f7f8 | ||
|
|
df85ba2c69 | ||
|
|
2940081012 | ||
|
|
9d914866b2 | ||
|
|
e9f21c0944 | ||
|
|
84bbe7de1e | ||
|
|
963664469e | ||
|
|
01412e7d76 | ||
|
|
a93139eedd | ||
|
|
cab3f507a4 | ||
|
|
6c6875ac95 | ||
|
|
209b6e0d6c | ||
|
|
457173c275 | ||
|
|
8cd582bb08 | ||
|
|
8816942b4a | ||
|
|
ad3e3425bb | ||
|
|
355f6e3e28 | ||
|
|
e1d1f205aa | ||
|
|
499233e3a8 | ||
|
|
b54bfe2715 | ||
|
|
d8db9eb3b1 | ||
|
|
d460f52633 | ||
|
|
ade71cc670 | ||
|
|
1108f3150a | ||
|
|
33e182a3c6 | ||
|
|
d8ceac8e84 | ||
|
|
188781709c | ||
|
|
101d194df1 | ||
|
|
48ecb504fb | ||
|
|
29bc40bd07 | ||
|
|
8e7fe38956 | ||
|
|
e9b4944e1b | ||
|
|
57f3ea3071 | ||
|
|
2221c21b0a | ||
|
|
f84dac3d83 | ||
|
|
e2101a1f0d | ||
|
|
93e7915ccd | ||
|
|
9b80deba32 | ||
|
|
c93dd0fe2c | ||
|
|
32a8b858bd | ||
|
|
4bc44f499e | ||
|
|
2a1fdd2d96 | ||
|
|
5e82c3beaa | ||
|
|
41f67244c6 | ||
|
|
414507c0db | ||
|
|
02ede7a336 | ||
|
|
9e422f8e54 | ||
|
|
0340e1a424 | ||
|
|
7148230efe | ||
|
|
5e96206484 | ||
|
|
1ed7dd0512 | ||
|
|
11ed072582 | ||
|
|
6e763d0693 | ||
|
|
5a8bb76b06 | ||
|
|
a65e3ebe37 | ||
|
|
9bc6e587b0 | ||
|
|
ddcde74eaa | ||
|
|
ef50abed4c | ||
|
|
3c06a43ea7 | ||
|
|
5d985fe62b | ||
|
|
631f1adf5d | ||
|
|
3443a02ee1 | ||
|
|
7bea71bbca | ||
|
|
aace694e0e | ||
|
|
7ac13dc774 | ||
|
|
d47f18d4cb | ||
|
|
22729d0d7d | ||
|
|
d6901ae905 | ||
|
|
8448984868 | ||
|
|
290cc30f15 | ||
|
|
98f949346e | ||
|
|
83546bd466 | ||
|
|
48273299b8 | ||
|
|
c62599c3fb | ||
|
|
84b849a0ba | ||
|
|
841b6070ad | ||
|
|
69eced2044 | ||
|
|
d9c9b227b2 | ||
|
|
366f0311c4 | ||
|
|
044bedca92 | ||
|
|
c0ee9b9a32 | ||
|
|
0ff85556b2 | ||
|
|
511dd8127d | ||
|
|
d319e84a07 | ||
|
|
ce147cc2d4 | ||
|
|
2345b10d6a | ||
|
|
de3cb84bdd | ||
|
|
515feda170 | ||
|
|
741f53eb95 | ||
|
|
baf897a6fa | ||
|
|
1f87efb13f | ||
|
|
5f13a2e093 | ||
|
|
e24dd8563a | ||
|
|
5a12e13ae5 | ||
|
|
c9f01a29ff | ||
|
|
65d654e54b | ||
|
|
220db72271 | ||
|
|
3d5b01ce7e | ||
|
|
0dc9e5e324 | ||
|
|
0ba2315187 | ||
|
|
450a02e674 | ||
|
|
e9ec21adc2 | ||
|
|
02163d504b | ||
|
|
3d0135aaed | ||
|
|
fdc0e7aa49 | ||
|
|
89317859ff | ||
|
|
311431653f | ||
|
|
daebcc23b6 | ||
|
|
1744a62327 | ||
|
|
4d5f24e8e1 | ||
|
|
b0fd895316 | ||
|
|
788cf78fca | ||
|
|
51fc1493ac | ||
|
|
e705a783ec | ||
|
|
a17ad546a7 | ||
|
|
88a8d505c7 | ||
|
|
9d5282bde9 | ||
|
|
6c9c06d6b4 | ||
|
|
20935d2730 | ||
|
|
03a3602b57 | ||
|
|
8596d39d89 | ||
|
|
6a3f702156 | ||
|
|
c91f2c3ad7 | ||
|
|
eff549a7cb | ||
|
|
fb3c87241c | ||
|
|
b25aa23405 | ||
|
|
2067ec02f0 | ||
|
|
59ba66f10b | ||
|
|
1ae8dc695b | ||
|
|
1f183abdfd | ||
|
|
8d63856e59 | ||
|
|
e633ab1645 | ||
|
|
d6378f0a42 | ||
|
|
18e36f7490 | ||
|
|
5d79c34fb4 | ||
|
|
d36da51c43 | ||
|
|
ea8ad84674 | ||
|
|
ebdf37fb28 | ||
|
|
8fcc0581d8 | ||
|
|
d0853d236c | ||
|
|
041e27f90b | ||
|
|
1c99a0d8f9 | ||
|
|
484b68c65b | ||
|
|
aed227e3db | ||
|
|
dc74455424 | ||
|
|
4b2518c4d6 | ||
|
|
e7c261395c | ||
|
|
f8a08385a8 | ||
|
|
483836f120 | ||
|
|
254a25556a | ||
|
|
bc60ac6de1 | ||
|
|
f49b82ca69 | ||
|
|
abd142379b | ||
|
|
1ad3dc43a5 | ||
|
|
ac70848cf2 | ||
|
|
a249edac71 | ||
|
|
fe78f5e0d3 | ||
|
|
6722bf988f | ||
|
|
f7c48f508b | ||
|
|
c76cfc023a | ||
|
|
ae050fec89 | ||
|
|
a7239b3c60 | ||
|
|
981ec4cd1d | ||
|
|
89b603ffbc | ||
|
|
e224aecf9f | ||
|
|
02eacf2b05 | ||
|
|
8d75253b69 | ||
|
|
9b7a51056d | ||
|
|
0b2746716f | ||
|
|
2e3d6450fa | ||
|
|
b8c9f7b0e9 | ||
|
|
12d646de88 | ||
|
|
2e19ca9518 | ||
|
|
b8db808e26 | ||
|
|
7cfaaa6dbd | ||
|
|
69a67592a3 | ||
|
|
983e6cb917 | ||
|
|
570c4c30ba | ||
|
|
4f1694b550 | ||
|
|
b47a458b08 | ||
|
|
1cab74cd84 | ||
|
|
3e87213bca | ||
|
|
eb63681425 | ||
|
|
e98a5076ec | ||
|
|
43627e2116 | ||
|
|
302c509707 | ||
|
|
3f781e40be | ||
|
|
f14143d7fd | ||
|
|
09c32ecf7e | ||
|
|
f1b94a2f01 | ||
|
|
91c34586c4 | ||
|
|
fb6fbbc4df | ||
|
|
f18b7cd514 | ||
|
|
29dfcf6f09 | ||
|
|
ef030e638f | ||
|
|
ac3f14fe1f | ||
|
|
420e5c23ae | ||
|
|
b6885d0710 | ||
|
|
1b34381f45 | ||
|
|
6b1ae372ba | ||
|
|
d46727db53 | ||
|
|
117860c163 | ||
|
|
c758b2aa5d | ||
|
|
d12e9177f3 | ||
|
|
c17eaf14e1 | ||
|
|
a0cb73191c | ||
|
|
967dc48acc | ||
|
|
d7d871c9ae | ||
|
|
ce98734e70 | ||
|
|
479ba046af | ||
|
|
699db6fdd3 | ||
|
|
1e4f4c655b | ||
|
|
f3bd0fbf27 | ||
|
|
4f86715cda | ||
|
|
60c1451645 | ||
|
|
090829344c | ||
|
|
443eb44aa4 | ||
|
|
fab008c1b6 | ||
|
|
1fad72b9a6 | ||
|
|
cfdb45436c | ||
|
|
bba90199e6 | ||
|
|
66be7a095c | ||
|
|
1157001fd0 | ||
|
|
00180ea4be | ||
|
|
c89e710774 | ||
|
|
e370e1f057 | ||
|
|
334d4eaa50 | ||
|
|
a0883fadbf | ||
|
|
494a392efc | ||
|
|
50f5f94dfc | ||
|
|
55e72f1226 | ||
|
|
991be1bb79 | ||
|
|
dba72b78c8 | ||
|
|
3973499499 | ||
|
|
579e5a5764 | ||
|
|
0da7fa63f2 | ||
|
|
ab11201fe1 | ||
|
|
71cbf6ceee | ||
|
|
76179ba9a5 | ||
|
|
468d60b38e | ||
|
|
b656a914fc | ||
|
|
9471ebe2eb | ||
|
|
684fe99c09 | ||
|
|
973e555ae8 | ||
|
|
898aff99b7 | ||
|
|
02cac55ec5 | ||
|
|
7ab1a2bbf2 | ||
|
|
e13921c642 | ||
|
|
b5cf909bee | ||
|
|
92c3ad7252 | ||
|
|
4ef01f35f5 | ||
|
|
b34c318415 | ||
|
|
aa5e5e2942 | ||
|
|
072e9827a5 | ||
|
|
3b0c34e3e6 | ||
|
|
6443e54ee7 | ||
|
|
05022702ff | ||
|
|
d6c86cbb2c | ||
|
|
fc40fde80e | ||
|
|
a7daedcc60 | ||
|
|
afb565654f | ||
|
|
700f6ae803 | ||
|
|
33e89ad993 | ||
|
|
86b073ff6d | ||
|
|
4f27e3e162 | ||
|
|
1815c83756 | ||
|
|
dc0f045aea | ||
|
|
4954a590a1 | ||
|
|
5234ee5c64 | ||
|
|
fc967847a7 | ||
|
|
7c5de57f97 | ||
|
|
7fade2b71f | ||
|
|
84b488974e | ||
|
|
cfbc2c0989 | ||
|
|
85d36ee653 | ||
|
|
d0085b7ace | ||
|
|
0788a29b2a | ||
|
|
2000531b73 | ||
|
|
752483bbaa | ||
|
|
e2f57aeb2d | ||
|
|
94142f2636 | ||
|
|
89c39142ed | ||
|
|
973d9e503b | ||
|
|
91533cf7ba | ||
|
|
83ba7ba1b8 | ||
|
|
99943a4e3c | ||
|
|
f865791a99 | ||
|
|
968453e4c2 | ||
|
|
e253a4605c | ||
|
|
2d4c762de1 | ||
|
|
8e6ae4df3a | ||
|
|
e4068166d8 | ||
|
|
42c21695b9 | ||
|
|
dee7ccd967 | ||
|
|
adbf009652 | ||
|
|
e2a91885cc | ||
|
|
f1eabc9e5f | ||
|
|
0ef76eee4a | ||
|
|
224d51fdbb | ||
|
|
4a7cf2d018 | ||
|
|
80688cc6b8 | ||
|
|
e90889dec8 | ||
|
|
1b27f14a58 | ||
|
|
a31b6c3cb0 | ||
|
|
d475f1a591 | ||
|
|
d2996c64a3 | ||
|
|
a16168aff7 | ||
|
|
028f55558e | ||
|
|
5ad6f78474 | ||
|
|
8e7471d1d5 | ||
|
|
ce47ae41ac | ||
|
|
eae1ce7a43 | ||
|
|
d83fdaf281 | ||
|
|
4547591c49 | ||
|
|
39f9ce73f3 | ||
|
|
92628bf9ef | ||
|
|
bffeaa4acf | ||
|
|
6c3ee2f797 | ||
|
|
d98f1aa33f | ||
|
|
d698937e64 | ||
|
|
ba2b3fca3a | ||
|
|
2314305385 | ||
|
|
55606c0aff | ||
|
|
5ea51dc58b | ||
|
|
81f087d260 | ||
|
|
ac4d125913 | ||
|
|
9bb8cef902 | ||
|
|
d92cc59ae3 | ||
|
|
02bfb6b160 | ||
|
|
bb7ec4be61 | ||
|
|
bf0b01194e | ||
|
|
cc376da1ab | ||
|
|
49537a992d | ||
|
|
2891270925 | ||
|
|
fbd482f417 | ||
|
|
a9f80bfb15 | ||
|
|
38e6cb9a39 | ||
|
|
909a55263f | ||
|
|
9e19ce8da7 | ||
|
|
d910942e3c | ||
|
|
5e979c277a | ||
|
|
21cb780d5e | ||
|
|
da00e8a6fb | ||
|
|
149ee6853a | ||
|
|
671e609a18 | ||
|
|
9922c7beea | ||
|
|
4c85ded813 | ||
|
|
cb276e58e3 | ||
|
|
0a26c9945a | ||
|
|
d7d3b968ff | ||
|
|
9e2a7996d9 | ||
|
|
1d2e7e29ed | ||
|
|
0ed493cfc4 | ||
|
|
3432e2c967 | ||
|
|
7e88705627 | ||
|
|
c21aca7e85 | ||
|
|
e7efd450d2 | ||
|
|
8aaab1fade | ||
|
|
1cabd46896 | ||
|
|
82e9b702fc | ||
|
|
e766763e2c | ||
|
|
18b5038899 | ||
|
|
87880a8f42 | ||
|
|
52ed6d8373 | ||
|
|
097e1c956e | ||
|
|
a14b20d91d | ||
|
|
0a1fcb6ebe | ||
|
|
63638867d9 | ||
|
|
7d0690c98e | ||
|
|
a38795a7d1 | ||
|
|
b7e6245657 | ||
|
|
102749b3ed | ||
|
|
97c09814bc | ||
|
|
8612f9531f | ||
|
|
f501c5fad3 | ||
|
|
a39f374ba0 | ||
|
|
cfbb54a7da | ||
|
|
25be8dc9c1 | ||
|
|
b25b2a1050 | ||
|
|
dd1daca3d9 | ||
|
|
f43a5b5086 | ||
|
|
2d43ada7c5 | ||
|
|
e44877043a | ||
|
|
ac6fe6ccee | ||
|
|
5b0a558fda | ||
|
|
529405b833 | ||
|
|
fa67ad35e2 | ||
|
|
9929117642 | ||
|
|
6bcbea0a9c | ||
|
|
893e1f8731 | ||
|
|
13c3a37302 | ||
|
|
2ae7a084ae | ||
|
|
2727abcc39 | ||
|
|
b9860137eb | ||
|
|
f9d7f8c248 | ||
|
|
b71e0e3bf3 | ||
|
|
b4b4594ad3 | ||
|
|
3a83acf93f | ||
|
|
4d202c388b | ||
|
|
2bb02eb9fc | ||
|
|
b73db77cab | ||
|
|
512c276a8a | ||
|
|
982a1d7ba9 | ||
|
|
b077098a34 | ||
|
|
29ee372d5a | ||
|
|
8d06d08c59 | ||
|
|
7db783e6a6 | ||
|
|
3724ef7fd3 | ||
|
|
90a4fdd4c4 | ||
|
|
64715a8313 | ||
|
|
9d593d2bbe | ||
|
|
3254282902 | ||
|
|
cbbfa639fb | ||
|
|
37176ceae3 | ||
|
|
fcff27858a | ||
|
|
b8a76450f0 | ||
|
|
019528496a | ||
|
|
b9e7a92d05 | ||
|
|
8185b861c6 | ||
|
|
6f16a85952 | ||
|
|
56f26deff2 | ||
|
|
2ddfef694f | ||
|
|
af750a4302 | ||
|
|
2da185f169 | ||
|
|
ab277d08e6 | ||
|
|
a1fcde5cda | ||
|
|
89a941ccdd | ||
|
|
d3b4b8fd48 | ||
|
|
08d8907df1 | ||
|
|
402a8429c8 | ||
|
|
0d2075aaf6 | ||
|
|
e00653ce67 | ||
|
|
e37507277f | ||
|
|
d612cabc30 | ||
|
|
7797bb11b3 | ||
|
|
e53b31f784 | ||
|
|
f543b005ea | ||
|
|
d0020406df | ||
|
|
cc28b1b371 | ||
|
|
a37e244c08 | ||
|
|
102a200cd3 | ||
|
|
b1b938bad9 | ||
|
|
ad3ddd96a7 | ||
|
|
7064023fc7 | ||
|
|
7933658629 | ||
|
|
9ed148b642 | ||
|
|
daeb4be0d8 | ||
|
|
994e16467a | ||
|
|
5f8a0e05e0 | ||
|
|
396acc47d4 | ||
|
|
fc6b1be975 | ||
|
|
e55e1567ae | ||
|
|
aa306c9f4c | ||
|
|
eeb4e2394a | ||
|
|
4bd8bda518 | ||
|
|
8f23c2ae16 | ||
|
|
4976628c06 | ||
|
|
008a151035 | ||
|
|
1fd01fc0bd | ||
|
|
d137beef25 | ||
|
|
5da85a637f | ||
|
|
921fedab18 | ||
|
|
f25e70b642 | ||
|
|
16f5aed6a1 | ||
|
|
7f9b72e0b7 | ||
|
|
2a447b4ad2 | ||
|
|
c05176eb6c | ||
|
|
927fbd2f08 | ||
|
|
4ea91a858b | ||
|
|
93fd718438 | ||
|
|
3c22e6ab06 | ||
|
|
eec1399126 | ||
|
|
706eef50fa | ||
|
|
4964f75646 | ||
|
|
f9a63b3528 | ||
|
|
9ab5fb78a5 | ||
|
|
b09d0509cb | ||
|
|
a2cb5eae1c | ||
|
|
07d2a32fc4 | ||
|
|
0ecbab590f | ||
|
|
b651e8e0ae | ||
|
|
2f545acedb | ||
|
|
d6b2f47f9a | ||
|
|
656e15a806 | ||
|
|
22edec16c8 | ||
|
|
2aa203e08a | ||
|
|
2a6e2ac9f7 | ||
|
|
d80f37f4a6 | ||
|
|
023d3685fc | ||
|
|
35e513deda | ||
|
|
d0b752d719 | ||
|
|
9f9dda00ae | ||
|
|
2199112a39 | ||
|
|
0afff07787 | ||
|
|
43219f31b9 | ||
|
|
9737aa38c5 | ||
|
|
490b4a5da7 | ||
|
|
4cee6f208b | ||
|
|
3ce039cc87 | ||
|
|
8694ab0c5d | ||
|
|
6f4ca63076 | ||
|
|
13fd3d48b7 | ||
|
|
b726323c02 | ||
|
|
8f1e487548 | ||
|
|
9827d8b78f | ||
|
|
a6bc997a7d | ||
|
|
022bdb0076 | ||
|
|
c152a3ddaf | ||
|
|
93383c3126 | ||
|
|
2d642fc7c5 | ||
|
|
eb289b5695 | ||
|
|
00396b3ca4 | ||
|
|
cb6d772c85 | ||
|
|
b58e86263d | ||
|
|
29f9d865e4 | ||
|
|
a8afd335ee | ||
|
|
64d571ad33 | ||
|
|
221a56062a | ||
|
|
eaec55c0b6 | ||
|
|
7dfea3d416 | ||
|
|
83c265d8e0 | ||
|
|
adb299a948 | ||
|
|
be3d7656ef | ||
|
|
e8c49c6d1b | ||
|
|
22bfecdedd | ||
|
|
039b3ef3e7 | ||
|
|
512cc97d55 | ||
|
|
f1b676f58e | ||
|
|
d9039f0dc7 | ||
|
|
cd8dcf973c | ||
|
|
965ac5d525 | ||
|
|
683332b3cb | ||
|
|
855f214d75 | ||
|
|
de288b8759 | ||
|
|
1f8cad0cc6 | ||
|
|
ef9069eab8 | ||
|
|
5002b7504d | ||
|
|
3c6b822fc6 | ||
|
|
4efa10a37c | ||
|
|
5056d6a86b | ||
|
|
cdc98eefe8 | ||
|
|
a579d8b944 | ||
|
|
cdb2238e5b | ||
|
|
e7658a83a2 | ||
|
|
6cf5bf0e01 | ||
|
|
5565d5ad0a | ||
|
|
d134905e4f | ||
|
|
9fcedbab66 | ||
|
|
cf124965d7 | ||
|
|
a417152a6b | ||
|
|
874e06ccb8 | ||
|
|
2f5bc53544 | ||
|
|
5658a630bd | ||
|
|
cc17d30e9f | ||
|
|
35b91cd217 | ||
|
|
8a3c5c37da | ||
|
|
af1c051522 | ||
|
|
5168abf0c8 | ||
|
|
780e1487fe | ||
|
|
b91a3f1812 | ||
|
|
ccd7a34ceb | ||
|
|
b6c0a7dc6f | ||
|
|
147b87c187 | ||
|
|
79b26af92c | ||
|
|
09df3c902f | ||
|
|
5d2935b005 | ||
|
|
7ae266e245 | ||
|
|
94a96f7abc | ||
|
|
519dd4b4e1 | ||
|
|
b2cde7665a | ||
|
|
88fc9ef6fb | ||
|
|
ba23af1588 | ||
|
|
61a5d5ba7a | ||
|
|
1c7ef396c2 | ||
|
|
04e2723611 | ||
|
|
a39fec7c37 | ||
|
|
d91a5439dc | ||
|
|
56ac2ae2aa | ||
|
|
c1f4e7f33e | ||
|
|
66a1a28d55 | ||
|
|
e03282772c | ||
|
|
c9bdde497e | ||
|
|
208200e112 | ||
|
|
b8e63a1223 | ||
|
|
f59f3d5b41 | ||
|
|
576cf6202c | ||
|
|
5fc56281ba | ||
|
|
89b1a37972 | ||
|
|
b671be11f4 | ||
|
|
974933ba73 | ||
|
|
c49c61cd08 | ||
|
|
1ff174084d | ||
|
|
08d16ae05b | ||
|
|
9d6079deff | ||
|
|
2e9ad73b95 | ||
|
|
94e79032dc | ||
|
|
3e6dbcfc9b | ||
|
|
209f555a14 | ||
|
|
985abc7078 | ||
|
|
86ce47b468 | ||
|
|
f028e3222b | ||
|
|
6918225a80 | ||
|
|
44c599e843 | ||
|
|
9ec3b9bb60 | ||
|
|
e03f2eed73 | ||
|
|
227a3d2af3 | ||
|
|
6c45b02132 | ||
|
|
29a1b1fbc3 | ||
|
|
e8982c78c1 | ||
|
|
89381b7926 | ||
|
|
ece8ec7099 | ||
|
|
4fa3e60150 | ||
|
|
d090a27275 | ||
|
|
d9837786fb | ||
|
|
65fa3a89c3 | ||
|
|
3f17fa9027 | ||
|
|
311518a5bf | ||
|
|
4cca3898ae | ||
|
|
aa7502ec5a | ||
|
|
61580ea1c5 | ||
|
|
c9eb0aeb1a | ||
|
|
3cdead1ade | ||
|
|
c58026055d | ||
|
|
4f4b36336a | ||
|
|
825aec81b5 | ||
|
|
60d7055eaf | ||
|
|
84130ca426 | ||
|
|
d8c1414d98 | ||
|
|
839b5234b5 | ||
|
|
686836247d | ||
|
|
3d85a67a00 | ||
|
|
a4f090d68d | ||
|
|
0bdec005f9 | ||
|
|
d77392365f | ||
|
|
5d9f9ede24 | ||
|
|
5f7df65b0d | ||
|
|
12425d2977 | ||
|
|
ba4a05b58a | ||
|
|
9250f6d2f4 | ||
|
|
0435c9a3da | ||
|
|
52506a76c3 | ||
|
|
d798a1f7b2 | ||
|
|
da7fce722b | ||
|
|
938ab1308e | ||
|
|
2a2666a35c | ||
|
|
8d0b2b1e85 | ||
|
|
562ede03bf | ||
|
|
012dc56989 | ||
|
|
1ccbfb4622 | ||
|
|
2602eda49c | ||
|
|
a018a63bf4 | ||
|
|
77cc6cfaec | ||
|
|
56d4b99ed9 | ||
|
|
358aa534f5 | ||
|
|
b04e72892f | ||
|
|
c6b7ce97ba | ||
|
|
2b5c38b492 | ||
|
|
74cef5eee7 | ||
|
|
1eb9d65931 | ||
|
|
2e8c63ae66 | ||
|
|
38f11abcaf | ||
|
|
e28ad1744d | ||
|
|
3a40890603 | ||
|
|
ff1a81c3af | ||
|
|
5306a54b8f | ||
|
|
0c8d0944bb | ||
|
|
13088751de | ||
|
|
e0330f158f | ||
|
|
b2537d0f36 | ||
|
|
befdd26422 | ||
|
|
dfc1fdf75f | ||
|
|
8207b337fa | ||
|
|
8197cde605 | ||
|
|
f431303fec | ||
|
|
4468432c3e | ||
|
|
202bd77b81 | ||
|
|
4c67f710ee | ||
|
|
e65308e23e | ||
|
|
a5ee4cc447 | ||
|
|
539dda5a7d | ||
|
|
aef7160c54 | ||
|
|
a6f4bf4d1d | ||
|
|
1d5451d3a6 | ||
|
|
d497f69fee | ||
|
|
47a2288c12 | ||
|
|
31661912d1 | ||
|
|
f13c7b3f41 | ||
|
|
5f6da1991f | ||
|
|
290a1ddd9e | ||
|
|
826e4e9eb1 | ||
|
|
91c1eb9513 | ||
|
|
56ddba33b6 | ||
|
|
0807103c43 | ||
|
|
d43a2f74cf | ||
|
|
42862f7218 | ||
|
|
f3a6ddf844 | ||
|
|
fcde190373 | ||
|
|
098726d145 | ||
|
|
de32d7e2da | ||
|
|
239303b74c | ||
|
|
a1e9525206 | ||
|
|
b4da616c8b | ||
|
|
26139bf776 | ||
|
|
3ff908f0d4 | ||
|
|
5b3edb2b20 | ||
|
|
782f47f366 | ||
|
|
598565902b | ||
|
|
55684e987f | ||
|
|
b63aac5765 | ||
|
|
03ed2193ab | ||
|
|
cb91ad4f7e | ||
|
|
41e12d9075 | ||
|
|
f615f66c11 | ||
|
|
3bf92330d6 | ||
|
|
47103efa24 | ||
|
|
2395ded07a | ||
|
|
12e691bfa9 | ||
|
|
52b2ffdd40 | ||
|
|
830d2f3e3c | ||
|
|
1be6c4387c | ||
|
|
289c2ff2e9 | ||
|
|
855336ecb6 | ||
|
|
ecae7833a2 | ||
|
|
6434796522 | ||
|
|
78a64efc5a | ||
|
|
1e01fe5ee8 | ||
|
|
275463bec5 | ||
|
|
94cfcf9cc9 | ||
|
|
86ded093bc | ||
|
|
d74faf0692 | ||
|
|
07aa6372e6 | ||
|
|
874c27e0c5 | ||
|
|
84991f14bd | ||
|
|
f66a69d727 | ||
|
|
1237a7caa7 | ||
|
|
51cb30cfd8 | ||
|
|
bb07197823 | ||
|
|
8a2183e4c7 | ||
|
|
55f44fe4ec | ||
|
|
64618e5ebb | ||
|
|
6fbe265d3d | ||
|
|
30e1ba0f44 | ||
|
|
13e54e418a | ||
|
|
4e1ce9d6e8 | ||
|
|
97c10f5206 | ||
|
|
6d1a45846a | ||
|
|
6c72b07426 | ||
|
|
642b6b4deb | ||
|
|
d184491478 | ||
|
|
fbcb3e1b60 | ||
|
|
aa6677df07 | ||
|
|
04dccc8ba9 | ||
|
|
71a968d193 | ||
|
|
6ca5cf1a31 | ||
|
|
656bf52c1e | ||
|
|
8f8b05ec32 | ||
|
|
f3543e8521 | ||
|
|
148a54ab48 | ||
|
|
8218e7fb4d | ||
|
|
c6b32629f4 | ||
|
|
0c366d282c | ||
|
|
89ff550c89 | ||
|
|
c9bfa8beb1 | ||
|
|
a3990f35bb | ||
|
|
f31947d049 | ||
|
|
19886d983e | ||
|
|
74ec0a43f7 | ||
|
|
718a92d798 | ||
|
|
c6db555f1c | ||
|
|
e830564103 | ||
|
|
f639cc4d3a | ||
|
|
0b85cb8e9e | ||
|
|
7f6ac1da93 | ||
|
|
337c3b7e87 | ||
|
|
d8ed63e940 | ||
|
|
a0f65684c1 | ||
|
|
35c41b36fc | ||
|
|
5f6e7a13a7 | ||
|
|
d90789bc33 | ||
|
|
ec0d5aa4fb | ||
|
|
bd188760af | ||
|
|
f7e49af2fe | ||
|
|
a46c44d252 | ||
|
|
7ffcc2ca54 | ||
|
|
ab0b704352 | ||
|
|
7740f35f0a | ||
|
|
ecf16c425d | ||
|
|
79fda42106 | ||
|
|
543f25d42c | ||
|
|
81378be27e | ||
|
|
847270cd78 | ||
|
|
fc3915a6ed | ||
|
|
f36e1a7a78 | ||
|
|
d2190d6e24 | ||
|
|
b4c0209e21 | ||
|
|
ffededc589 | ||
|
|
707b1f3aa6 | ||
|
|
10291bfa3d | ||
|
|
1fd69bb680 | ||
|
|
4fdd38f4bd | ||
|
|
8393a48f5e | ||
|
|
377bd50566 | ||
|
|
37cbbfac75 | ||
|
|
628af3ea85 | ||
|
|
1153e63814 | ||
|
|
855706ce39 | ||
|
|
a8bf1d970d | ||
|
|
91c3bc8375 | ||
|
|
ca57c495a4 | ||
|
|
9c800d8bd1 | ||
|
|
6cb8bf9bd8 | ||
|
|
76052cd59f | ||
|
|
a31ff2429e | ||
|
|
5389681ba3 | ||
|
|
7b6de23cd6 | ||
|
|
c0773a3824 | ||
|
|
f900a8c2f2 | ||
|
|
436725e954 | ||
|
|
b0b11f4d2a | ||
|
|
8cbd7f2c79 | ||
|
|
dedd186a0f | ||
|
|
c4226c6a5e | ||
|
|
92e57dc197 | ||
|
|
7f465fc6aa | ||
|
|
472ed6fb1d | ||
|
|
f4bfa619c8 | ||
|
|
6e257d1870 | ||
|
|
475cc3ab1b | ||
|
|
9c4f50c966 | ||
|
|
f9e6840e7e | ||
|
|
d7471c0b1f | ||
|
|
3bd4d40e82 | ||
|
|
8b6e612f14 | ||
|
|
8007c61fc3 | ||
|
|
72c5c05904 | ||
|
|
8d84609096 | ||
|
|
7e981583ca | ||
|
|
24c2a53060 | ||
|
|
370c727b12 | ||
|
|
5453476f0f | ||
|
|
042e35dceb | ||
|
|
3c9dff260d | ||
|
|
0259b768eb | ||
|
|
feeb26d9b4 | ||
|
|
c128cd8be1 | ||
|
|
a2e3edbf18 | ||
|
|
663612fb5b | ||
|
|
8a5c16db6a | ||
|
|
91e94bc968 | ||
|
|
c437052772 | ||
|
|
11f2c4c60d | ||
|
|
e9bef1bf51 | ||
|
|
8da7549374 | ||
|
|
3a8183bf07 | ||
|
|
e6bce9fb80 | ||
|
|
2124d9022b | ||
|
|
9ee81133f9 | ||
|
|
94ea769238 | ||
|
|
d22c592cd4 | ||
|
|
e162ddd4af | ||
|
|
2acd83c714 | ||
|
|
172db7fa17 | ||
|
|
794758c7f0 | ||
|
|
ef753491be | ||
|
|
772f5c8933 | ||
|
|
1a10eeaa92 | ||
|
|
aeb4c83054 | ||
|
|
1ff20bf31c | ||
|
|
b1caf8b68d | ||
|
|
d7ae2d552e | ||
|
|
9040072b05 | ||
|
|
c70cd90040 | ||
|
|
21aa232b50 | ||
|
|
598b60c184 | ||
|
|
66578e8d2b | ||
|
|
69486dd77c | ||
|
|
b8810f1ef4 | ||
|
|
c2cd025585 | ||
|
|
507f34be11 | ||
|
|
aab6edc314 | ||
|
|
15c2b67663 | ||
|
|
b64b790238 | ||
|
|
7899d89a15 | ||
|
|
132428a097 | ||
|
|
fcf7b3dc0f | ||
|
|
012570916c | ||
|
|
31b2e54fea | ||
|
|
5d9821d979 | ||
|
|
36cf3b9449 | ||
|
|
bbdc106d00 | ||
|
|
3e85aacdb5 | ||
|
|
2da2533220 | ||
|
|
6a1022782e | ||
|
|
6201b0823b | ||
|
|
9a94562c33 | ||
|
|
da5fa2a882 | ||
|
|
8387be47e8 | ||
|
|
32b8cfe6d3 | ||
|
|
c1362597fe | ||
|
|
178f375fd1 | ||
|
|
429402fd67 | ||
|
|
57124714a4 | ||
|
|
9c3daea477 | ||
|
|
4eaaaac7e0 | ||
|
|
72edaf786c | ||
|
|
2b9681ea06 | ||
|
|
320199e5de | ||
|
|
ed2854249d | ||
|
|
ce9dceee07 | ||
|
|
194becd854 | ||
|
|
583c0c13d2 | ||
|
|
8edfee98a2 | ||
|
|
fa03911181 | ||
|
|
5faf195dce | ||
|
|
f5e722688d | ||
|
|
b6b13e292d | ||
|
|
f5a3bbe8d2 | ||
|
|
6ca9a691be | ||
|
|
a7f148e193 | ||
|
|
1de6843820 | ||
|
|
2124e8ee37 | ||
|
|
1c9ec167d9 | ||
|
|
439a375ad0 | ||
|
|
9ee471069e | ||
|
|
973130052a | ||
|
|
0cf3261e1e | ||
|
|
a1fefddee7 | ||
|
|
f690a39567 | ||
|
|
663a864bbc | ||
|
|
0bfe3330eb | ||
|
|
f78c05f36f | ||
|
|
cda54a3758 | ||
|
|
39522f1a51 | ||
|
|
4165b28c50 | ||
|
|
973e3d2347 | ||
|
|
e1c9b28c8e | ||
|
|
bb2e92146e | ||
|
|
9167316236 | ||
|
|
8184848c4e | ||
|
|
b57e95e78d | ||
|
|
fcc9404669 | ||
|
|
a410f88aa9 | ||
|
|
40c07ee4a7 | ||
|
|
aeb3294b52 | ||
|
|
bcc68bc9d3 | ||
|
|
db698dba0b | ||
|
|
2297164dc7 | ||
|
|
8483755866 | ||
|
|
e36dd3b5bb | ||
|
|
0a53a99ff6 | ||
|
|
0d82709cb6 | ||
|
|
ff522a0f89 | ||
|
|
89d1ed64f8 | ||
|
|
508f107315 | ||
|
|
c42e36607b | ||
|
|
986f6a8ad2 | ||
|
|
869b136351 | ||
|
|
79756fe82b | ||
|
|
be8003cc46 | ||
|
|
7cfee6dd37 | ||
|
|
592a429b5b | ||
|
|
4b9c717de9 | ||
|
|
11d6efc86b | ||
|
|
deb5da550e | ||
|
|
41243c253d | ||
|
|
fc4157bcfd | ||
|
|
a4bef1b7ca | ||
|
|
e80cd9711e | ||
|
|
76bab54b9e | ||
|
|
589291513b | ||
|
|
1d751b1b42 | ||
|
|
0fac2f26c1 | ||
|
|
db83dce4f7 | ||
|
|
4c2b297437 | ||
|
|
3061fba755 | ||
|
|
40ad29ae59 | ||
|
|
dcd606f6d6 | ||
|
|
d4cc15a8c8 | ||
|
|
ef0ac7f320 | ||
|
|
3f83d5ee4c | ||
|
|
751dac7c5a | ||
|
|
a17b1542a2 | ||
|
|
42b2eae07b | ||
|
|
f3ed5aa6b7 | ||
|
|
c3f9146422 | ||
|
|
453d5d234b | ||
|
|
d47a747a28 | ||
|
|
7f4e5223a4 | ||
|
|
42eeea4d5f | ||
|
|
b8cdae5402 | ||
|
|
15606a9acf | ||
|
|
7fe8e5a49c | ||
|
|
1b0d16c7f0 | ||
|
|
b9321d859b | ||
|
|
969eaaeec1 | ||
|
|
ccfed5ef14 | ||
|
|
21413e30c9 | ||
|
|
cace3094be | ||
|
|
fc10639710 | ||
|
|
f64381bc2a | ||
|
|
930314267b | ||
|
|
569958f9b0 | ||
|
|
3d85713072 | ||
|
|
2c34417b8d | ||
|
|
e38e8289af | ||
|
|
1e836d87a3 | ||
|
|
41ef4809f3 | ||
|
|
8eac253f2b | ||
|
|
c4223e3abc | ||
|
|
a2131785b6 | ||
|
|
ac313cbd6c | ||
|
|
89c15192cc | ||
|
|
78c120212b | ||
|
|
991c425601 | ||
|
|
f55a32185c | ||
|
|
e557609dc3 | ||
|
|
b688542b93 | ||
|
|
a0c9c54220 | ||
|
|
b34d66a6a9 | ||
|
|
a56cdcb30f | ||
|
|
8d6ab22fa5 | ||
|
|
f441d2d6aa | ||
|
|
5a427767b9 | ||
|
|
09a4f13a78 | ||
|
|
85ef8ea149 | ||
|
|
e11b215949 | ||
|
|
6423465108 | ||
|
|
6ab3cd8548 | ||
|
|
11d9dd3fbf | ||
|
|
a0e6ea3bb8 | ||
|
|
5827f9e8ae | ||
|
|
d5fa39e22c | ||
|
|
d649366a3c | ||
|
|
7423092679 | ||
|
|
78b4e635ef | ||
|
|
f9d4f90eac | ||
|
|
f4ece76cae | ||
|
|
39656babfb | ||
|
|
e457768e03 | ||
|
|
48fc9d82c6 | ||
|
|
7aef9841c9 | ||
|
|
ec4655363c | ||
|
|
0504df5655 | ||
|
|
5d4fc6c490 | ||
|
|
76b9e77e18 | ||
|
|
9e9770116c | ||
|
|
6340a92889 | ||
|
|
6d7736fb92 | ||
|
|
6e2b1bf205 | ||
|
|
a06c2af788 | ||
|
|
66cd190dd8 | ||
|
|
a18cf8ddd1 | ||
|
|
ee3c6aee67 | ||
|
|
04d9ac4212 | ||
|
|
71e7faeaa3 | ||
|
|
a5b4157b52 | ||
|
|
f722aff2e5 | ||
|
|
fbbb9d9b8a | ||
|
|
8eb0556eb8 | ||
|
|
c5d4a426bd | ||
|
|
8a8cbe9054 | ||
|
|
eaf11f68e2 | ||
|
|
8c444248d4 | ||
|
|
00692f1045 | ||
|
|
3312d92d22 | ||
|
|
29f6971f6d | ||
|
|
adcacca1dc | ||
|
|
a5299caacc | ||
|
|
c65af9b2fa | ||
|
|
0bd26d633c | ||
|
|
93c007495c | ||
|
|
2e677a14f7 | ||
|
|
292cfe0485 | ||
|
|
528820b7bc | ||
|
|
4e3e9e190f | ||
|
|
4eaa9776ab | ||
|
|
6355b9b077 | ||
|
|
f8818c3d50 | ||
|
|
b389d9598c | ||
|
|
bb9024db94 | ||
|
|
41ea19694d | ||
|
|
b43424c9a5 | ||
|
|
4402014e7a | ||
|
|
e854641f48 | ||
|
|
3353582842 | ||
|
|
5086c73688 | ||
|
|
1cc54c844f | ||
|
|
5d2745686f | ||
|
|
7dbd3ab148 | ||
|
|
1d92fd2174 | ||
|
|
e292261544 | ||
|
|
76755db794 | ||
|
|
8c73c6090b | ||
|
|
ec366ee9a8 | ||
|
|
a2d2f79854 | ||
|
|
0d1279ca21 | ||
|
|
d6230f103d | ||
|
|
21bcfe0b79 | ||
|
|
41f71617b2 | ||
|
|
1feb56c061 | ||
|
|
4de09dd67a | ||
|
|
550ba0a7ed | ||
|
|
d00639c2a8 | ||
|
|
df3c4f86fc | ||
|
|
4e255bfd4d | ||
|
|
afed50eeec | ||
|
|
9749a50afd | ||
|
|
962cfa3f25 | ||
|
|
00461e5ded | ||
|
|
eafac1438c | ||
|
|
fab26987c1 | ||
|
|
41012e44a2 | ||
|
|
539f249f86 | ||
|
|
9710f741b5 | ||
|
|
09b23e52a0 | ||
|
|
86e3d5b5fd | ||
|
|
40b9699cf0 | ||
|
|
6f55262500 | ||
|
|
e8acfd43f3 | ||
|
|
3121543cb0 | ||
|
|
194f5bbddd | ||
|
|
fee03bf502 | ||
|
|
89dddac756 | ||
|
|
c20d35dfc5 | ||
|
|
389113f516 | ||
|
|
47390861e7 | ||
|
|
a92dbe5c98 | ||
|
|
0531f93bed | ||
|
|
bbecc9e370 | ||
|
|
bf659e1351 | ||
|
|
0f08b5be09 | ||
|
|
a0fd7283a8 | ||
|
|
e73f0c62d6 | ||
|
|
bd87da2b35 | ||
|
|
83ae55d002 | ||
|
|
113be93921 | ||
|
|
05f5abadde | ||
|
|
64b0cbc7a5 | ||
|
|
ebf1ed0611 | ||
|
|
5fe7fc20b7 | ||
|
|
d42d72b7ba | ||
|
|
085149a175 | ||
|
|
705cd05b2e | ||
|
|
24097480f2 | ||
|
|
dc8d8e89e4 | ||
|
|
2e960ce4ee | ||
|
|
24dd7b3472 | ||
|
|
9bac645562 | ||
|
|
93d3216a4f | ||
|
|
d8f5fdce15 | ||
|
|
6b00fe14ad | ||
|
|
a832acdd32 | ||
|
|
2d5f769b8e | ||
|
|
1b95d091e8 | ||
|
|
47206ebb3a | ||
|
|
b4e6a15f34 | ||
|
|
194e861f66 | ||
|
|
8d0a6c171e | ||
|
|
7a8ddc9742 | ||
|
|
21738805e8 | ||
|
|
0676d07990 | ||
|
|
ea28f54007 | ||
|
|
fe5caf3b68 | ||
|
|
dc428884de | ||
|
|
fa5c61028b | ||
|
|
658bc3e6b5 | ||
|
|
57f1af7b5d | ||
|
|
7efe0da642 | ||
|
|
f005578345 | ||
|
|
a11970b9cf | ||
|
|
cbed00b581 | ||
|
|
9ab225a9a8 | ||
|
|
bc62fd10e4 | ||
|
|
6fb0e44422 | ||
|
|
87a6b533a8 | ||
|
|
c04f3c57cf | ||
|
|
a517e1d90b | ||
|
|
cc8f559a29 | ||
|
|
26e2264401 | ||
|
|
1a6dc9be67 | ||
|
|
92b8443e66 | ||
|
|
0558da2302 | ||
|
|
e8b275c965 | ||
|
|
22bcf4e91d | ||
|
|
978fb6c444 | ||
|
|
3bdb5d0c11 | ||
|
|
a3bb62856f | ||
|
|
f79c567a86 | ||
|
|
5765c0466b | ||
|
|
7276a71200 | ||
|
|
0b9cf9f3ab | ||
|
|
7d787fcd5d | ||
|
|
bede184f94 | ||
|
|
4149286ba0 | ||
|
|
bbe5a9a0d8 | ||
|
|
628b464143 | ||
|
|
54e33b5c6f | ||
|
|
ac36a45020 | ||
|
|
72ea71f705 | ||
|
|
8276c12b7d | ||
|
|
b917404f5b | ||
|
|
4a9dcf1ca1 | ||
|
|
7113dfce6b | ||
|
|
34054723f0 | ||
|
|
315df123fc | ||
|
|
d9fb8fa6bc | ||
|
|
82a6e7e6cc | ||
|
|
4383d6218c | ||
|
|
0dcb030128 | ||
|
|
2dcdc48caa | ||
|
|
ff8b10bebf | ||
|
|
3710aac4aa | ||
|
|
1166cba066 | ||
|
|
5447c31e6e | ||
|
|
77238249eb | ||
|
|
d9cae4a473 | ||
|
|
228734f8b0 | ||
|
|
c59ad348cc | ||
|
|
7bf4ac858d | ||
|
|
f417c06eab | ||
|
|
7a282028e8 | ||
|
|
2f797b2b28 | ||
|
|
a78c21f2ec | ||
|
|
e99a3c27a0 | ||
|
|
01b689ea37 | ||
|
|
b8e3eb9c1c | ||
|
|
bc5b39dd27 | ||
|
|
b0abcc1bdb | ||
|
|
cfda9278a6 | ||
|
|
d55f8a25a5 | ||
|
|
a28220fe08 | ||
|
|
10522582ab | ||
|
|
311f2b7d62 | ||
|
|
1572c2c55b | ||
|
|
6f6efc04d2 | ||
|
|
caa5b53aa5 | ||
|
|
e8e8e58781 | ||
|
|
998705bd88 | ||
|
|
5f95193551 | ||
|
|
f3c68789c4 | ||
|
|
7df60e562f | ||
|
|
896ea5c17b | ||
|
|
0ccbdbff97 | ||
|
|
2f62a513a4 | ||
|
|
fb0959662e | ||
|
|
c6647b2748 | ||
|
|
24f8a6000d | ||
|
|
3a6176b452 | ||
|
|
21ecbc7f06 | ||
|
|
d4e1a32199 | ||
|
|
68c75b087a | ||
|
|
1c5d044672 | ||
|
|
75f1b8eef3 | ||
|
|
23181966ce | ||
|
|
4a5836f3d3 | ||
|
|
8a8074a24f | ||
|
|
4553386ef7 | ||
|
|
16d285b142 | ||
|
|
4ccc83f84c | ||
|
|
f97bb1119f | ||
|
|
b5dfdf3fbe | ||
|
|
9113774a9c | ||
|
|
a5c10fd5cc | ||
|
|
6d19f9319a | ||
|
|
da34fb145c | ||
|
|
61ee3c3391 | ||
|
|
46ac88f626 | ||
|
|
47476ad332 | ||
|
|
a5cd9602f1 | ||
|
|
66bf7b47a3 | ||
|
|
6206c8a4bb | ||
|
|
d11a1f2135 | ||
|
|
0ff6a8f950 | ||
|
|
91f0875e7e | ||
|
|
ecccf09d4b | ||
|
|
40d02b79c9 | ||
|
|
0ce3b5d9ca | ||
|
|
4528cf3f59 | ||
|
|
79e6282415 | ||
|
|
f115d1a878 | ||
|
|
0d3c43dbef | ||
|
|
6f3d8c8b3a | ||
|
|
854ec2560c | ||
|
|
8ed81c8476 | ||
|
|
baef964530 | ||
|
|
59e08ab47e | ||
|
|
beb7d51cd3 | ||
|
|
a9fce8ffb8 | ||
|
|
b9e2302608 | ||
|
|
a41438407d | ||
|
|
a1edca6d9c | ||
|
|
306b7c57ca | ||
|
|
b83cdb8cfb | ||
|
|
fae0ebc857 | ||
|
|
0119b160d1 | ||
|
|
695e61a6ea | ||
|
|
50600b7abd | ||
|
|
08110897f6 | ||
|
|
dc7c872e39 | ||
|
|
a4da01852e | ||
|
|
4a5dad9446 | ||
|
|
c0bef4cb98 | ||
|
|
43960bd029 | ||
|
|
abe3d89cc0 | ||
|
|
7466ec055e | ||
|
|
8f959a5610 | ||
|
|
fc09e989ae | ||
|
|
7d980b7b29 | ||
|
|
ca72f751bf | ||
|
|
d07d6a6221 | ||
|
|
46e8b8b100 | ||
|
|
b0f350f739 | ||
|
|
3521742fde | ||
|
|
e29cbcc5b2 | ||
|
|
52a0134830 | ||
|
|
edf74e34c8 | ||
|
|
b7ebe1f52d | ||
|
|
fbd53b36ea | ||
|
|
b37e66d09c | ||
|
|
d5b127bc2c | ||
|
|
b301db2a50 | ||
|
|
8550244472 | ||
|
|
2cb97b8de5 | ||
|
|
ce350a5efc | ||
|
|
e53923fb54 | ||
|
|
44842352c2 | ||
|
|
ae26e4549b | ||
|
|
52de688371 | ||
|
|
134674a524 | ||
|
|
f0e0830991 | ||
|
|
c25ef2c717 | ||
|
|
c1e1e819ff | ||
|
|
9f8749f15a | ||
|
|
93db154de7 | ||
|
|
1f56d807fd | ||
|
|
8da3e1deb3 | ||
|
|
a932b8a7a3 | ||
|
|
75c22859b8 | ||
|
|
37d1b352d6 | ||
|
|
1b454e2a3f | ||
|
|
a38ac41abe | ||
|
|
f8867e16e1 | ||
|
|
fbc9ec9eeb | ||
|
|
3b365ba27a | ||
|
|
d3eadcab9e | ||
|
|
6dee9f5a30 | ||
|
|
691cac30fd | ||
|
|
8f33f1fe52 | ||
|
|
a73a9ecfb3 | ||
|
|
309a005fbf | ||
|
|
5a42ee73f2 | ||
|
|
aa7c6d0def | ||
|
|
1c669a5699 | ||
|
|
a2e431c869 | ||
|
|
1144dbba2f | ||
|
|
273b46256c | ||
|
|
d582e38124 | ||
|
|
c4ed0ced23 | ||
|
|
5ef77d4b20 | ||
|
|
3083129cd0 | ||
|
|
e61147472b | ||
|
|
9902d1ee4b | ||
|
|
9cdc5d8528 | ||
|
|
9e3dcd6ed2 | ||
|
|
86a89cc19a | ||
|
|
5aa1a897c8 | ||
|
|
7ee8eed3e7 | ||
|
|
7db1cc76a0 | ||
|
|
b7ae96b551 | ||
|
|
ad59b280df | ||
|
|
693df1560c | ||
|
|
8ba2f1f3f4 | ||
|
|
25697214b8 | ||
|
|
ce0d67edfe | ||
|
|
7983ed84e5 | ||
|
|
fb13513532 | ||
|
|
5bbce8fac6 | ||
|
|
78f31c26eb | ||
|
|
f54f1e64a9 | ||
|
|
92a0ca4417 | ||
|
|
8d5c3eeee3 | ||
|
|
2545f56955 | ||
|
|
12fdd78962 | ||
|
|
10abcfb871 | ||
|
|
35ebc244b2 | ||
|
|
36240537c1 | ||
|
|
f1b294d31c | ||
|
|
955cba470e | ||
|
|
97b2ebc1d4 | ||
|
|
aab989c503 | ||
|
|
22f692d963 | ||
|
|
d1bbe6604e | ||
|
|
539915e62b | ||
|
|
1a63f6aa7a | ||
|
|
a6c524e2d5 | ||
|
|
580a036990 | ||
|
|
8958b400d6 | ||
|
|
c26b438608 | ||
|
|
f2e0a28cbf | ||
|
|
4e02a633e7 | ||
|
|
481f070808 | ||
|
|
13556792b1 | ||
|
|
d42ae998d5 | ||
|
|
b78af0df1a | ||
|
|
03743d8068 | ||
|
|
52cef1df06 | ||
|
|
16cacf45b6 | ||
|
|
3e3609837e | ||
|
|
259fdffe9f | ||
|
|
6c510b8395 | ||
|
|
f6b0ed74d2 | ||
|
|
3d5101408a | ||
|
|
9ac28f328d | ||
|
|
f0d3324733 | ||
|
|
00712aa243 | ||
|
|
7dab2d218a | ||
|
|
ccc229ea15 | ||
|
|
fb347cf82e | ||
|
|
bf647d3160 | ||
|
|
9654e0d663 | ||
|
|
5af2e65521 | ||
|
|
ff704cf271 | ||
|
|
8558cb2025 | ||
|
|
4e9f2e0919 | ||
|
|
cdc633d400 | ||
|
|
422a2bb2af | ||
|
|
1b0890ad43 | ||
|
|
aa56e1dd11 | ||
|
|
dfe6d93ba1 | ||
|
|
c27c1df594 | ||
|
|
9d4a9a7f43 | ||
|
|
e8539a9b8a | ||
|
|
8b3d0d82e4 | ||
|
|
6932699f20 | ||
|
|
511cf1a79f | ||
|
|
eea3721681 | ||
|
|
6199d7dd92 | ||
|
|
6daf2dc36b | ||
|
|
63135b4660 | ||
|
|
09406ff79a | ||
|
|
8a9801be01 | ||
|
|
550b5ef83a | ||
|
|
c0c8c128b5 | ||
|
|
88bf06cc6e | ||
|
|
adac77f36b | ||
|
|
e8479a001a | ||
|
|
401a740df9 | ||
|
|
a6a2d30e0a | ||
|
|
326ab62350 | ||
|
|
c0e71c4851 | ||
|
|
d7f31e51e7 | ||
|
|
77431fc6d9 | ||
|
|
23c88e88e0 | ||
|
|
17a62de5d1 | ||
|
|
e7290bd0ae | ||
|
|
a8bd0e0a26 | ||
|
|
be759e1bb1 | ||
|
|
425a287121 | ||
|
|
c3a27eeadc | ||
|
|
7a15449dfe | ||
|
|
803134d541 | ||
|
|
9e3bde4b63 | ||
|
|
e6ad9b242b | ||
|
|
672d873ac1 | ||
|
|
198dddb9e5 | ||
|
|
714a693897 | ||
|
|
1122828200 | ||
|
|
e6cea9c6d4 | ||
|
|
00ffd0edf5 | ||
|
|
c79ee12e6e | ||
|
|
23d6d63c90 | ||
|
|
6ba945af50 | ||
|
|
ad92daf350 | ||
|
|
df6f34feb7 | ||
|
|
59c887bca1 | ||
|
|
6721ac5da6 | ||
|
|
95f94a77ac | ||
|
|
95d527d9d1 | ||
|
|
6b8287e96e | ||
|
|
7c1a6cf716 | ||
|
|
9cc76f749f | ||
|
|
5c9b12bc7d | ||
|
|
3007cc3357 | ||
|
|
9f3134165f | ||
|
|
6816b4d3c5 | ||
|
|
f52d6a7043 | ||
|
|
a120b0a3da | ||
|
|
32d11d9912 | ||
|
|
dd4870cc31 | ||
|
|
3bdb19620c | ||
|
|
84f3eaf827 | ||
|
|
68a33b4294 | ||
|
|
c7a364f59d | ||
|
|
aae4f1aedb | ||
|
|
6926ecb592 | ||
|
|
ea4098c6f4 | ||
|
|
9c12620898 | ||
|
|
8c456e3c49 | ||
|
|
f561891749 | ||
|
|
7d538c9083 | ||
|
|
98c777bd3b | ||
|
|
b23223df3b | ||
|
|
354fd7c8bc | ||
|
|
3c2951f727 | ||
|
|
4a1389cdf1 | ||
|
|
1e2da65fe2 | ||
|
|
7a4d5efa90 | ||
|
|
e3573d7880 | ||
|
|
c63194c885 | ||
|
|
dd34e29b02 | ||
|
|
2244a2ae61 | ||
|
|
8408cc8a13 | ||
|
|
189d755c08 | ||
|
|
87c33bfb8c | ||
|
|
e679237388 | ||
|
|
c1aeb3aadc | ||
|
|
9e3ac39731 | ||
|
|
e6e1153880 | ||
|
|
8849a2c55d | ||
|
|
178427dc60 | ||
|
|
91838e5ed3 | ||
|
|
c4732589e0 | ||
|
|
75af4921e6 | ||
|
|
a2f51d23b8 | ||
|
|
a2e4ee6d76 | ||
|
|
93bad27880 | ||
|
|
cfc6a04ff0 | ||
|
|
d33ac95870 | ||
|
|
f8b2f30994 | ||
|
|
dcf8d71bb4 | ||
|
|
a180cc8611 | ||
|
|
7aeb05ef61 | ||
|
|
0ec73e5aa0 | ||
|
|
f694204856 | ||
|
|
0a46c00983 | ||
|
|
2cc08e3971 | ||
|
|
2bdca8241a | ||
|
|
f7811287b2 | ||
|
|
8355a8b032 | ||
|
|
9dd301068a | ||
|
|
ba2b1746eb | ||
|
|
6e9c1914c2 | ||
|
|
a14acc58a4 | ||
|
|
d0049ddd1f | ||
|
|
4adb5072ea | ||
|
|
e0a5305394 | ||
|
|
35b0338f68 | ||
|
|
eadad98bbb | ||
|
|
f68527b258 | ||
|
|
ee2657e38b | ||
|
|
2cc514c16d | ||
|
|
639aad730d | ||
|
|
a7f3bbeea0 | ||
|
|
27070370ea | ||
|
|
502bce664b | ||
|
|
965875359d | ||
|
|
5933b78ab3 | ||
|
|
4576a632cf | ||
|
|
a7ceef90cf | ||
|
|
f12a504a69 | ||
|
|
09d234796d | ||
|
|
d2ec527886 | ||
|
|
c0b9ff7209 | ||
|
|
3a39f626e5 | ||
|
|
172d04cd44 | ||
|
|
0b800a28ac | ||
|
|
c131e92edc | ||
|
|
e18eb97ba4 | ||
|
|
437e3c4b38 | ||
|
|
d94f0a9f61 | ||
|
|
7d6647e0ad | ||
|
|
75776be0ff | ||
|
|
0f5a65a79c | ||
|
|
4366e133ff | ||
|
|
95359eed7b | ||
|
|
1af0a01ced | ||
|
|
886b8ce9a8 | ||
|
|
49dc284a5a | ||
|
|
17ec8e0b6b | ||
|
|
0a3bbb3b14 | ||
|
|
c0968fb896 | ||
|
|
749a593eb5 | ||
|
|
30869594f6 | ||
|
|
d4c07531d5 | ||
|
|
de082f7e55 | ||
|
|
536e7e32b8 | ||
|
|
4fc9e41c30 | ||
|
|
019e69d92c | ||
|
|
4383ae03d2 | ||
|
|
76cdbc4bf0 | ||
|
|
1508253670 | ||
|
|
dad12eac1a | ||
|
|
4deb5f8314 | ||
|
|
41c921cc0d | ||
|
|
4ac431d101 | ||
|
|
74c3c54ef4 | ||
|
|
8dbe56003b | ||
|
|
1884961fd0 | ||
|
|
2572ac2672 | ||
|
|
fca1625a3e | ||
|
|
eb83234eb0 | ||
|
|
f2e35d0102 | ||
|
|
bfbae56e3e | ||
|
|
de20749830 | ||
|
|
7cf3435f92 | ||
|
|
b325a7ad2e | ||
|
|
c770fc07f4 | ||
|
|
7532695935 | ||
|
|
5cbb2bef00 | ||
|
|
61a5136f14 | ||
|
|
671155d25e | ||
|
|
271eb46159 | ||
|
|
483e0abe51 | ||
|
|
8a496b2ea8 | ||
|
|
65eb71905f | ||
|
|
95b1ec9c4a | ||
|
|
07169e5061 | ||
|
|
d6de65c1e5 | ||
|
|
7f1e33bbd8 | ||
|
|
2d630c6c52 | ||
|
|
886ff3af9b | ||
|
|
32f7df54aa | ||
|
|
1d301b3e74 | ||
|
|
5ade1b8955 | ||
|
|
f31fac0b35 | ||
|
|
57173d02b1 | ||
|
|
85b08f29e8 | ||
|
|
cc05e95936 | ||
|
|
ffb3842036 | ||
|
|
5a5d204a30 | ||
|
|
9ce6274837 | ||
|
|
f3b5e35fdb | ||
|
|
f8f04cbf4b | ||
|
|
ce22666f8c | ||
|
|
2631f5a5b1 | ||
|
|
a5957af59d | ||
|
|
df45c0539a | ||
|
|
25e2b0d3a0 | ||
|
|
b3c9071179 | ||
|
|
fd8206052c | ||
|
|
021a754c07 | ||
|
|
271fe74338 | ||
|
|
93c4c91bef | ||
|
|
5054855523 | ||
|
|
25eeaf5a59 | ||
|
|
472d4c07e5 | ||
|
|
4dc670c8a8 | ||
|
|
86d8d76ce1 | ||
|
|
489894ffd0 | ||
|
|
be5ff96125 | ||
|
|
8415a488fd | ||
|
|
fdebcb940a | ||
|
|
6bf03b5d10 | ||
|
|
6bfb64151a | ||
|
|
2ddb2e3587 | ||
|
|
5de7177ba2 | ||
|
|
f52779ebb3 | ||
|
|
2f4b60f849 | ||
|
|
c199185ba5 | ||
|
|
108b94ad55 | ||
|
|
920bfa7bc3 | ||
|
|
d19bdcfba4 | ||
|
|
09c89c264d | ||
|
|
37b00f84d4 | ||
|
|
dbab1ca310 | ||
|
|
1a4225c844 | ||
|
|
cdce968b5d | ||
|
|
ed9b11bb52 | ||
|
|
702e9c2049 | ||
|
|
631959c9d8 | ||
|
|
303d52bed7 | ||
|
|
8682ecf649 | ||
|
|
d37e75888a | ||
|
|
8e5369887e | ||
|
|
58c46bfd95 | ||
|
|
7486c43342 | ||
|
|
5f005496df | ||
|
|
737ce71384 | ||
|
|
fbffacb24c | ||
|
|
d8f4ed45e7 | ||
|
|
ba9c91f9cb | ||
|
|
da5fb597bb | ||
|
|
46b4d21159 | ||
|
|
692225d6f3 | ||
|
|
547fd9fe82 | ||
|
|
9ee59fd0a7 | ||
|
|
a3ba8803ea | ||
|
|
4f40003f8b | ||
|
|
a1039bc056 | ||
|
|
4411b0ff85 | ||
|
|
7bf26551e3 | ||
|
|
d392e99a99 | ||
|
|
2de25d8fb1 | ||
|
|
6bab110f75 | ||
|
|
71ac936079 | ||
|
|
50f5eaceac | ||
|
|
c04fd8f729 | ||
|
|
fdf942b17f | ||
|
|
ca8e7b7214 | ||
|
|
87dc7c767d | ||
|
|
2046ebb2fd | ||
|
|
16fff7e1b2 | ||
|
|
7452ec6f53 | ||
|
|
9a4855db59 | ||
|
|
aeb5c554c5 | ||
|
|
d352d9f877 | ||
|
|
19feb974c6 | ||
|
|
58c7917942 | ||
|
|
8eb4702ceb | ||
|
|
459824f52f | ||
|
|
11ffd382b5 | ||
|
|
33db2124c6 | ||
|
|
5178bfd37a | ||
|
|
871f1d7e0f | ||
|
|
5f0c453157 | ||
|
|
d24dd7d3b7 | ||
|
|
8702abe745 | ||
|
|
eb00695e56 | ||
|
|
2fae53247c | ||
|
|
4a1d3c0321 | ||
|
|
8f572345ae | ||
|
|
708a4380e6 | ||
|
|
84be2234de | ||
|
|
39bfe8c8b4 | ||
|
|
4f67e9dc04 | ||
|
|
388048ce52 | ||
|
|
acf07e063d | ||
|
|
7e3450e64c | ||
|
|
189fdedbe6 | ||
|
|
379edc2465 | ||
|
|
074f563e7d | ||
|
|
6e1bad98a1 | ||
|
|
d5c18bf2c4 | ||
|
|
eb5c556b09 | ||
|
|
09c80f3b61 | ||
|
|
1af1645b2b | ||
|
|
36c83f1baf | ||
|
|
eab51d3cc8 | ||
|
|
f9d33fbdaa | ||
|
|
7abfc10dd1 | ||
|
|
b7c52ccbbe | ||
|
|
0a403b012d | ||
|
|
822fb29ca4 | ||
|
|
238dcac02c | ||
|
|
ca04ffb4fe | ||
|
|
fe351346c6 | ||
|
|
a8bc18c220 | ||
|
|
25eba8f1c4 | ||
|
|
706a37e24c | ||
|
|
e47a625d2b | ||
|
|
92fb428b12 | ||
|
|
6175032302 | ||
|
|
fe74e84161 | ||
|
|
bf50a61dd1 | ||
|
|
369aea9870 | ||
|
|
fd391c2a1d | ||
|
|
76f6ccce79 | ||
|
|
e762b88696 | ||
|
|
2b0b70acc6 | ||
|
|
8eff738e53 | ||
|
|
44c64730d1 | ||
|
|
e9f9bcae34 | ||
|
|
2337c63731 | ||
|
|
d4cdf8a215 | ||
|
|
ad5646579d | ||
|
|
536a5ce49e | ||
|
|
6b41c38783 | ||
|
|
bdee4beadb | ||
|
|
d0b106bbb6 | ||
|
|
a7d786a057 | ||
|
|
5f50ecbc82 | ||
|
|
2e84a9b0ec | ||
|
|
23495b47ce | ||
|
|
da773a1c98 | ||
|
|
8ed9eafafc | ||
|
|
c5b3327cdb | ||
|
|
bd992c6aea | ||
|
|
be82235f28 | ||
|
|
09a43b48f6 | ||
|
|
091ab2c879 | ||
|
|
361a12de99 | ||
|
|
1b4c4bf82b | ||
|
|
42284391f0 | ||
|
|
659d784015 | ||
|
|
b7a6ed84cf | ||
|
|
425101c2e3 | ||
|
|
46e3e41908 | ||
|
|
436de69f18 | ||
|
|
112919df61 | ||
|
|
a829a5aec3 | ||
|
|
e9099c1698 | ||
|
|
41801c15a2 | ||
|
|
66a4c3db42 | ||
|
|
d216f6a2ab | ||
|
|
0419676366 | ||
|
|
fd828416d9 | ||
|
|
fb44abba9f | ||
|
|
c0e23399f0 | ||
|
|
2d11cf2a8d | ||
|
|
7feebbc78f | ||
|
|
9f98ac18d6 | ||
|
|
dfab6b5606 | ||
|
|
c36e54c328 | ||
|
|
43f878a356 | ||
|
|
814d139837 | ||
|
|
81553e5183 | ||
|
|
3645acf447 | ||
|
|
05abae1f31 | ||
|
|
8be3968ccb | ||
|
|
d384f54842 | ||
|
|
4d07b67a40 | ||
|
|
d6f2b8d5d2 | ||
|
|
7eda0f529b | ||
|
|
cb3e6fc211 | ||
|
|
bc9795fb3c | ||
|
|
0c301841b3 | ||
|
|
42be1a1ec0 | ||
|
|
a05548be4b | ||
|
|
df76c59b29 | ||
|
|
3b253b69fc | ||
|
|
5d3a6da321 | ||
|
|
6ebcbf3ecc | ||
|
|
423c6adc62 | ||
|
|
bfebf4efc9 | ||
|
|
08913c2023 | ||
|
|
c76dc3102c | ||
|
|
2958704271 | ||
|
|
0eb69435bd | ||
|
|
f1c9d8150b | ||
|
|
73934bfac6 | ||
|
|
3068b0ee70 | ||
|
|
c998f1c84f | ||
|
|
04eeee2831 | ||
|
|
0c847d6ead | ||
|
|
70ce15dd47 | ||
|
|
09f9ac6fab | ||
|
|
47345a7961 | ||
|
|
d7c1f87a59 | ||
|
|
c40f8b11f8 | ||
|
|
5363e6c4cf | ||
|
|
4b913695c3 | ||
|
|
bc1d9cb9c4 | ||
|
|
803a9abd30 | ||
|
|
881e79022a | ||
|
|
e998cf7d28 | ||
|
|
28df75f516 | ||
|
|
c013df1751 | ||
|
|
e8175c6e60 | ||
|
|
43f3107795 | ||
|
|
81378cb1c7 | ||
|
|
fdd1ed423a | ||
|
|
6079d970c1 | ||
|
|
f9be730eab | ||
|
|
75b41081db | ||
|
|
251600eca5 | ||
|
|
e0cc3e9276 | ||
|
|
c4442ee1f0 | ||
|
|
792daa78c4 | ||
|
|
a75a44b4ac | ||
|
|
7da9e5e6a8 | ||
|
|
668b33b797 | ||
|
|
578b20d0b1 | ||
|
|
4b135212eb | ||
|
|
18ba05189c | ||
|
|
557c6f60f4 | ||
|
|
4b49e6d87d | ||
|
|
f930bd5f2b | ||
|
|
e9c925cf90 | ||
|
|
d5b0270916 | ||
|
|
254cf6ee30 | ||
|
|
af4c866fcd | ||
|
|
fb2b7d2773 | ||
|
|
b006f917b5 | ||
|
|
8c785fbd5f | ||
|
|
1a1c1defed | ||
|
|
29ee718257 | ||
|
|
0b09c9c3d7 | ||
|
|
f510bd537c | ||
|
|
118ca77d45 | ||
|
|
2dc53ae568 | ||
|
|
9f7139c63b | ||
|
|
15650f5e8a | ||
|
|
bf1803c285 | ||
|
|
113ed8a473 | ||
|
|
b3de192238 | ||
|
|
fca35bd30e | ||
|
|
8f96b9f958 | ||
|
|
0a97e30b02 | ||
|
|
d092da8909 | ||
|
|
cdaeffb817 | ||
|
|
de817bdfc6 | ||
|
|
434e4e657d | ||
|
|
093bcc21c7 | ||
|
|
f2dfcf3e72 | ||
|
|
85b2d4d2d9 | ||
|
|
d4fa71dea6 | ||
|
|
86d58b1c94 | ||
|
|
7bf34b094e | ||
|
|
8eb0355724 | ||
|
|
0fafb91427 | ||
|
|
d188af4417 | ||
|
|
ec1df2544b | ||
|
|
d36f4e5cd9 | ||
|
|
6564c82725 | ||
|
|
e26c28a741 | ||
|
|
b38839a197 | ||
|
|
98866b30e8 | ||
|
|
6b02924629 | ||
|
|
748187713b | ||
|
|
ca23377efc | ||
|
|
f160b8eea2 | ||
|
|
d4e22e8e69 | ||
|
|
7e03b09691 | ||
|
|
398c1cd3c9 | ||
|
|
8030ca6065 | ||
|
|
6e116eefe3 | ||
|
|
546aaa4758 | ||
|
|
2220ffdfff | ||
|
|
aaa4dd5141 | ||
|
|
571e658d51 | ||
|
|
dccca67377 | ||
|
|
dc34427335 | ||
|
|
6e364878f6 | ||
|
|
738ceec037 | ||
|
|
6c82f7f005 | ||
|
|
05d3f02984 | ||
|
|
0674943519 | ||
|
|
e78ab4f0ca | ||
|
|
9a90027395 | ||
|
|
f0b0c1360c | ||
|
|
94a0aec1a6 | ||
|
|
2267df26a1 | ||
|
|
fe17fe834c | ||
|
|
4d4dde54f8 | ||
|
|
b1c4a81c57 | ||
|
|
9a79ea5345 | ||
|
|
3dc622d1e5 | ||
|
|
867fae1a53 | ||
|
|
71d8ce84e4 | ||
|
|
a99119c263 | ||
|
|
02fd60000e | ||
|
|
ee67e01f97 | ||
|
|
4f05a45d6b | ||
|
|
d967a2cf9d | ||
|
|
450a9eb8ec | ||
|
|
cac2bab721 | ||
|
|
27a91aee67 | ||
|
|
05052a0b56 | ||
|
|
48817ecc8c | ||
|
|
02da9eb0cf | ||
|
|
4ea6caa697 | ||
|
|
e19f45b912 | ||
|
|
fb87c00d1b | ||
|
|
cd98e78ebb | ||
|
|
7ebc78b91e | ||
|
|
88f0d2546e | ||
|
|
104646833b | ||
|
|
b21c15dab1 | ||
|
|
c2198344e6 | ||
|
|
dca63426a6 | ||
|
|
c9bd4dcb63 | ||
|
|
0358aaaffd | ||
|
|
31eb285f2f | ||
|
|
2dbfb27cd9 | ||
|
|
f2864546d7 | ||
|
|
3e50dc20de | ||
|
|
7eab0f15e5 | ||
|
|
7766dabf8c | ||
|
|
eaa2981aa7 | ||
|
|
214d596764 | ||
|
|
611a84d4cf | ||
|
|
1aafd343ec | ||
|
|
d25348e9bb | ||
|
|
7044c48e1a | ||
|
|
4f1b0bb450 | ||
|
|
66dd3b4840 | ||
|
|
4ae9c05879 | ||
|
|
58f6819820 | ||
|
|
88f87da4df | ||
|
|
9905037cb7 | ||
|
|
8a5fb6f710 | ||
|
|
3a210bb0bd | ||
|
|
6f16c47727 | ||
|
|
07772d17e9 | ||
|
|
77b2ef979b | ||
|
|
a71e7b894e | ||
|
|
430e706f5c | ||
|
|
ded8b1dc34 | ||
|
|
97bc803900 | ||
|
|
46509c281b | ||
|
|
b47edc9670 | ||
|
|
81d0f58694 | ||
|
|
c06139a8e7 | ||
|
|
978d6f1d12 | ||
|
|
63eaac9187 | ||
|
|
8996f72b9c | ||
|
|
8e5d29f698 | ||
|
|
466786dc7a | ||
|
|
a919fe8b80 | ||
|
|
e66d16cc06 | ||
|
|
a5f3867c6d | ||
|
|
c9309fa970 | ||
|
|
bcd00723ab | ||
|
|
2f400b4adc | ||
|
|
9fe96c2228 | ||
|
|
55a4e16208 | ||
|
|
74138012ce | ||
|
|
2bf62f25f2 | ||
|
|
76d1bc9eb4 | ||
|
|
2e7ff173d1 | ||
|
|
0394987d80 | ||
|
|
188c1f5f3a | ||
|
|
058c490286 | ||
|
|
7fce10f584 | ||
|
|
77c0612edd | ||
|
|
60c70b723f | ||
|
|
e0442ffcc2 | ||
|
|
5fc6b31d88 | ||
|
|
317e194ddc | ||
|
|
64228e095f | ||
|
|
fcd7c8803b | ||
|
|
3efa6ac234 | ||
|
|
555958ab53 | ||
|
|
18caf9b3c0 | ||
|
|
819df66666 | ||
|
|
8c3e6d345a | ||
|
|
28055235aa | ||
|
|
423cc6bafd | ||
|
|
e43fb927ce | ||
|
|
d8ef5a1e1a | ||
|
|
1e8baa1f00 | ||
|
|
526978a607 | ||
|
|
4971bfe84b | ||
|
|
43177d9bc1 | ||
|
|
027207a732 | ||
|
|
4068f991c0 | ||
|
|
6d82e889ae | ||
|
|
1db9e797dc | ||
|
|
1b1253344a | ||
|
|
7dcec8d949 | ||
|
|
e19ef5f842 | ||
|
|
336daf887d | ||
|
|
0ada5fbdae | ||
|
|
70301c63b0 | ||
|
|
778888b941 | ||
|
|
ff79ca0a07 | ||
|
|
7ea44668b0 | ||
|
|
301a282f96 | ||
|
|
b855ed0c10 | ||
|
|
9f08a6ad28 | ||
|
|
9f2a731fc7 | ||
|
|
ec8b65207c | ||
|
|
b26a49b405 | ||
|
|
daedc0637d | ||
|
|
aa743ba058 | ||
|
|
52e9d147a5 | ||
|
|
960a6b4d77 | ||
|
|
5f7bec0349 | ||
|
|
c718018700 | ||
|
|
f64aadb8c6 | ||
|
|
019528cb5d | ||
|
|
1d6d555ce7 | ||
|
|
78776d47fa | ||
|
|
3f0c828ae2 | ||
|
|
2ffb5babd8 | ||
|
|
57b21b06fc | ||
|
|
660135f93f | ||
|
|
e94ffeaf5e | ||
|
|
62fa7fc978 | ||
|
|
b8e116ea44 | ||
|
|
12dcad7ea3 | ||
|
|
def276c44f | ||
|
|
439fd655d7 | ||
|
|
180ce9266e | ||
|
|
83112537ab | ||
|
|
43065775a0 | ||
|
|
3cee6b0c3b | ||
|
|
67b733ba90 | ||
|
|
2190c1faca | ||
|
|
acf667f37d | ||
|
|
df25368e5c | ||
|
|
6f3ce9d890 | ||
|
|
33ad9f4d42 | ||
|
|
c60c09afe1 | ||
|
|
95379bd281 | ||
|
|
63178a07d0 | ||
|
|
7e695f9331 | ||
|
|
3e3f78a69c | ||
|
|
c737b34a3d | ||
|
|
526e76473f | ||
|
|
712f1e9473 | ||
|
|
8384854870 | ||
|
|
b5dda25795 | ||
|
|
0b410cf792 | ||
|
|
c0b506a17f | ||
|
|
da8d6b0a9d | ||
|
|
5dd40d93c3 | ||
|
|
fbb75ca58a | ||
|
|
45bdbd99c5 | ||
|
|
be62189743 | ||
|
|
eede7ed1ca | ||
|
|
1b8a6e5244 | ||
|
|
e679cba366 | ||
|
|
a9ff54a3d6 | ||
|
|
b9f0e1ac40 | ||
|
|
4a12de5b75 | ||
|
|
1a062dcbba | ||
|
|
2da470b2bd | ||
|
|
77c78816af | ||
|
|
185a75e442 | ||
|
|
de59bbf87f | ||
|
|
c7a0fb91af | ||
|
|
362e7581a3 | ||
|
|
918fd70f3c | ||
|
|
4ccc3cf9ac | ||
|
|
07bad47b0e | ||
|
|
29832045d3 | ||
|
|
953ae8363b | ||
|
|
baff0ad0c7 | ||
|
|
5122f1b917 | ||
|
|
cd007ee786 | ||
|
|
92c27fcaa3 | ||
|
|
3cad2c8be7 | ||
|
|
83eb988a0f | ||
|
|
5ced298663 | ||
|
|
59637500e0 | ||
|
|
328daa7e03 | ||
|
|
679d4b8c9f | ||
|
|
dca1aebeef | ||
|
|
8962da2278 | ||
|
|
26dde72f66 | ||
|
|
f060d8d909 | ||
|
|
300384385d | ||
|
|
a8b2af12a7 | ||
|
|
3c2d57a6da | ||
|
|
122ff429a0 | ||
|
|
e3b2401ca6 | ||
|
|
50ccafdf44 | ||
|
|
78d574f185 | ||
|
|
4557fca662 | ||
|
|
019937fb0e | ||
|
|
b81441a1ee | ||
|
|
426ad68c40 | ||
|
|
a1fb78cc32 | ||
|
|
6be8a43c1a | ||
|
|
49aa72f12b | ||
|
|
21c0a73647 | ||
|
|
f6ab307db0 | ||
|
|
f5eb37583a | ||
|
|
b1313b8a8d | ||
|
|
fa5512d4c3 | ||
|
|
8142c1172b | ||
|
|
2b99e09c6b | ||
|
|
029fafc802 | ||
|
|
da35f9c848 | ||
|
|
a230296473 | ||
|
|
430fd8ff7c | ||
|
|
392332ec45 | ||
|
|
8b34480d88 | ||
|
|
352ebbc700 | ||
|
|
c9663dbc52 | ||
|
|
67d6d5395e | ||
|
|
8e42d4ede1 | ||
|
|
f4d2c91b1d | ||
|
|
efb04e2f9b | ||
|
|
e91183dcef | ||
|
|
4962d7e6c9 | ||
|
|
5df058d1fa | ||
|
|
0b8366d1f1 | ||
|
|
92af41c2d5 | ||
|
|
037e11c75d | ||
|
|
5257ee212f | ||
|
|
18217f4bed | ||
|
|
f7e8195e34 | ||
|
|
548fc4c2b8 | ||
|
|
25b4f25d9c | ||
|
|
a72ac6c005 | ||
|
|
b2baed17b1 | ||
|
|
eba5c715c2 |
195
.clang-format
Normal file
195
.clang-format
Normal file
@@ -0,0 +1,195 @@
|
||||
Language: Json
|
||||
ColumnLimit: 1000
|
||||
IndentWidth: 4
|
||||
---
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignArrayOfStructures: None
|
||||
AlignConsecutiveMacros: None
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignConsecutiveBitFields: None
|
||||
AlignConsecutiveDeclarations: None
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
AttributeMacros:
|
||||
- __capability
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: true
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: true
|
||||
AfterStruct: true
|
||||
AfterUnion: false
|
||||
AfterExternBlock: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
SplitEmptyNamespace: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeConceptDeclarations: true
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
QualifierAlignment: Leave
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: false
|
||||
DeriveLineEnding: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
PackConstructorInitializers: BinPack
|
||||
BasedOnStyle: ''
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
AllowAllConstructorInitializersOnNextLine: true
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IfMacros:
|
||||
- KJ_IF_MAYBE
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||
Priority: 2
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||
Priority: 3
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '.*'
|
||||
Priority: 1
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
IncludeIsMainRegex: '(Test)?$'
|
||||
IncludeIsMainSourceRegex: ''
|
||||
IndentAccessModifiers: false
|
||||
IndentCaseLabels: false
|
||||
IndentCaseBlocks: false
|
||||
IndentGotoLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentExternBlock: AfterExternBlock
|
||||
IndentRequiresClause: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
InsertTrailingCommas: None
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
LambdaBodyIndentation: Signature
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: All
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCBreakBeforeNestedBlockParam: true
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 1000
|
||||
PenaltyIndentedWhitespace: 0
|
||||
PointerAlignment: Left
|
||||
PPIndentWidth: -1
|
||||
ReferenceAlignment: Pointer
|
||||
ReflowComments: true
|
||||
RemoveBracesLLVM: false
|
||||
RequiresClausePosition: OwnLine
|
||||
SeparateDefinitionBlocks: Leave
|
||||
ShortNamespaceLines: 50
|
||||
SortIncludes: CaseSensitive
|
||||
SortJavaStaticImport: Before
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeParensOptions:
|
||||
AfterControlStatements: true
|
||||
AfterForeachMacros: true
|
||||
AfterFunctionDefinitionName: false
|
||||
AfterFunctionDeclarationName: false
|
||||
AfterIfMacros: true
|
||||
AfterOverloadedOperator: false
|
||||
AfterRequiresInClause: true
|
||||
AfterRequiresInExpression: true
|
||||
BeforeNonEmptyParentheses: false
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceInEmptyBlock: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: Never
|
||||
SpacesInConditionalStatement: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
SpaceBeforeSquareBrackets: false
|
||||
BitFieldColonSpacing: Both
|
||||
Standard: c++20
|
||||
StatementAttributeLikeMacros:
|
||||
- Q_EMIT
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
TabWidth: 4
|
||||
UseCRLF: false
|
||||
UseTab: Never
|
||||
WhitespaceSensitiveMacros:
|
||||
- STRINGIZE
|
||||
- PP_STRINGIZE
|
||||
- BOOST_PP_STRINGIZE
|
||||
- NS_SWIFT_NAME
|
||||
- CF_SWIFT_NAME
|
||||
29
.git-blame-ignore-revs
Normal file
29
.git-blame-ignore-revs
Normal file
@@ -0,0 +1,29 @@
|
||||
# Since version 2.23 (released in August 2019), git-blame has a feature
|
||||
# to ignore or bypass certain commits.
|
||||
#
|
||||
# This file contains a list of commits that are not likely what you
|
||||
# are looking for in a blame, such as mass reformatting or renaming.
|
||||
# You can set this file as a default ignore file for blame by running
|
||||
# the following command.
|
||||
#
|
||||
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
|
||||
|
||||
# style: clang format
|
||||
98f949346e93e5a1adaade22cda9841e01b98c0b
|
||||
290cc30f153a0206bd870a0a58cb6338aa16ea34
|
||||
|
||||
# incorrect format of 3rdparty/resource/Arknights-Tile-Pos/levels.json
|
||||
65d654e54b9d04d1902c9ee9f9fb2679520adafd
|
||||
81ea2c4d4fce29862f719972ecb32877fc4e654f
|
||||
|
||||
# refactor: 为 MaaCore 重新建立文件结构
|
||||
206df466fd5e3d8ef80387049b0c5011fb58cada
|
||||
c9b5aa638a97397ab8666031ea646904527afc09
|
||||
559c913fca0dd0966896396e251be13f76ea3e52
|
||||
# Re-structure again.
|
||||
4b3b84df8f487be0ac86506c28dbebc4635f1282
|
||||
91abbb7f175b93a58368a136acf3799666f770d2
|
||||
49b3aba96b2dfe1cb187b193d38c436e96e33901
|
||||
bae271c09bb79e5cc2a7f8491ce882d276ac97b4
|
||||
3d83b80dd67d996a5f4f1732fe1eb36cacc7605e
|
||||
21617270bcef2456cb7f89e54560ca6788450711
|
||||
11
.gitattributes
vendored
Normal file
11
.gitattributes
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
* text=auto
|
||||
*.cs text eol=crlf
|
||||
*.xaml text eol=crlf
|
||||
|
||||
*.cpp text eol=lf
|
||||
*.hpp text eol=lf
|
||||
*.h text eol=lf
|
||||
|
||||
*.json text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yaml text eol=lf
|
||||
16
.github/ISSUE_TEMPLATE/-----bug-report-.md
vendored
16
.github/ISSUE_TEMPLATE/-----bug-report-.md
vendored
@@ -1,16 +0,0 @@
|
||||
---
|
||||
name: 问题反馈(Bug report)
|
||||
about: 识别错误、操作异常、连接错误等
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
!!!请尽可能详细的描述你遇到的问题,并附上助手软件目录下的 `asst.log` 日志文件!!!
|
||||
|
||||
!!!日志文件是可以直接拖拽进来的,没有日志文件的 bug 反馈我会直接关掉!!!
|
||||
|
||||
最好再能说明下使用的模拟器、并附上出错时的游戏和软件的截图(要是没截到就算啦_(:з」∠)_
|
||||
|
||||
Thanks♪(・ω・)ノ
|
||||
10
.github/ISSUE_TEMPLATE/-----feature-request-.md
vendored
10
.github/ISSUE_TEMPLATE/-----feature-request-.md
vendored
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: 需求建议(Feature request)
|
||||
about: 新功能、建议等
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
10
.github/ISSUE_TEMPLATE/---others-.md
vendored
10
.github/ISSUE_TEMPLATE/---others-.md
vendored
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: 其他(Others)
|
||||
about: 其他议题
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
50
.github/ISSUE_TEMPLATE/cn-bug-report.yaml
vendored
Normal file
50
.github/ISSUE_TEMPLATE/cn-bug-report.yaml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
name: Bug 反馈(使用中文)
|
||||
description: 识别错误、操作异常、连接错误等
|
||||
labels: ['bug']
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
options:
|
||||
- label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我已查看最新测试版本的更新内容,并未提及该 bug 已被修复的情况
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 问题描述
|
||||
description: 尽可能详细描述你的问题
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: 日志文件
|
||||
description: |
|
||||
**上传软件目录下的 `asst.log` 日志文件,并说明问题出现的大致时间点**
|
||||
**请直接将完整的文件拖拽进来,而非自己裁切的片段;若文件体积过大可压缩后再上传**
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: 截图
|
||||
description: |
|
||||
如果有,添加屏幕截图以帮助解释你的问题,包括但不限于 MAA 软件截图、游戏画面截图
|
||||
若是识别相关问题,请帮忙提供模拟器自带的截图工具截取的原图(或通过 adb 截取原图)
|
||||
`debug` 文件夹下有一些自动截图的错误图片,若有相关的,请一并打包上传
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: others
|
||||
attributes:
|
||||
label: 还有别的吗?
|
||||
description: |
|
||||
使用的模拟器?操作系统?相关的配置?链接?参考资料?
|
||||
任何能让我们对你所遇到的问题有更多了解的东西
|
||||
validations:
|
||||
required: false
|
||||
32
.github/ISSUE_TEMPLATE/cn-feature-request.yaml
vendored
Normal file
32
.github/ISSUE_TEMPLATE/cn-feature-request.yaml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: 需求建议(使用中文)
|
||||
description: 新功能、建议等
|
||||
labels: ['enhancement']
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
options:
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我基本确定这是一个新功能/建议,而不是遇到了 bug(不确定的话请附上日志)
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 说说你遇到的问题?
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: 有什么好的想法?
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: 其他内容
|
||||
description: 关于该需求建议的任何其他背景或屏幕截图。
|
||||
validations:
|
||||
required: false
|
||||
10
.github/ISSUE_TEMPLATE/cn-others.yaml
vendored
Normal file
10
.github/ISSUE_TEMPLATE/cn-others.yaml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
name: 其他议题(使用中文)
|
||||
description: 提出问题,而不是 bug 反馈或需求建议
|
||||
labels: ['question']
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 说说你遇到的问题?
|
||||
validations:
|
||||
required: false
|
||||
76
.github/ISSUE_TEMPLATE/en-bug-report.yaml
vendored
Normal file
76
.github/ISSUE_TEMPLATE/en-bug-report.yaml
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
name: Bug Report (in English)
|
||||
description: >-
|
||||
Recognition errors, operation abnormalities,
|
||||
connection errors, etc.
|
||||
labels: ['bug']
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Before raising the issue...
|
||||
options:
|
||||
- label: >-
|
||||
I understand that Issues are for feedback and problem solving,
|
||||
not trolling the comments section, and will provide as
|
||||
much information as possible to help solve the problem.
|
||||
required: true
|
||||
- label: >-
|
||||
I filled in a short, clear title
|
||||
so that developers could quickly identify the general problem
|
||||
when going through the issue list.
|
||||
Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: >-
|
||||
I have checked the latest beta update and there is no mention
|
||||
of the bug being fixed.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: Description
|
||||
description: Describe your problem in as much detail as possible.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Log files
|
||||
description: >-
|
||||
**Upload the `asst.log` log file from the software directory and**
|
||||
**indicate the approximate point in time when the problem occurred.**
|
||||
|
||||
**Please drag and drop the full file in, not your own cuttings,**
|
||||
**compress it before uploading if too large.**
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: >-
|
||||
If available, add screenshots to help explain your problem,
|
||||
including but not limited to screenshots of MAA software,
|
||||
screenshots of game screens.
|
||||
|
||||
If the problem is recognition related, please help by providing
|
||||
the original image taken by the emulator's own screenshot tool
|
||||
(or via adb).
|
||||
|
||||
The `debug` folder has some automatic screenshots of the error images,
|
||||
if you have any,
|
||||
please upload them together.
|
||||
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: others
|
||||
attributes:
|
||||
label: Anthing else?
|
||||
description: >-
|
||||
Emulator used, operating system, related configuration, links,
|
||||
reference material, etc.
|
||||
|
||||
Anything that will give us more insight into the problem
|
||||
you are having.
|
||||
validations:
|
||||
required: false
|
||||
32
.github/ISSUE_TEMPLATE/en-feature-request.yaml
vendored
Normal file
32
.github/ISSUE_TEMPLATE/en-feature-request.yaml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Feature Request (in English)
|
||||
description: New features, suggestions, etc.
|
||||
labels: ['enhancement']
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Before raising the issue...
|
||||
options:
|
||||
- label: I filled in a short, clear title so that developers could quickly identify the general problem when going through the issue list. Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: I'm probably sure this is a new feature/suggestion and not a bug encountered (please attach logs if you're not sure)
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: The problems you have encountered?
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Any good ideas?
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional
|
||||
description: Any other background, screen shots, etc.
|
||||
validations:
|
||||
required: false
|
||||
10
.github/ISSUE_TEMPLATE/en-others.yaml
vendored
Normal file
10
.github/ISSUE_TEMPLATE/en-others.yaml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
name: Others (in English)
|
||||
description: Ask a question rather than a bug report or feature request.
|
||||
labels: ['question']
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: The problems you have encountered?
|
||||
validations:
|
||||
required: false
|
||||
512
.github/issue-checker.yml
vendored
Normal file
512
.github/issue-checker.yml
vendored
Normal file
@@ -0,0 +1,512 @@
|
||||
default-mode:
|
||||
add:
|
||||
remove: [pull_request_target, issues]
|
||||
labels:
|
||||
# <!-- [Ss]kip `LABEL` --> 跳过一个 label
|
||||
# <!-- [Rr]emove `LABEL` --> 去掉一个 label
|
||||
|
||||
# skip and remove
|
||||
- name: skip all
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Aa]ll |)[Ll]abels?'
|
||||
- name: remove all
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Aa]ll |)[Ll]abels?'
|
||||
- name: skip module
|
||||
content:
|
||||
regexes: '[Ss]kip [Mm]odule [Ll]abels?'
|
||||
- name: remove module
|
||||
content:
|
||||
regexes: '[Rr]emove [Mm]odule [Ll]abels?'
|
||||
- name: skip client
|
||||
content:
|
||||
regexes: '[Ss]kip [Cc]lient [Ll]abels?'
|
||||
- name: remove client
|
||||
content:
|
||||
regexes: '[Rr]emove [Cc]lient [Ll]abels?'
|
||||
- name: skip copilot
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)copilot(?:`|)'
|
||||
- name: remove copilot
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)copilot(?:`|)'
|
||||
- name: skip core
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)core(?:`|)'
|
||||
- name: remove core
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)core(?:`|)'
|
||||
- name: skip depot
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)depot(?:`|)'
|
||||
- name: remove depot
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)depot(?:`|)'
|
||||
- name: skip drop
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)drop(?:`|)'
|
||||
- name: remove drop
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)drop(?:`|)'
|
||||
- name: skip fight
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)fight(?:`|)'
|
||||
- name: remove fight
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)fight(?:`|)'
|
||||
- name: skip GUI
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)GUI(?:`|)'
|
||||
- name: remove GUI
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)GUI(?:`|)'
|
||||
- name: skip infrast
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)infrast(?:`|)'
|
||||
- name: remove infrast
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)infrast(?:`|)'
|
||||
- name: skip others
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)others(?:`|)'
|
||||
- name: remove others
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)others(?:`|)'
|
||||
- name: skip recruit
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)recruit(?:`|)'
|
||||
- name: remove recruit
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)recruit(?:`|)'
|
||||
- name: skip roguelike
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)(?:module: |)roguelike(?:`|)'
|
||||
- name: remove roguelike
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)(?:module: |)roguelike(?:`|)'
|
||||
- name: skip ambiguous
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)ambiguous(?:`|)'
|
||||
- name: remove ambiguous
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)ambiguous(?:`|)'
|
||||
- name: skip release
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)release(?:`|)'
|
||||
- name: remove release
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)release(?:`|)'
|
||||
- name: skip documentation
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)documentation(?:`|)'
|
||||
- name: remove documentation
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)documentation(?:`|)'
|
||||
- name: skip translation required
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)translation required(?:`|)'
|
||||
- name: remove translation required
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)translation required(?:`|)'
|
||||
- name: skip client-JP
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)Client: JP(?:`|)'
|
||||
- name: remove client-JP
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)Client: JP(?:`|)'
|
||||
- name: skip client-EN
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)Client: EN(?:`|)'
|
||||
- name: remove client-EN
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)Client: EN(?:`|)'
|
||||
- name: skip client-KR
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)Client: KR(?:`|)'
|
||||
- name: remove client-KR
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)Client: KR(?:`|)'
|
||||
- name: skip client-ZH_TW
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)Client: ZH_TW(?:`|)'
|
||||
- name: remove client-ZH_TW
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)Client: ZH_TW(?:`|)'
|
||||
- name: skip macOS
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)macOS(?:`|)'
|
||||
- name: remove macOS
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)macOS(?:`|)'
|
||||
- name: skip incomplete
|
||||
content:
|
||||
regexes: '[Ss]kip (?:[Ll]abels? |)(?:`|)incomplete(?:`|)'
|
||||
- name: remove incomplete
|
||||
content:
|
||||
regexes: '[Rr]emove (?:[Ll]abels? |)(?:`|)incomplete(?:`|)'
|
||||
|
||||
# `MAA Team`
|
||||
- name: MAA Team
|
||||
mode:
|
||||
add: [pull_request_target, issues]
|
||||
author_association:
|
||||
- "MEMBER"
|
||||
|
||||
# `module: infrast`
|
||||
- name: infrast
|
||||
content: "module: infrast"
|
||||
regexes:
|
||||
"基建|换班|贸易站|制造站|发电站|加工站|会客室|训练室|办公室|控制中枢|宿舍|基地|[Ii]nfrast|[Dd]orm"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip infrast
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove infrast
|
||||
|
||||
# `module: roguelike`
|
||||
- name: roguelike
|
||||
content: "module: roguelike"
|
||||
regexes:
|
||||
"肉[鸽鴿]|集成战略|[Rr]ogue|ローグ"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip roguelike
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove roguelike
|
||||
|
||||
# `module: copilot`
|
||||
- name: copilot1
|
||||
content: "module: copilot"
|
||||
regexes: '自动(?:作战|战斗|编队)|自動[戰戦][鬥闘]|[Cc]opilot'
|
||||
mode: add
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip copilot
|
||||
- roguelike
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove copilot
|
||||
- name: copilot2
|
||||
content: "module: copilot"
|
||||
regexes: '作[业業]'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip copilot
|
||||
- copilot1
|
||||
- infrast
|
||||
- roguelike
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove copilot
|
||||
|
||||
# `module: drop`
|
||||
- name: drop
|
||||
content: "module: drop"
|
||||
regexes:
|
||||
"掉落物?(?:识别|检测)"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip drop
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove drop
|
||||
|
||||
# `module: fight`
|
||||
- name: fight
|
||||
content: "module: fight"
|
||||
regexes:
|
||||
"刷图|刷理智|剿灭|刷.{0,6}材料|关卡选择|战斗|作战|[戰戦][鬥闘]|[Ff]ight|[Bb]attle|[Aa]nihilation"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip fight
|
||||
- copilot1
|
||||
- copilot2
|
||||
- drop
|
||||
- roguelike
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove fight
|
||||
|
||||
# `module: depot`
|
||||
- name: depot
|
||||
content: "module: depot"
|
||||
regexes:
|
||||
"仓库识别|仓库检测|仓检|[Dd]epot"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip depot
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove depot
|
||||
|
||||
# `module: others`
|
||||
- name: others
|
||||
content: "module: others"
|
||||
regexes:
|
||||
"信用|拜访|登录|开始唤醒|连接模拟器|[Vv]isit|[Ll]ogin|[Ss]tartup"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip others
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove others
|
||||
|
||||
# `module: recruit`
|
||||
- name: recruit
|
||||
content: "module: recruit"
|
||||
regexes:
|
||||
"公招|(?<!肉鸽)招募|公開(?:募集|求人)|[Rr]ecruit"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip recruit
|
||||
- roguelike
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove recruit
|
||||
|
||||
# `module: recruit`
|
||||
- name: GUI
|
||||
content: "module: GUI"
|
||||
regexes:
|
||||
'软件更新|自动下载|图形化?界面|gui(?!\.)|GUI|Gui'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
- skip GUI
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove module
|
||||
- remove GUI
|
||||
|
||||
# `ambiguous`
|
||||
- name: pr-ambiguous
|
||||
# 不符合 commitizen 的 PR
|
||||
content: ambiguous
|
||||
regexes: '^(?!(?:build|chore|ci|docs?|feat|fix|perf|refactor|rft|style|test)[\:\.\(\,]|[Mm]erge|[Rr]evert|[Rr]elease)'
|
||||
mode:
|
||||
pull_request_target:
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip ambiguous
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove ambiguous
|
||||
- name: ambiguous
|
||||
# 不符合上面任何一个的分类的 issue
|
||||
content: ambiguous
|
||||
mode:
|
||||
issues:
|
||||
issue_comment: remove
|
||||
skip-if:
|
||||
- pr-ambiguous
|
||||
- skip all
|
||||
- skip ambiguous
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove ambiguous
|
||||
- copilot1
|
||||
- copilot2
|
||||
- core
|
||||
- depot
|
||||
- drop
|
||||
- fight
|
||||
- GUI
|
||||
- infrast
|
||||
- others
|
||||
- recruit
|
||||
- roguelike
|
||||
|
||||
# `release`
|
||||
- name: release
|
||||
content: release
|
||||
regexes: 'Release v(?:\d)+\.(?:\d)+\.(?:\d)+'
|
||||
mode:
|
||||
pull_request_target:
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip release
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove release
|
||||
|
||||
# `documentation`
|
||||
- name: pr-documentation
|
||||
# 不符合 commitizen 的 PR
|
||||
content: documentation
|
||||
regexes: '^docs?[\:\.\(\,]'
|
||||
mode:
|
||||
pull_request_target:
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip documentation
|
||||
- release
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove documentation
|
||||
|
||||
# `translation required`
|
||||
- name: translation required
|
||||
content: translation required
|
||||
regexes: '(?:(?:(?:[\u3040-\u30ff]|[㍿㍐])[^`]*){10,})'
|
||||
mode:
|
||||
pull_request_target:
|
||||
issues:
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip translation required
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove translation required
|
||||
|
||||
# `Client: JP`
|
||||
- name: "Client: JP"
|
||||
regexes: '(?:日[文语本]?服|[Yy]o[Ss]tar\-?(?:JP|jp)|(?:JP|jp)[\- ]*(?:[Yy]o[Ss]tar|服|[Cc]lient))'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip client
|
||||
- skip client-JP
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove client
|
||||
- remove client-JP
|
||||
|
||||
# `Client: EN`
|
||||
- name: "Client: EN"
|
||||
regexes: '(?:英[文语]?服|国际服|美服|[Yy]o[Ss]tar\-?(?:EN|en)|(?:EN|en)[\- ]*(?:[Yy]o[Ss]tar|服|[Cc]lient))'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip client
|
||||
- skip client-EN
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove client
|
||||
- remove client-EN
|
||||
|
||||
# `Client: KR`
|
||||
- name: "Client: KR"
|
||||
regexes: '(?:韩[文语国]?服|[Yy]o[Ss]tar\-?(?:KR|kr)|(?:KR|kr)[\- ]*(?:[Yy]o[Ss]tar|服|[Cc]lient))'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip client
|
||||
- skip client-KR
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove client
|
||||
- remove client-KR
|
||||
|
||||
# `Client: ZH_TW`
|
||||
- name: "Client: ZH_TW"
|
||||
regexes: '(?:繁中服|台(?:湾|灣|)服|繁体中文服|[龙龍]成|天下网游|txwy)'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip client
|
||||
- skip client-ZH_TW
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove client
|
||||
- remove client-ZH_TW
|
||||
|
||||
# `macOS`
|
||||
- name: macOS
|
||||
regexes: '[Mm]ac(?:(?:book|os|OS)|\s*(?:(?:操作|)系统|电脑|版))'
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip macOS
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove macOS
|
||||
|
||||
# `fixed`
|
||||
- name: fixed
|
||||
regexes:
|
||||
- "(?:(?:`v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|)`|\
|
||||
v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|)\\s+)|\
|
||||
\\[(?:`v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|)`|\
|
||||
v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|))\\]\\(\\S*\\)|\
|
||||
(?:https?\\://(?:[^/\\s]+/){3}commit/|)[0-9a-z]{40})\
|
||||
\\s*fixed|[Ff]ixed (?:in|at|by)\\s*\
|
||||
(?:(?:`v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|)`|\\s+\
|
||||
v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|))|\
|
||||
\\[(?:`v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|)`|\
|
||||
v\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d+|\\.\\d+|))\\]\\(\\S*\\)|\
|
||||
(?:https?\\://(?:[^/\\s]+/){3}commit/|)[0-9a-z]{40})"
|
||||
mode:
|
||||
issue_comment: add
|
||||
|
||||
# `duplicate`
|
||||
- name: duplicate
|
||||
regexes:
|
||||
"[Dd]uplicate of\\s*\\[?`?(?:https?\\://(?:[^/\\s]+/){3}issues/|#)\\d+"
|
||||
mode:
|
||||
issue_comment: add
|
||||
|
||||
# `outdated`
|
||||
- name: outdated
|
||||
regexes:
|
||||
"[Ss]uperseded by"
|
||||
mode:
|
||||
issue_comment: add
|
||||
|
||||
# `incomplete`
|
||||
- name: incomplete
|
||||
content: incomplete
|
||||
regexes: '(?:\[Uploading asst(?:.bak|)(?: - 副本|)(?:.log|)(?:.zip|)…\]\(\))'
|
||||
mode: add
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip incomplete
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove incomplete
|
||||
- name: complete
|
||||
content:
|
||||
regexes: '(?:\[asst(?:.bak|)(?: - 副本|)(?:.log|)(?:.zip|)\]\([^\)]+\))'
|
||||
- name: remove incomplete
|
||||
content: incomplete
|
||||
mode: remove
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip incomplete
|
||||
- incomplete
|
||||
remove-if:
|
||||
- remove all
|
||||
- remove incomplete
|
||||
- complete
|
||||
|
||||
comments:
|
||||
- name: Log upload failed
|
||||
regexes:
|
||||
- '\[Uploading asst(?:.bak|)(?: - 副本|)(?:.log|)(?:.zip|)…\]\(\)'
|
||||
content:
|
||||
"你的日志没有上传成功,请重新上传。\n\n\
|
||||
Your log did not upload successfully, please re-upload it."
|
||||
mode: add
|
||||
- name: Upload failed
|
||||
regexes:
|
||||
- "^[^`]*(`[^`]+`[^`]*)*\\[Uploading[^\\]]*…\\]\\(\\)"
|
||||
content:
|
||||
"你有一些文件没有上传成功,请重新上传。\n\n\
|
||||
You have some files that did not upload successfully, please re-upload them."
|
||||
mode: add
|
||||
skip-if:
|
||||
- "Log upload failed"
|
||||
70
.github/workflows/dev-build-linux.yml
vendored
Normal file
70
.github/workflows/dev-build-linux.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
name: dev-build-linux
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- '3rdparty/**'
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- 'cmake/**'
|
||||
- CMakeLists.txt
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- '3rdparty/**'
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- 'cmake/**'
|
||||
- CMakeLists.txt
|
||||
|
||||
jobs:
|
||||
linux-latest:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install GCC-12
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
sudo apt install gcc-12 g++-12
|
||||
|
||||
- name: Setup ccache
|
||||
uses: Chocobo1/setup-ccache-action@v1
|
||||
with:
|
||||
remove_stale_cache: false
|
||||
|
||||
- name: Build MAA
|
||||
env:
|
||||
CC: ccache gcc-12
|
||||
CXX: ccache g++-12
|
||||
run: |
|
||||
mkdir -p build
|
||||
cmake -B build \
|
||||
-DINSTALL_THIRD_LIBS=ON \
|
||||
-DINSTALL_RESOURCE=OFF \
|
||||
-DINSTALL_PYTHON=OFF
|
||||
# -DFASTDEPLOY_DIRECTORY=~/fastdeploy \
|
||||
# -DOPENCV_DIRECTORY=~/opencv/lib/cmake/opencv4 \
|
||||
cmake --build build --parallel $(nproc --all)
|
||||
|
||||
mkdir -p install
|
||||
cmake --install build --prefix install
|
||||
|
||||
- name: tar files
|
||||
run: |
|
||||
mkdir -p release
|
||||
cd install
|
||||
tar czvf $GITHUB_WORKSPACE/release/MaaAssistantArknights.tar.gz .
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-linux
|
||||
path: release/*.tar.gz
|
||||
56
.github/workflows/dev-build-mac.yml
vendored
Normal file
56
.github/workflows/dev-build-mac.yml
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
name: dev-build-mac
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- 'src/MaaMacGui/**'
|
||||
- '3rdparty/**'
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- 'cmake/**'
|
||||
- CMakeLists.txt
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- 'src/MaaMacGui/**'
|
||||
- '3rdparty/**'
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- 'cmake/**'
|
||||
- CMakeLists.txt
|
||||
|
||||
jobs:
|
||||
macos-latest:
|
||||
runs-on: macos-12
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 100
|
||||
- name: Cache Homebrew
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: $(brew --prefix)
|
||||
key: ${{ runner.os }}-homebrew-${{ hashFiles('.config/brew/Brewfile') }}
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
brew update --preinstall
|
||||
brew install ninja range-v3
|
||||
- name: Configure MaaCore
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake .. -GNinja -DBUILD_XCFRAMEWORK=ON
|
||||
- name: Build libMaaCore
|
||||
run: cmake --build build
|
||||
- name: Build MAA
|
||||
working-directory: src/MaaMacGui
|
||||
run: xcodebuild CODE_SIGN_IDENTITY="-" DEVELOPMENT_TEAM="-" -derivedDataPath DerivedData -project MeoAsstMac.xcodeproj -scheme MAA-x86_64
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-macos
|
||||
path: src/MaaMacGui/DerivedData/Build/Products/Debug
|
||||
75
.github/workflows/dev-build-win.yml
vendored
Normal file
75
.github/workflows/dev-build-win.yml
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
# ------------------------------------------------------------------------------
|
||||
# <auto-generated>
|
||||
#
|
||||
# This code was generated.
|
||||
#
|
||||
# - To turn off auto-generation set:
|
||||
#
|
||||
# [GitHubActions (AutoGenerate = false)]
|
||||
#
|
||||
# - To trigger manual generation invoke:
|
||||
#
|
||||
# nuke --generate-configuration GitHubActions_dev-build-win --host GitHubActions
|
||||
#
|
||||
# </auto-generated>
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
name: dev-build-win
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- 'src/MaaWpfGui/**'
|
||||
- '3rdparty/**'
|
||||
- 'tools/MaaBuilder/**'
|
||||
- tools/MaaBuilder.sln
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- MAA.sln
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- 'src/MaaCore/**'
|
||||
- 'src/MaaWpfGui/**'
|
||||
- '3rdparty/**'
|
||||
- 'tools/MaaBuilder/**'
|
||||
- tools/MaaBuilder.sln
|
||||
- 'include/**'
|
||||
- 'resource/**'
|
||||
- MAA.sln
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
Reason:
|
||||
description: "Reason"
|
||||
required: true
|
||||
ReleaseSimulation:
|
||||
description: "Release Simulation"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
windows-latest:
|
||||
name: windows-latest
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
- name: Run './build.cmd DevBuild'
|
||||
run: ./build.cmd DevBuild
|
||||
env:
|
||||
Reason: ${{ github.event.inputs.Reason }}
|
||||
ReleaseSimulation: ${{ github.event.inputs.ReleaseSimulation }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-win-x64
|
||||
path: artifacts
|
||||
25
.github/workflows/issue-checker.yml
vendored
Normal file
25
.github/workflows/issue-checker.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: "Issue Checker"
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
pull_request_target:
|
||||
types: [opened, edited]
|
||||
issue_comment:
|
||||
types: [created, edited]
|
||||
push:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: zzyyyl/issue-checker@v1.7
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
configuration-path: .github/issue-checker.yml
|
||||
not-before: 2022-08-05T00:00:00Z
|
||||
include-title: 1
|
||||
61
.github/workflows/release-maa-linux.yml
vendored
Normal file
61
.github/workflows/release-maa-linux.yml
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
name: dev-build-linux
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
linux-latest:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup tag info
|
||||
run: |
|
||||
GIT_TAG=${GITHUB_REF#refs/*/}
|
||||
echo "GIT_TAG=${GIT_TAG}" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install GCC-12
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
sudo apt install gcc-12 g++-12
|
||||
|
||||
- name: Setup ccache
|
||||
uses: Chocobo1/setup-ccache-action@v1
|
||||
with:
|
||||
remove_stale_cache: false
|
||||
|
||||
- name: Build MAA
|
||||
env:
|
||||
CC: ccache gcc-12
|
||||
CXX: ccache g++-12
|
||||
run: |
|
||||
mkdir -p build
|
||||
cmake -B build \
|
||||
-DINSTALL_THIRD_LIBS=ON \
|
||||
-DINSTALL_RESOURCE=ON \
|
||||
-DINSTALL_PYTHON=ON
|
||||
# -DFASTDEPLOY_DIRECTORY=~/fastdeploy \
|
||||
# -DOPENCV_DIRECTORY=~/opencv/lib/cmake/opencv4 \
|
||||
cmake --build build --parallel $(nproc --all)
|
||||
|
||||
mkdir -p install
|
||||
cmake --install build --prefix install
|
||||
|
||||
- name: tar files
|
||||
run: |
|
||||
mkdir -p release
|
||||
cd install
|
||||
tar czvf $GITHUB_WORKSPACE/release/MAA-${{ env.GIT_TAG }}-linux.tar.gz .
|
||||
|
||||
- name: Upload image to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: 'release/*.tar.gz'
|
||||
file_glob: true
|
||||
tag: ${{ env.GIT_TAG }}
|
||||
overwrite: true
|
||||
99
.github/workflows/release-maa-mac.yml
vendored
Normal file
99
.github/workflows/release-maa-mac.yml
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
name: release-maa-mac
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
macos-latest:
|
||||
name: macos-latest
|
||||
runs-on: macos-12
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [arm64, x86_64]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: 'Install Developer ID Certificate'
|
||||
uses: apple-actions/import-codesign-certs@v1
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.HGUANDL_SIGN_CERT_P12 }}
|
||||
p12-password: ${{ secrets.HGUANDL_SIGN_CERT_PASSWD }}
|
||||
- name: Cache Homebrew
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: $(brew --prefix)
|
||||
key: ${{ runner.os }}-homebrew-${{ hashFiles('.config/brew/Brewfile') }}
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
brew update --preinstall
|
||||
brew install ninja range-v3 create-dmg
|
||||
- name: Configure MaaCore
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_XCFRAMEWORK=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }}
|
||||
- name: Build libMaaCore
|
||||
run: cmake --build build
|
||||
- name: Build MAA
|
||||
working-directory: src/MaaMacGui
|
||||
run: xcodebuild -project MeoAsstMac.xcodeproj -scheme MAA-${{ matrix.arch }} archive -archivePath MAA.xcarchive -configuration Release-${{ matrix.arch }}
|
||||
- name: Export MAA
|
||||
working-directory: src/MaaMacGui
|
||||
run: xcodebuild -exportArchive -archivePath MAA.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath Export
|
||||
- name: Create disk image
|
||||
working-directory: src/MaaMacGui
|
||||
run: create-dmg --background dmg-bkg.png --window-size 500 300 --icon-size 128 --icon MAA.app 0 120 --hide-extension MAA.app --app-drop-link 270 120 MAA-${{ matrix.arch }}.dmg Export/MAA.app
|
||||
- name: Archive debug symbols
|
||||
working-directory: src/MaaMacGui/MAA.xcarchive/dSYMs
|
||||
run: ditto -c -k --keepParent MAA.app.dSYM MAA-${{ matrix.arch }}.app.dSYM.zip
|
||||
- name: Place packages
|
||||
run: |
|
||||
GIT_TAG=${GITHUB_REF#refs/*/}
|
||||
APP_DMG=MAA-${GIT_TAG}-macos-${{ matrix.arch }}.dmg
|
||||
APP_SYM=MAAComponent-DebugSymbol-${GIT_TAG}-macos-${{ matrix.arch }}.zip
|
||||
mkdir -p release
|
||||
mv src/MaaMacGui/MAA-${{ matrix.arch }}.dmg release/${APP_DMG}
|
||||
mv src/MaaMacGui/MAA.xcarchive/dSYMs/MAA-${{ matrix.arch }}.app.dSYM.zip release/${APP_SYM}
|
||||
- name: Upload products
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-macos
|
||||
path: release
|
||||
|
||||
macos-release:
|
||||
name: macos-release
|
||||
runs-on: macos-12
|
||||
needs: [macos-latest]
|
||||
steps:
|
||||
- name: 'Setup tag information'
|
||||
run: |
|
||||
GIT_TAG=${GITHUB_REF#refs/*/}
|
||||
echo "GIT_TAG=${GIT_TAG}" >> $GITHUB_ENV
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: MAA-macos
|
||||
- name: 'Verify image'
|
||||
run: |
|
||||
find . -name "*.dmg" -exec hdiutil verify {} \;
|
||||
- name: 'Notarize image'
|
||||
env:
|
||||
NOTARY_USER: ${{ secrets.HGUANDL_NOTARY_AAPL_ID }}
|
||||
NOTARY_PASSWD: ${{ secrets.HGUANDL_NOTARY_PASSWD }}
|
||||
NOTARY_TEAM: ${{ secrets.HGUANDL_SIGN_IDENTITY }}
|
||||
run: |
|
||||
find . -name "*.dmg" | while read dmg; do
|
||||
xcrun notarytool submit --apple-id "$NOTARY_USER" --password "$NOTARY_PASSWD" --team-id "$NOTARY_TEAM" --wait ${dmg}
|
||||
xcrun stapler staple ${dmg}
|
||||
done
|
||||
- name: Upload image to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: 'MAA*${{ env.GIT_TAG }}-macos*'
|
||||
file_glob: true
|
||||
tag: ${{ env.GIT_TAG }}
|
||||
overwrite: true
|
||||
45
.github/workflows/release-maa-win.yml
vendored
Normal file
45
.github/workflows/release-maa-win.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# ------------------------------------------------------------------------------
|
||||
# <auto-generated>
|
||||
#
|
||||
# This code was generated.
|
||||
#
|
||||
# - To turn off auto-generation set:
|
||||
#
|
||||
# [GitHubActions (AutoGenerate = false)]
|
||||
#
|
||||
# - To trigger manual generation invoke:
|
||||
#
|
||||
# nuke --generate-configuration GitHubActions_release-maa-win --host GitHubActions
|
||||
#
|
||||
# </auto-generated>
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
name: release-maa-win
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
windows-latest:
|
||||
name: windows-latest
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
- name: Run './build.cmd ReleaseMaa'
|
||||
run: ./build.cmd ReleaseMaa
|
||||
env:
|
||||
PUBLISH_GH_PAT: ${{ secrets.PUBLISH_GH_PAT }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-win-x64
|
||||
path: artifacts
|
||||
161
.github/workflows/release-nightly-ota.yml
vendored
Normal file
161
.github/workflows/release-nightly-ota.yml
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
name: release-nightly-ota
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'Commit to build (git checkout)'
|
||||
type: string
|
||||
required: true
|
||||
limit:
|
||||
description: 'Number of releases to fetch from MaaAssistantArknights'
|
||||
required: false
|
||||
default: 30
|
||||
type: number
|
||||
limit_2:
|
||||
description: 'Number of releases to fetch from MaaRelease'
|
||||
required: false
|
||||
default: 30
|
||||
tag_name:
|
||||
description: 'Tag name to release'
|
||||
required: false
|
||||
release_body:
|
||||
type: string
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
build-win-nightly:
|
||||
runs-on: windows-latest
|
||||
outputs:
|
||||
tag: ${{ steps.set_tag.outputs.tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
# repository: 'MaaAssistantArknights/MaaAssistantArknights'
|
||||
submodules: recursive
|
||||
#ref: ${{ inputs.ref }}
|
||||
fetch-depth: 0
|
||||
- name: Checkout ref
|
||||
run: |
|
||||
git checkout --progress --recurse-submodules ${{ inputs.ref || 'dev' }}
|
||||
- run: |
|
||||
npm install --global --progress semver
|
||||
- name: Set tag
|
||||
id: set_tag
|
||||
run: |
|
||||
if ("${{ inputs.tag_name }}" -ne "") {
|
||||
echo "tag=${{ inputs.tag_name }}" >> $env:GITHUB_OUTPUT
|
||||
exit 0
|
||||
}
|
||||
$described = $(git describe --tags --long --match 'v*')
|
||||
$ids = $($described -split "-")
|
||||
if ($ids.length -eq 3) {
|
||||
$ver = "v$(semver --increment $ids[0].Substring(1))"
|
||||
echo "tag=$ver-alpha.0.$($ids[1]).$($ids[2])" >> $env:GITHUB_OUTPUT
|
||||
exit 0
|
||||
}
|
||||
if ($ids.length -eq 4) {
|
||||
echo "tag=$($ids[0])-$($ids[1]).$($ids[2]).$($ids[3])" >> $env:GITHUB_OUTPUT
|
||||
exit 0
|
||||
}
|
||||
exit 1
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
- name: Run './build.cmd DevBuild'
|
||||
run: |
|
||||
$env:GITHUB_WORKFLOW = 'dev-build-win' # pretend this is a dev-build-win workflow
|
||||
$env:MAA_BUILDER_MAA_VERSION = "${{steps.set_tag.outputs.tag}}"
|
||||
echo "tag: " $env:MAA_BUILDER_MAA_VERSION
|
||||
./build.cmd DevBuild
|
||||
env:
|
||||
Reason: 'Build nightly version'
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MAA-win-x64
|
||||
path: artifacts
|
||||
|
||||
make-ota:
|
||||
needs: build-win-nightly
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo ${{ needs.build-win-nightyl.outputs.tag }}
|
||||
- name: "Fetch MaaRelease"
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
path: MaaRelease
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
path: MaaAssistantArknights
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: MAA-win-x64
|
||||
path: ${{ format('{0}/{1}', 'build-ota', needs.build-win-nightly.outputs.tag) }}
|
||||
- name: "Fetch release info"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
mkdir -pv build-ota && cd build-ota
|
||||
cd ${{ needs.build-win-nightly.outputs.tag }}
|
||||
mkdir -pv content
|
||||
unzip -q *.zip -x '*.lib' -x '*.pdb' -x '*.exp' -x '*.config' -x '*.xml' -d content
|
||||
cd ..
|
||||
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 30 }} | tee ./release_maa.txt
|
||||
gh release list --repo "${{ github.repository_owner }}/MaaRelease" --limit ${{ inputs.limit_2 || 30 }} | tee ./release_mr.txt
|
||||
echo ${{ needs.build-win-nightly.outputs.tag }} > ./config
|
||||
|
||||
cat ./release_maa.txt | awk '{ print $1 }' > ./tags_maa.txt
|
||||
cat ./release_mr.txt | awk '{ print $1 }' > ./tags_mr.txt
|
||||
|
||||
comm <(sort ./tags_maa.txt) <(sort ./tags_mr.txt) | awk '{ print $1 }' >> ./config
|
||||
|
||||
echo "config:"
|
||||
cat ./config
|
||||
|
||||
echo "release_tag=$(head -n 1 ./config)" >> $GITHUB_ENV
|
||||
- name: "Build OTA"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd build-ota
|
||||
$GITHUB_WORKSPACE/MaaAssistantArknights/tools/OTAPacker/build.sh 'MaaAssistantArknights/MaaAssistantArknights' ./config "${{ github.repository_owner }}/MaaRelease"
|
||||
mv -v ${{ needs.build-win-nightly.outputs.tag }}/*.zip ./MAA-${{ env.release_tag }}-win-x64.zip
|
||||
- name: "Commit and setup tag"
|
||||
run: |
|
||||
cd MaaRelease
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
git checkout --orphan __temp
|
||||
git rm -rf .
|
||||
git commit --allow-empty --message ${{ env.release_tag }}
|
||||
git tag ${{ env.release_tag }} || exit 0 # do nothing if the tag already exists
|
||||
git push --tags
|
||||
- name: "Upload to MaaRelease"
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_name: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
repo_token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
file_glob: true
|
||||
file: build-ota/*.zip
|
||||
tag: ${{ env.release_tag }}
|
||||
prerelease: true
|
||||
overwrite: true
|
||||
body: ${{ inputs.release_body || '' }}
|
||||
- name: "Upload to server"
|
||||
uses: appleboy/scp-action@master
|
||||
with:
|
||||
host: ${{ secrets.SSH_HOST }}
|
||||
username: ${{ secrets.SSH_USER }}
|
||||
key: ${{ secrets.SSH_ID }}
|
||||
source: "build-ota/*.zip"
|
||||
strip_components: 1
|
||||
target: ${{ format('{0}/{1}', 'OTA/MaaAssistantArknights/MaaRelease/releases/download', env.release_tag) }}
|
||||
97
.github/workflows/release-ota.yml
vendored
Normal file
97
.github/workflows/release-ota.yml
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
name: release-ota
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
limit:
|
||||
description: 'Number of releases to fetch from MaaAssistantArknights, 2 at least'
|
||||
required: false
|
||||
default: 31
|
||||
type: number
|
||||
limit_2:
|
||||
description: 'Number of releases to fetch from MaaRelease'
|
||||
required: false
|
||||
default: 30
|
||||
|
||||
jobs:
|
||||
make-ota:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: "Fetch MaaRelease"
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
path: MaaRelease
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
path: MaaAssistantArknights
|
||||
- name: "Fetch release info"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
mkdir -pv build-ota && cd build-ota
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 31 }} | tee ./release_maa.txt
|
||||
gh release list --repo "MaaAssistantArknights/MaaRelease" --limit ${{ inputs.limit_2 || 30 }} | tee ./release_mr.txt
|
||||
head -n 1 ./release_maa.txt | awk '{ print $1 }' > ./config
|
||||
|
||||
tail -n +1 ./release_maa.txt | awk '{ print $1 }' > ./tags_maa.txt
|
||||
cat ./release_mr.txt | awk '{ print $1 }' > ./tags_mr.txt
|
||||
|
||||
comm <(sort ./tags_maa.txt) <(sort ./tags_mr.txt) | awk '{ print $1 }' >> ./config
|
||||
|
||||
echo "config:"
|
||||
cat ./config
|
||||
|
||||
echo "prerelease=$([ $(head -n 1 release_maa.txt | awk '{ print $2}') = 'Pre-release' ] && echo true || echo false)" >> $GITHUB_ENV
|
||||
echo "release_tag=$(head -n 1 ./config)" >> $GITHUB_ENV
|
||||
- name: "Download latest version for server"
|
||||
run: |
|
||||
mkdir -pv build-ota/${{ env.release_tag }}
|
||||
cd build-ota/${{ env.release_tag }}
|
||||
mkdir -pv content
|
||||
gh release download ${{ env.release_tag }} --repo 'MaaAssistantArknights/MaaAssistantArknights' --pattern "MAA-${{ env.release_tag }}-win-x64.zip" --clobber
|
||||
unzip -q -O gbk -o "*.zip" -d 'content'
|
||||
mv *.zip ..
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: "Build OTA"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd build-ota
|
||||
$GITHUB_WORKSPACE/MaaAssistantArknights/tools/OTAPacker/build.sh 'MaaAssistantArknights/MaaAssistantArknights' ./config 'MaaAssistantArknights/MaaRelease'
|
||||
- name: "Commit and setup tag"
|
||||
run: |
|
||||
cd MaaRelease
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
git checkout --orphan __temp
|
||||
git rm -rf .
|
||||
git commit --allow-empty --message ${{ env.release_tag }}
|
||||
git tag ${{ env.release_tag }} || exit 0 # do nothing if the tag already exists
|
||||
git push --tags
|
||||
env:
|
||||
PUSH_REMOTE: https://github-actions[bot]:${{ secrets.MAARELEASE_RELEASE }}@github.com/${{ github.repository_owner }}/MaaRelease
|
||||
- name: "Upload to MaaRelease"
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_name: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
repo_token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
file_glob: true
|
||||
file: build-ota/*.zip
|
||||
tag: ${{ env.release_tag }}
|
||||
prerelease: ${{ env.prerelease }}
|
||||
overwrite: true
|
||||
- name: "Upload to server"
|
||||
uses: appleboy/scp-action@master
|
||||
with:
|
||||
host: ${{ secrets.SSH_HOST }}
|
||||
username: ${{ secrets.SSH_USER }}
|
||||
key: ${{ secrets.SSH_ID }}
|
||||
source: "build-ota/*.zip"
|
||||
strip_components: 1
|
||||
target: ${{ format('{0}/{1}', 'OTA/MaaAssistantArknights/MaaRelease/releases/download', env.release_tag) }}
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,3 +1,6 @@
|
||||
# docs
|
||||
docs/node_modules
|
||||
docs/.vuepress/.temp
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
@@ -20,6 +23,7 @@ build
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
!go.mod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
@@ -71,6 +75,7 @@ bld/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
cmake-build-debug/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
@@ -431,5 +436,9 @@ FodyWeavers.xsd
|
||||
screen.png
|
||||
adb_screen.png
|
||||
tools/**/*.png
|
||||
resource/infrast
|
||||
.vscode
|
||||
!3rdparty/tools/*
|
||||
enc_temp_folder/*
|
||||
|
||||
# Nuke
|
||||
.nuke/temp/*
|
||||
|
||||
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
[submodule "test"]
|
||||
path = test
|
||||
url = https://github.com/MaaAssistantArknights/MaaTestSet.git
|
||||
[submodule "src/MaaMacGui"]
|
||||
path = src/MaaMacGui
|
||||
url = https://github.com/MaaAssistantArknights/MaaMacGui.git
|
||||
132
.nuke/build.schema.json
Normal file
132
.nuke/build.schema.json
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "Build Schema",
|
||||
"$ref": "#/definitions/build",
|
||||
"definitions": {
|
||||
"build": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Continue": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates to continue a previously failed build attempt"
|
||||
},
|
||||
"Help": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the help text for this build assembly"
|
||||
},
|
||||
"Host": {
|
||||
"type": "string",
|
||||
"description": "Host for execution. Default is 'automatic'",
|
||||
"enum": [
|
||||
"AppVeyor",
|
||||
"AzurePipelines",
|
||||
"Bamboo",
|
||||
"Bitbucket",
|
||||
"Bitrise",
|
||||
"GitHubActions",
|
||||
"GitLab",
|
||||
"Jenkins",
|
||||
"Rider",
|
||||
"SpaceAutomation",
|
||||
"TeamCity",
|
||||
"Terminal",
|
||||
"TravisCI",
|
||||
"VisualStudio",
|
||||
"VSCode"
|
||||
]
|
||||
},
|
||||
"NoLogo": {
|
||||
"type": "boolean",
|
||||
"description": "Disables displaying the NUKE logo"
|
||||
},
|
||||
"Partition": {
|
||||
"type": "string",
|
||||
"description": "Partition to use on CI"
|
||||
},
|
||||
"Plan": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the execution plan (HTML)"
|
||||
},
|
||||
"Profile": {
|
||||
"type": "array",
|
||||
"description": "Defines the profiles to load",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"Root": {
|
||||
"type": "string",
|
||||
"description": "Root directory during build execution"
|
||||
},
|
||||
"Skip": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be skipped. Empty list skips all dependencies",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Target": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be invoked. Default is '{default_target}'",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Verbosity": {
|
||||
"type": "string",
|
||||
"description": "Logging verbosity during build execution. Default is 'Normal'",
|
||||
"enum": [
|
||||
"Minimal",
|
||||
"Normal",
|
||||
"Quiet",
|
||||
"Verbose"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
4
.nuke/parameters.json
Normal file
4
.nuke/parameters.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"$schema": "./build.schema.json",
|
||||
"Solution": "tools/MaaBuilder.sln"
|
||||
}
|
||||
10
.vscode/settings.json
vendored
Normal file
10
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"json.schemas": [
|
||||
{
|
||||
"fileMatch": [
|
||||
"resource/tasks.json"
|
||||
],
|
||||
"url": "./docs/maa_tasks_schema.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
3rdparty/bin/fastdeploy.dll
vendored
Normal file
BIN
3rdparty/bin/fastdeploy.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/bin/libiomp5md.dll
vendored
BIN
3rdparty/bin/libiomp5md.dll
vendored
Binary file not shown.
BIN
3rdparty/bin/mkldnn.dll
vendored
BIN
3rdparty/bin/mkldnn.dll
vendored
Binary file not shown.
BIN
3rdparty/bin/mklml.dll
vendored
BIN
3rdparty/bin/mklml.dll
vendored
Binary file not shown.
BIN
3rdparty/bin/onnxruntime.dll
vendored
Normal file
BIN
3rdparty/bin/onnxruntime.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/bin/paddle2onnx.dll
vendored
Normal file
BIN
3rdparty/bin/paddle2onnx.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/bin/paddle_inference.dll
vendored
BIN
3rdparty/bin/paddle_inference.dll
vendored
Binary file not shown.
BIN
3rdparty/bin/ppocr.dll
vendored
BIN
3rdparty/bin/ppocr.dll
vendored
Binary file not shown.
293
3rdparty/include/Arknights-Tile-Pos/TileCalc.hpp
vendored
293
3rdparty/include/Arknights-Tile-Pos/TileCalc.hpp
vendored
@@ -1,13 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <opencv2/core.hpp>
|
||||
#include <meojson/json.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
|
||||
#include "TileDef.hpp"
|
||||
|
||||
namespace Map
|
||||
{
|
||||
@@ -25,22 +27,33 @@ namespace Map
|
||||
int get_width() const { return width; }
|
||||
int get_height() const { return height; }
|
||||
Tile get_item(int y, int x) const { return tiles[y][x]; }
|
||||
int view = 0;
|
||||
std::string stageId;
|
||||
std::string code;
|
||||
std::string levelId;
|
||||
std::string name;
|
||||
std::vector<cv::Point3d> view;
|
||||
LevelKey key;
|
||||
|
||||
private:
|
||||
int height = 0;
|
||||
int width = 0;
|
||||
std::vector<std::vector<Tile>> tiles;
|
||||
};
|
||||
|
||||
class TileCalc
|
||||
{
|
||||
public:
|
||||
TileCalc(int width, int height, const std::string& dir);
|
||||
bool run(const std::string& code_or_name, bool side, std::vector<std::vector<cv::Point2d>>& out_pos, std::vector<std::vector<Tile>>& out_tiles) const;
|
||||
TileCalc(int width, int height, const json::array& json);
|
||||
|
||||
bool contains(const std::string& any_key);
|
||||
bool contains(const LevelKey& key);
|
||||
|
||||
bool run(const std::string& any_key, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const;
|
||||
bool run(const LevelKey& key, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const;
|
||||
|
||||
private:
|
||||
bool run(const Level& level, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const;
|
||||
bool adapter(double& x, double& y) const;
|
||||
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
const double degree = atan(1.0) * 4 / 180;
|
||||
@@ -48,10 +61,9 @@ namespace Map
|
||||
cv::Mat MatrixP = cv::Mat(4, 4, CV_64F);
|
||||
cv::Mat MatrixX = cv::Mat(4, 4, CV_64F);
|
||||
cv::Mat MatrixY = cv::Mat(4, 4, CV_64F);
|
||||
bool adapter(double& x, double& y) const;
|
||||
};
|
||||
|
||||
inline void InitMat4x4(cv::Mat& m, double(*num)[4])
|
||||
inline void InitMat4x4(cv::Mat& m, double (*num)[4])
|
||||
{
|
||||
for (int i = 0; i < m.rows; i++)
|
||||
for (int j = 0; j < m.cols; j++)
|
||||
@@ -60,68 +72,54 @@ namespace Map
|
||||
|
||||
inline Level::Level(const json::value& data)
|
||||
{
|
||||
Level::stageId = data.at("stageId").as_string();
|
||||
Level::code = data.at("code").as_string();
|
||||
Level::levelId = data.at("levelId").as_string();
|
||||
Level::name = data.get("name", "null");
|
||||
Level::height = data.at("height").as_integer();
|
||||
Level::width = data.at("width").as_integer();
|
||||
Level::view = data.at("view").as_integer();
|
||||
key.stageId = data.at("stageId").as_string();
|
||||
key.code = data.at("code").as_string();
|
||||
key.levelId = data.at("levelId").as_string();
|
||||
key.name = data.get("name", "null");
|
||||
this->height = data.at("height").as_integer();
|
||||
this->width = data.at("width").as_integer();
|
||||
for (const json::value& point_data : data.at("view").as_array()) {
|
||||
cv::Point3d tmp;
|
||||
auto point_array = point_data.as_array();
|
||||
tmp.x = point_array[0].as_double();
|
||||
tmp.y = point_array[1].as_double();
|
||||
tmp.z = point_array[2].as_double();
|
||||
this->view.emplace_back(std::move(tmp));
|
||||
}
|
||||
for (const json::value& row : data.at("tiles").as_array()) {
|
||||
std::vector<Tile> tmp;
|
||||
tmp.reserve(Level::width);
|
||||
tmp.reserve(this->width);
|
||||
for (const json::value& tile : row.as_array()) {
|
||||
tmp.emplace_back(Tile{
|
||||
tile.at("heightType").as_integer(),
|
||||
tile.at("buildableType").as_integer(),
|
||||
tile.get("tileKey", std::string()) });
|
||||
tmp.emplace_back(Tile { tile.at("heightType").as_integer(), tile.at("buildableType").as_integer(),
|
||||
tile.get("tileKey", std::string()) });
|
||||
}
|
||||
tiles.emplace_back(std::move(tmp));
|
||||
}
|
||||
}
|
||||
|
||||
inline TileCalc::TileCalc(int width, int height, const std::string& dir)
|
||||
inline TileCalc::TileCalc(int width, int height, const json::array& json)
|
||||
{
|
||||
TileCalc::width = width;
|
||||
TileCalc::height = height;
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
double ratio = static_cast<double>(height) / width;
|
||||
double matrixP[4][4]{
|
||||
{ ratio / tan(20 * degree), 0, 0, 0},
|
||||
{ 0, 1 / tan(20 * degree), 0, 0},
|
||||
{ 0, 0, -(1000 + 0.3) / (1000 - 0.3), -(1000 * 0.3 * 2) / (1000 - 0.3)},
|
||||
{ 0, 0, -1, 0 }
|
||||
};
|
||||
InitMat4x4(TileCalc::MatrixP, matrixP);
|
||||
double matrixX[4][4]{
|
||||
{ 1, 0, 0, 0},
|
||||
{ 0, cos(30 * degree), -sin(30 * degree), 0},
|
||||
{ 0, -sin(30 * degree), -cos(30 * degree), 0},
|
||||
{ 0, 0, 0, 1}
|
||||
};
|
||||
InitMat4x4(TileCalc::MatrixX, matrixX);
|
||||
double matrixY[4][4]{
|
||||
{ cos(10 * degree), 0, sin(10 * degree), 0},
|
||||
{ 0, 1, 0, 0},
|
||||
{ -sin(10 * degree), 0, cos(10 * degree), 0},
|
||||
{ 0, 0, 0, 1}
|
||||
};
|
||||
InitMat4x4(TileCalc::MatrixY, matrixY);
|
||||
std::ifstream ifs(dir, std::ios::in);
|
||||
if (!ifs.is_open()) {
|
||||
std::cerr << "Read resource failed" << std::endl;
|
||||
throw "Read resource failed";
|
||||
}
|
||||
std::stringstream iss;
|
||||
iss << ifs.rdbuf();
|
||||
ifs.close();
|
||||
std::string content = iss.str();
|
||||
auto ret = json::parse(content);
|
||||
if (!ret) {
|
||||
std::cerr << "Parsing failed" << std::endl;
|
||||
throw "Parsing failed";
|
||||
}
|
||||
for (const json::value& item : ret.value().as_array()) {
|
||||
TileCalc::levels.emplace_back(item);
|
||||
double matrixP[4][4] { { ratio / tan(20 * degree), 0, 0, 0 },
|
||||
{ 0, 1 / tan(20 * degree), 0, 0 },
|
||||
{ 0, 0, -(1000 + 0.3) / (1000 - 0.3), -(1000 * 0.3 * 2) / (1000 - 0.3) },
|
||||
{ 0, 0, -1, 0 } };
|
||||
InitMat4x4(this->MatrixP, matrixP);
|
||||
double matrixX[4][4] { { 1, 0, 0, 0 },
|
||||
{ 0, cos(30 * degree), -sin(30 * degree), 0 },
|
||||
{ 0, -sin(30 * degree), -cos(30 * degree), 0 },
|
||||
{ 0, 0, 0, 1 } };
|
||||
InitMat4x4(this->MatrixX, matrixX);
|
||||
double matrixY[4][4] { { cos(10 * degree), 0, sin(10 * degree), 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ -sin(10 * degree), 0, cos(10 * degree), 0 },
|
||||
{ 0, 0, 0, 1 } };
|
||||
InitMat4x4(this->MatrixY, matrixY);
|
||||
|
||||
for (const json::value& item : json) {
|
||||
this->levels.emplace_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,96 +139,81 @@ namespace Map
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool TileCalc::run(const std::string& code_or_name, bool side, std::vector<std::vector<cv::Point2d>>& out_pos, std::vector<std::vector<Tile>>& out_tiles) const
|
||||
inline bool TileCalc::contains(const std::string& any_key)
|
||||
{
|
||||
bool runned = false;
|
||||
double x = 0, y = 0, z = 0;
|
||||
for (const Map::Level& level : TileCalc::levels) {
|
||||
if (/*level.code == code_or_name || */
|
||||
level.name == code_or_name) {
|
||||
switch (level.view) {
|
||||
case 0:
|
||||
x = 0;
|
||||
y = -4.81;
|
||||
z = -7.76;
|
||||
if (side) {
|
||||
x += 0.5975104570388794;
|
||||
y -= 0.5;
|
||||
z -= 0.882108688354492;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
x = 0;
|
||||
y = -5.60;
|
||||
z = -8.92;
|
||||
if (side) {
|
||||
x += 0.7989424467086792;
|
||||
y -= 0.5;
|
||||
z -= 0.86448486328125;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
x = 0;
|
||||
y = -5.08;
|
||||
z = -8.04;
|
||||
if (side) {
|
||||
x += 0.6461319923400879;
|
||||
y -= 0.5;
|
||||
z -= 0.877854309082031;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
x = 0;
|
||||
y = -6.1;
|
||||
z = -9.78;
|
||||
if (side) {
|
||||
x += 0.948279857635498;
|
||||
y -= 0.5;
|
||||
z -= 0.85141918182373;
|
||||
}
|
||||
break;
|
||||
}
|
||||
double adapter_y = 0, adapter_z = 0;
|
||||
TileCalc::adapter(adapter_y, adapter_z);
|
||||
double matrix[4][4]{
|
||||
{ 1, 0, 0, -x},
|
||||
{ 0, 1, 0, -y - adapter_y},
|
||||
{ 0, 0, 1, -z - adapter_z},
|
||||
{ 0, 0, 0, 1}
|
||||
};
|
||||
auto raw = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
auto Finall_Matrix = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
InitMat4x4(raw, matrix);
|
||||
if (side) {
|
||||
Finall_Matrix = TileCalc::MatrixP * TileCalc::MatrixX * TileCalc::MatrixY * raw;
|
||||
}
|
||||
else {
|
||||
Finall_Matrix = TileCalc::MatrixP * TileCalc::MatrixX * raw;
|
||||
}
|
||||
int h = level.get_height();
|
||||
int w = level.get_width();
|
||||
auto map_point = cv::Mat(cv::Size(1, 4), CV_64F);
|
||||
map_point.at<double>(3, 0) = 1;
|
||||
auto tmp_pos = std::vector<cv::Point2d>(w);
|
||||
auto tmp_tiles = std::vector<Tile>(w);
|
||||
for (int i = 0; i < h; i++) {
|
||||
for (int j = 0; j < w; j++) {
|
||||
tmp_tiles[j] = level.get_item(i, j);
|
||||
map_point.at<double>(0, 0) = j - (w - 1) / 2.0;
|
||||
map_point.at<double>(1, 0) = (h - 1) / 2.0 - i;
|
||||
map_point.at<double>(2, 0) = tmp_tiles[j].heightType * -0.4;
|
||||
cv::Mat view_point = Finall_Matrix * map_point;
|
||||
view_point = view_point / view_point.at<double>(3, 0);
|
||||
view_point = (view_point + 1) / 2;
|
||||
tmp_pos[j] = cv::Point2d(view_point.at<double>(0, 0) * TileCalc::width, (1 - view_point.at<double>(1, 0)) * TileCalc::height);
|
||||
}
|
||||
out_pos.emplace_back(tmp_pos);
|
||||
out_tiles.emplace_back(tmp_tiles);
|
||||
}
|
||||
runned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return runned;
|
||||
auto iter = std::find_if(levels.cbegin(), levels.cend(),
|
||||
[&any_key](const Level& level) -> bool { return level.key == any_key; });
|
||||
return iter != levels.cend();
|
||||
}
|
||||
}
|
||||
|
||||
bool TileCalc::contains(const LevelKey& key)
|
||||
{
|
||||
auto iter = std::find_if(levels.cbegin(), levels.cend(),
|
||||
[&key](const Level& level) -> bool { return level.key == key; });
|
||||
return iter != levels.cend();
|
||||
}
|
||||
|
||||
inline bool TileCalc::run(const std::string& any_key, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const
|
||||
{
|
||||
auto iter = std::find_if(levels.cbegin(), levels.cend(),
|
||||
[&any_key](const Level& level) -> bool { return level.key == any_key; });
|
||||
if (iter == levels.cend()) {
|
||||
return false;
|
||||
}
|
||||
return run(*iter, side, out_pos, out_tiles);
|
||||
}
|
||||
|
||||
inline bool TileCalc::run(const LevelKey& key, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const
|
||||
{
|
||||
auto iter = std::find_if(levels.cbegin(), levels.cend(),
|
||||
[&key](const Level& level) -> bool { return level.key == key; });
|
||||
if (iter == levels.cend()) {
|
||||
return false;
|
||||
}
|
||||
return run(*iter, side, out_pos, out_tiles);
|
||||
}
|
||||
|
||||
inline bool TileCalc::run(const Level& level, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles) const
|
||||
{
|
||||
auto [x, y, z] = level.view[side ? 1 : 0];
|
||||
double adapter_y = 0, adapter_z = 0;
|
||||
this->adapter(adapter_y, adapter_z);
|
||||
double matrix[4][4] {
|
||||
{ 1, 0, 0, -x }, { 0, 1, 0, -y - adapter_y }, { 0, 0, 1, -z - adapter_z }, { 0, 0, 0, 1 }
|
||||
};
|
||||
auto raw = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
auto Finall_Matrix = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
InitMat4x4(raw, matrix);
|
||||
if (side) {
|
||||
Finall_Matrix = this->MatrixP * this->MatrixX * this->MatrixY * raw;
|
||||
}
|
||||
else {
|
||||
Finall_Matrix = this->MatrixP * this->MatrixX * raw;
|
||||
}
|
||||
int h = level.get_height();
|
||||
int w = level.get_width();
|
||||
auto map_point = cv::Mat(cv::Size(1, 4), CV_64F);
|
||||
map_point.at<double>(3, 0) = 1;
|
||||
auto tmp_pos = std::vector<cv::Point2d>(w);
|
||||
auto tmp_tiles = std::vector<Tile>(w);
|
||||
for (int i = 0; i < h; i++) {
|
||||
for (int j = 0; j < w; j++) {
|
||||
tmp_tiles[j] = level.get_item(i, j);
|
||||
map_point.at<double>(0, 0) = j - (w - 1) / 2.0;
|
||||
map_point.at<double>(1, 0) = (h - 1) / 2.0 - i;
|
||||
map_point.at<double>(2, 0) = tmp_tiles[j].heightType * -0.4;
|
||||
cv::Mat view_point = Finall_Matrix * map_point;
|
||||
view_point = view_point / view_point.at<double>(3, 0);
|
||||
view_point = (view_point + 1) / 2;
|
||||
tmp_pos[j] = cv::Point2d(view_point.at<double>(0, 0) * this->width,
|
||||
(1 - view_point.at<double>(1, 0)) * this->height);
|
||||
}
|
||||
out_pos.emplace_back(tmp_pos);
|
||||
out_tiles.emplace_back(tmp_tiles);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} // namespace Map
|
||||
|
||||
32
3rdparty/include/Arknights-Tile-Pos/TileDef.hpp
vendored
Normal file
32
3rdparty/include/Arknights-Tile-Pos/TileDef.hpp
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace Map
|
||||
{
|
||||
struct LevelKey
|
||||
{
|
||||
std::string stageId;
|
||||
std::string code;
|
||||
std::string levelId;
|
||||
std::string name;
|
||||
|
||||
bool empty_or_equal(const std::string& lhs, const std::string& rhs) const noexcept
|
||||
{
|
||||
return (lhs.empty() || rhs.empty()) ? true : lhs == rhs;
|
||||
}
|
||||
bool operator==(const LevelKey& other) const noexcept
|
||||
{
|
||||
return empty_or_equal(stageId, other.stageId) && empty_or_equal(code, other.code) &&
|
||||
empty_or_equal(levelId, other.levelId) && empty_or_equal(name, other.name);
|
||||
}
|
||||
bool operator==(const std::string& any_key) const noexcept
|
||||
{
|
||||
if (any_key.empty()) {
|
||||
return false;
|
||||
}
|
||||
return empty_or_equal(stageId, any_key) || empty_or_equal(code, any_key) ||
|
||||
empty_or_equal(levelId, any_key) || empty_or_equal(name, any_key);
|
||||
}
|
||||
};
|
||||
}
|
||||
37
3rdparty/include/PaddleOCR/exports.h
vendored
37
3rdparty/include/PaddleOCR/exports.h
vendored
@@ -1,37 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// The way how the function is called
|
||||
#if !defined(OCR_CALL)
|
||||
#if defined(_WIN32)
|
||||
#define OCR_CALL __stdcall
|
||||
#else
|
||||
#define OCR_CALL
|
||||
#endif /* _WIN32 */
|
||||
#endif /* OCR_CALL */
|
||||
|
||||
// The function exported symbols
|
||||
#if defined _WIN32 || defined __CYGWIN__
|
||||
#define OCR_IMPORT __declspec(dllimport)
|
||||
#define OCR_EXPORT __declspec(dllexport)
|
||||
#define OCR_LOCAL
|
||||
#else
|
||||
#if __GNUC__ >= 4
|
||||
#define OCR_IMPORT __attribute__ ((visibility ("default")))
|
||||
#define OCR_EXPORT __attribute__ ((visibility ("default")))
|
||||
#define OCR_LOCAL __attribute__ ((visibility ("hidden")))
|
||||
#else
|
||||
#define OCR_IMPORT
|
||||
#define OCR_EXPORT
|
||||
#define OCR_LOCAL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef OCR_EXPORTS // defined if we are building the DLL (instead of using it)
|
||||
#define OCRAPI_PORT OCR_EXPORT
|
||||
#else
|
||||
#define OCRAPI_PORT OCR_IMPORT
|
||||
#endif // OCR_EXPORTS
|
||||
|
||||
#define OCRAPI OCRAPI_PORT OCR_CALL
|
||||
|
||||
#define OCRLOCAL OCR_LOCAL OCR_CALL
|
||||
56
3rdparty/include/PaddleOCR/paddle_ocr.h
vendored
56
3rdparty/include/PaddleOCR/paddle_ocr.h
vendored
@@ -1,56 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "exports.h"
|
||||
|
||||
struct paddle_ocr_t;
|
||||
typedef int OCR_ERROR;
|
||||
typedef unsigned char uint8_t;
|
||||
|
||||
#define OCR_SUCCESS 0
|
||||
#define OCR_FAILURE 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
OCRAPI_PORT paddle_ocr_t* OCR_CALL PaddleOcrCreate(
|
||||
const char* det_model_dir, const char* rec_model_dir,
|
||||
const char* char_list_file, const char* cls_model_dir);
|
||||
|
||||
void OCRAPI PaddleOcrDestroy(paddle_ocr_t* ocr_ptr);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrDet(
|
||||
paddle_ocr_t* ocr_ptr, const uint8_t* encode_buf, size_t encode_buf_size,
|
||||
int* out_boxes, size_t* out_boxes_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrDetWithData(
|
||||
paddle_ocr_t* ocr_ptr, int rows, int cols, int type, void* data,
|
||||
int* out_boxes, size_t* out_boxes_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrRec(
|
||||
paddle_ocr_t* ocr_ptr, const uint8_t* encode_buf, size_t encode_buf_size,
|
||||
char** out_strs, float* out_scores, size_t* out_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrRecWithData(
|
||||
paddle_ocr_t* ocr_ptr, int rows, int cols, int type, void* data,
|
||||
char** out_strs, float* out_scores, size_t* out_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrSystem(
|
||||
paddle_ocr_t* ocr_ptr, const uint8_t* encode_buf, size_t encode_buf_size,
|
||||
bool with_cls,
|
||||
int* out_boxes, char** out_strs, float* out_scores, size_t* out_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
OCR_ERROR OCRAPI PaddleOcrSystemWithData(
|
||||
paddle_ocr_t* ocr_ptr, int rows, int cols, int type, void* data,
|
||||
bool with_cls,
|
||||
int* out_boxes, char** out_strs, float* out_scores, size_t* out_size,
|
||||
double* out_times, size_t* out_times_size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
310
3rdparty/include/cpp-base64/base64.hpp
vendored
310
3rdparty/include/cpp-base64/base64.hpp
vendored
@@ -1,310 +0,0 @@
|
||||
/*
|
||||
base64.cpp and base64.h
|
||||
|
||||
base64 encoding and decoding with C++.
|
||||
More information at
|
||||
https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp
|
||||
|
||||
Version: 2.rc.08 (release candidate)
|
||||
|
||||
Copyright (C) 2004-2017, 2020, 2021 René Nyffenegger
|
||||
|
||||
This source code is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the author be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this source code must not be misrepresented; you must not
|
||||
claim that you wrote the original source code. If you use this source code
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original source code.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
|
||||
|
||||
*/
|
||||
#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
|
||||
#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
|
||||
|
||||
#include <string>
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
#include <string_view>
|
||||
#endif // __cplusplus >= 201703L
|
||||
|
||||
std::string base64_encode (std::string const& s, bool url = false);
|
||||
std::string base64_encode_pem (std::string const& s);
|
||||
std::string base64_encode_mime(std::string const& s);
|
||||
|
||||
std::string base64_decode(std::string const& s, bool remove_linebreaks = false);
|
||||
std::string base64_encode(unsigned char const*, size_t len, bool url = false);
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
//
|
||||
// Interface with std::string_view rather than const std::string&
|
||||
// Requires C++17
|
||||
// Provided by Yannic Bonenberger (https://github.com/Yannic)
|
||||
//
|
||||
std::string base64_encode (std::string_view s, bool url = false);
|
||||
std::string base64_encode_pem (std::string_view s);
|
||||
std::string base64_encode_mime(std::string_view s);
|
||||
|
||||
std::string base64_decode(std::string_view s, bool remove_linebreaks = false);
|
||||
#endif // __cplusplus >= 201703L
|
||||
|
||||
#include <algorithm>
|
||||
#include <stdexcept>
|
||||
|
||||
//
|
||||
// Depending on the url parameter in base64_chars, one of
|
||||
// two sets of base64 characters needs to be chosen.
|
||||
// They differ in their last two characters.
|
||||
//
|
||||
static const char* base64_chars[2] = {
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"0123456789"
|
||||
"+/",
|
||||
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"0123456789"
|
||||
"-_"};
|
||||
|
||||
static unsigned int pos_of_char(const unsigned char chr) {
|
||||
//
|
||||
// Return the position of chr within base64_encode()
|
||||
//
|
||||
|
||||
if (chr >= 'A' && chr <= 'Z') return chr - 'A';
|
||||
else if (chr >= 'a' && chr <= 'z') return chr - 'a' + ('Z' - 'A') + 1;
|
||||
else if (chr >= '0' && chr <= '9') return chr - '0' + ('Z' - 'A') + ('z' - 'a') + 2;
|
||||
else if (chr == '+' || chr == '-') return 62; // Be liberal with input and accept both url ('-') and non-url ('+') base 64 characters (
|
||||
else if (chr == '/' || chr == '_') return 63; // Ditto for '/' and '_'
|
||||
else
|
||||
//
|
||||
// 2020-10-23: Throw std::exception rather than const char*
|
||||
//(Pablo Martin-Gomez, https://github.com/Bouska)
|
||||
//
|
||||
throw std::runtime_error("Input is not valid base64-encoded data.");
|
||||
}
|
||||
|
||||
static std::string insert_linebreaks(std::string str, size_t distance) {
|
||||
//
|
||||
// Provided by https://github.com/JomaCorpFX, adapted by me.
|
||||
//
|
||||
if (!str.length()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
size_t pos = distance;
|
||||
|
||||
while (pos < str.size()) {
|
||||
str.insert(pos, "\n");
|
||||
pos += distance + 1;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
template <typename String, unsigned int line_length>
|
||||
static std::string encode_with_line_breaks(String s) {
|
||||
return insert_linebreaks(base64_encode(s, false), line_length);
|
||||
}
|
||||
|
||||
template <typename String>
|
||||
static std::string encode_pem(String s) {
|
||||
return encode_with_line_breaks<String, 64>(s);
|
||||
}
|
||||
|
||||
template <typename String>
|
||||
static std::string encode_mime(String s) {
|
||||
return encode_with_line_breaks<String, 76>(s);
|
||||
}
|
||||
|
||||
template <typename String>
|
||||
static std::string encode(String s, bool url) {
|
||||
return base64_encode(reinterpret_cast<const unsigned char*>(s.data()), s.length(), url);
|
||||
}
|
||||
|
||||
std::string base64_encode(unsigned char const* bytes_to_encode, size_t in_len, bool url) {
|
||||
|
||||
size_t len_encoded = (in_len +2) / 3 * 4;
|
||||
|
||||
unsigned char trailing_char = url ? '.' : '=';
|
||||
|
||||
//
|
||||
// Choose set of base64 characters. They differ
|
||||
// for the last two positions, depending on the url
|
||||
// parameter.
|
||||
// A bool (as is the parameter url) is guaranteed
|
||||
// to evaluate to either 0 or 1 in C++ therefore,
|
||||
// the correct character set is chosen by subscripting
|
||||
// base64_chars with url.
|
||||
//
|
||||
const char* base64_chars_ = base64_chars[url];
|
||||
|
||||
std::string ret;
|
||||
ret.reserve(len_encoded);
|
||||
|
||||
unsigned int pos = 0;
|
||||
|
||||
while (pos < in_len) {
|
||||
ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0xfc) >> 2]);
|
||||
|
||||
if (pos+1 < in_len) {
|
||||
ret.push_back(base64_chars_[((bytes_to_encode[pos + 0] & 0x03) << 4) + ((bytes_to_encode[pos + 1] & 0xf0) >> 4)]);
|
||||
|
||||
if (pos+2 < in_len) {
|
||||
ret.push_back(base64_chars_[((bytes_to_encode[pos + 1] & 0x0f) << 2) + ((bytes_to_encode[pos + 2] & 0xc0) >> 6)]);
|
||||
ret.push_back(base64_chars_[ bytes_to_encode[pos + 2] & 0x3f]);
|
||||
}
|
||||
else {
|
||||
ret.push_back(base64_chars_[(bytes_to_encode[pos + 1] & 0x0f) << 2]);
|
||||
ret.push_back(trailing_char);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0x03) << 4]);
|
||||
ret.push_back(trailing_char);
|
||||
ret.push_back(trailing_char);
|
||||
}
|
||||
|
||||
pos += 3;
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename String>
|
||||
static std::string decode(String encoded_string, bool remove_linebreaks) {
|
||||
//
|
||||
// decode(…) is templated so that it can be used with String = const std::string&
|
||||
// or std::string_view (requires at least C++17)
|
||||
//
|
||||
|
||||
if (encoded_string.empty()) return std::string();
|
||||
|
||||
if (remove_linebreaks) {
|
||||
|
||||
std::string copy(encoded_string);
|
||||
|
||||
copy.erase(std::remove(copy.begin(), copy.end(), '\n'), copy.end());
|
||||
|
||||
return base64_decode(copy, false);
|
||||
}
|
||||
|
||||
size_t length_of_string = encoded_string.length();
|
||||
size_t pos = 0;
|
||||
|
||||
//
|
||||
// The approximate length (bytes) of the decoded string might be one or
|
||||
// two bytes smaller, depending on the amount of trailing equal signs
|
||||
// in the encoded string. This approximation is needed to reserve
|
||||
// enough space in the string to be returned.
|
||||
//
|
||||
size_t approx_length_of_decoded_string = length_of_string / 4 * 3;
|
||||
std::string ret;
|
||||
ret.reserve(approx_length_of_decoded_string);
|
||||
|
||||
while (pos < length_of_string) {
|
||||
//
|
||||
// Iterate over encoded input string in chunks. The size of all
|
||||
// chunks except the last one is 4 bytes.
|
||||
//
|
||||
// The last chunk might be padded with equal signs or dots
|
||||
// in order to make it 4 bytes in size as well, but this
|
||||
// is not required as per RFC 2045.
|
||||
//
|
||||
// All chunks except the last one produce three output bytes.
|
||||
//
|
||||
// The last chunk produces at least one and up to three bytes.
|
||||
//
|
||||
|
||||
size_t pos_of_char_1 = pos_of_char(encoded_string[pos+1] );
|
||||
|
||||
//
|
||||
// Emit the first output byte that is produced in each chunk:
|
||||
//
|
||||
ret.push_back(static_cast<std::string::value_type>( ( (pos_of_char(encoded_string[pos+0]) ) << 2 ) + ( (pos_of_char_1 & 0x30 ) >> 4)));
|
||||
|
||||
if ( ( pos + 2 < length_of_string ) && // Check for data that is not padded with equal signs (which is allowed by RFC 2045)
|
||||
encoded_string[pos+2] != '=' &&
|
||||
encoded_string[pos+2] != '.' // accept URL-safe base 64 strings, too, so check for '.' also.
|
||||
)
|
||||
{
|
||||
//
|
||||
// Emit a chunk's second byte (which might not be produced in the last chunk).
|
||||
//
|
||||
unsigned int pos_of_char_2 = pos_of_char(encoded_string[pos+2] );
|
||||
ret.push_back(static_cast<std::string::value_type>( (( pos_of_char_1 & 0x0f) << 4) + (( pos_of_char_2 & 0x3c) >> 2)));
|
||||
|
||||
if ( ( pos + 3 < length_of_string ) &&
|
||||
encoded_string[pos+3] != '=' &&
|
||||
encoded_string[pos+3] != '.'
|
||||
)
|
||||
{
|
||||
//
|
||||
// Emit a chunk's third byte (which might not be produced in the last chunk).
|
||||
//
|
||||
ret.push_back(static_cast<std::string::value_type>( ( (pos_of_char_2 & 0x03 ) << 6 ) + pos_of_char(encoded_string[pos+3]) ));
|
||||
}
|
||||
}
|
||||
|
||||
pos += 4;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::string base64_decode(std::string const& s, bool remove_linebreaks) {
|
||||
return decode(s, remove_linebreaks);
|
||||
}
|
||||
|
||||
std::string base64_encode(std::string const& s, bool url) {
|
||||
return encode(s, url);
|
||||
}
|
||||
|
||||
std::string base64_encode_pem (std::string const& s) {
|
||||
return encode_pem(s);
|
||||
}
|
||||
|
||||
std::string base64_encode_mime(std::string const& s) {
|
||||
return encode_mime(s);
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
//
|
||||
// Interface with std::string_view rather than const std::string&
|
||||
// Requires C++17
|
||||
// Provided by Yannic Bonenberger (https://github.com/Yannic)
|
||||
//
|
||||
|
||||
std::string base64_encode(std::string_view s, bool url) {
|
||||
return encode(s, url);
|
||||
}
|
||||
|
||||
std::string base64_encode_pem(std::string_view s) {
|
||||
return encode_pem(s);
|
||||
}
|
||||
|
||||
std::string base64_encode_mime(std::string_view s) {
|
||||
return encode_mime(s);
|
||||
}
|
||||
|
||||
std::string base64_decode(std::string_view s, bool remove_linebreaks) {
|
||||
return decode(s, remove_linebreaks);
|
||||
}
|
||||
|
||||
#endif // __cplusplus >= 201703L
|
||||
|
||||
#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */
|
||||
77
3rdparty/include/fastdeploy/backends/backend.h
vendored
Normal file
77
3rdparty/include/fastdeploy/backends/backend.h
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fastdeploy/backends/common/multiclass_nms.h"
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
#include "fastdeploy/core/fd_type.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
/*! @brief Information of Tensor
|
||||
*/
|
||||
struct TensorInfo {
|
||||
std::string name; ///< Name of tensor
|
||||
std::vector<int> shape; ///< Shape of tensor
|
||||
FDDataType dtype; ///< Data type of tensor
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& output,
|
||||
const TensorInfo& info) {
|
||||
output << "TensorInfo(name: " << info.name << ", shape: [";
|
||||
for (size_t i = 0; i < info.shape.size(); ++i) {
|
||||
if (i == info.shape.size() - 1) {
|
||||
output << info.shape[i];
|
||||
} else {
|
||||
output << info.shape[i] << ", ";
|
||||
}
|
||||
}
|
||||
output << "], dtype: " << Str(info.dtype) << ")";
|
||||
return output;
|
||||
}
|
||||
};
|
||||
|
||||
class BaseBackend {
|
||||
public:
|
||||
bool initialized_ = false;
|
||||
|
||||
BaseBackend() {}
|
||||
virtual ~BaseBackend() = default;
|
||||
|
||||
virtual bool Initialized() const { return initialized_; }
|
||||
|
||||
virtual int NumInputs() const = 0;
|
||||
virtual int NumOutputs() const = 0;
|
||||
virtual TensorInfo GetInputInfo(int index) = 0;
|
||||
virtual TensorInfo GetOutputInfo(int index) = 0;
|
||||
virtual std::vector<TensorInfo> GetInputInfos() = 0;
|
||||
virtual std::vector<TensorInfo> GetOutputInfos() = 0;
|
||||
// if copy_to_fd is true, copy memory data to FDTensor
|
||||
// else share memory to FDTensor(only Paddle、ORT、TRT、OpenVINO support it)
|
||||
virtual bool Infer(std::vector<FDTensor>& inputs,
|
||||
std::vector<FDTensor>* outputs,
|
||||
bool copy_to_fd = true) = 0;
|
||||
virtual std::unique_ptr<BaseBackend> Clone(void *stream = nullptr,
|
||||
int device_id = -1) {
|
||||
FDERROR << "Clone no support" << std::endl;
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
45
3rdparty/include/fastdeploy/backends/common/multiclass_nms.h
vendored
Normal file
45
3rdparty/include/fastdeploy/backends/common/multiclass_nms.h
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace backend {
|
||||
struct MultiClassNMS {
|
||||
int64_t background_label = -1;
|
||||
int64_t keep_top_k = -1;
|
||||
float nms_eta;
|
||||
float nms_threshold = 0.7;
|
||||
int64_t nms_top_k;
|
||||
bool normalized;
|
||||
float score_threshold;
|
||||
|
||||
std::vector<int32_t> out_num_rois_data;
|
||||
std::vector<int32_t> out_index_data;
|
||||
std::vector<float> out_box_data;
|
||||
void FastNMS(const float* boxes, const float* scores, const int& num_boxes,
|
||||
std::vector<int>* keep_indices);
|
||||
int NMSForEachSample(const float* boxes, const float* scores, int num_boxes,
|
||||
int num_classes,
|
||||
std::map<int, std::vector<int>>* keep_indices);
|
||||
void Compute(const float* boxes, const float* scores,
|
||||
const std::vector<int64_t>& boxes_dim,
|
||||
const std::vector<int64_t>& scores_dim);
|
||||
};
|
||||
} // namespace backend
|
||||
|
||||
} // namespace fastdeploy
|
||||
89
3rdparty/include/fastdeploy/backends/ort/ops/adaptive_pool2d.h
vendored
Normal file
89
3rdparty/include/fastdeploy/backends/ort/ops/adaptive_pool2d.h
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
#include "fastdeploy/utils/utils.h"
|
||||
|
||||
#ifndef NON_64_PLATFORM
|
||||
#include "onnxruntime_cxx_api.h" // NOLINT
|
||||
|
||||
#ifdef WITH_GPU
|
||||
#include "fastdeploy/backends/op_cuda_kernels/adaptive_pool2d_kernel.h"
|
||||
#endif
|
||||
|
||||
namespace fastdeploy {
|
||||
struct AdaptivePool2dKernel {
|
||||
protected:
|
||||
std::string pooling_type_ = "avg";
|
||||
std::vector<int64_t> output_size_ = {};
|
||||
Ort::CustomOpApi ort_;
|
||||
void* compute_stream_;
|
||||
const char* provider_;
|
||||
|
||||
public:
|
||||
AdaptivePool2dKernel(Ort::CustomOpApi ort,
|
||||
const OrtKernelInfo* info,
|
||||
const char* provider)
|
||||
: ort_(ort) {
|
||||
GetAttribute(info);
|
||||
provider_ = provider;
|
||||
}
|
||||
|
||||
void GetAttribute(const OrtKernelInfo* info);
|
||||
|
||||
void Compute(OrtKernelContext* context);
|
||||
|
||||
void CpuAdaptivePool(const std::vector<int64_t>& input_size,
|
||||
const std::vector<int64_t>& output_size,
|
||||
const float* input_data,
|
||||
float* output_data);
|
||||
};
|
||||
|
||||
struct AdaptivePool2dOp
|
||||
: Ort::CustomOpBase<AdaptivePool2dOp, AdaptivePool2dKernel> {
|
||||
explicit AdaptivePool2dOp(const char* provider) : provider_(provider) {}
|
||||
void* CreateKernel(Ort::CustomOpApi api, const OrtKernelInfo* info) const {
|
||||
return new AdaptivePool2dKernel(api, info, provider_);
|
||||
}
|
||||
|
||||
const char* GetName() const { return "AdaptivePool2d"; }
|
||||
|
||||
size_t GetInputTypeCount() const { return 1; }
|
||||
|
||||
ONNXTensorElementDataType GetInputType(size_t index) const {
|
||||
return ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT;
|
||||
}
|
||||
|
||||
size_t GetOutputTypeCount() const { return 1; }
|
||||
|
||||
ONNXTensorElementDataType GetOutputType(size_t index) const {
|
||||
return ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT;
|
||||
}
|
||||
|
||||
const char* GetExecutionProviderType() const {
|
||||
return provider_;
|
||||
}
|
||||
private:
|
||||
const char* provider_;
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
|
||||
#endif
|
||||
81
3rdparty/include/fastdeploy/backends/ort/ops/multiclass_nms.h
vendored
Normal file
81
3rdparty/include/fastdeploy/backends/ort/ops/multiclass_nms.h
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
#ifndef NON_64_PLATFORM
|
||||
#include "onnxruntime_cxx_api.h" // NOLINT
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
struct MultiClassNmsKernel {
|
||||
protected:
|
||||
int64_t background_label = -1;
|
||||
int64_t keep_top_k = -1;
|
||||
float nms_eta;
|
||||
float nms_threshold = 0.7;
|
||||
int64_t nms_top_k;
|
||||
bool normalized;
|
||||
float score_threshold;
|
||||
Ort::CustomOpApi ort_;
|
||||
|
||||
public:
|
||||
MultiClassNmsKernel(Ort::CustomOpApi ort, const OrtKernelInfo* info)
|
||||
: ort_(ort) {
|
||||
GetAttribute(info);
|
||||
}
|
||||
|
||||
void GetAttribute(const OrtKernelInfo* info);
|
||||
|
||||
void Compute(OrtKernelContext* context);
|
||||
void FastNMS(const float* boxes, const float* scores, const int& num_boxes,
|
||||
std::vector<int>* keep_indices);
|
||||
int NMSForEachSample(const float* boxes, const float* scores, int num_boxes,
|
||||
int num_classes,
|
||||
std::map<int, std::vector<int>>* keep_indices);
|
||||
};
|
||||
|
||||
struct MultiClassNmsOp
|
||||
: Ort::CustomOpBase<MultiClassNmsOp, MultiClassNmsKernel> {
|
||||
void* CreateKernel(Ort::CustomOpApi api, const OrtKernelInfo* info) const {
|
||||
return new MultiClassNmsKernel(api, info);
|
||||
}
|
||||
|
||||
const char* GetName() const { return "MultiClassNMS"; }
|
||||
|
||||
size_t GetInputTypeCount() const { return 2; }
|
||||
|
||||
ONNXTensorElementDataType GetInputType(size_t index) const {
|
||||
return ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT;
|
||||
}
|
||||
|
||||
size_t GetOutputTypeCount() const { return 3; }
|
||||
|
||||
ONNXTensorElementDataType GetOutputType(size_t index) const {
|
||||
if (index == 0) {
|
||||
return ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT;
|
||||
}
|
||||
return ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32;
|
||||
}
|
||||
|
||||
const char* GetExecutionProviderType() const {
|
||||
return "CPUExecutionProvider";
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
|
||||
#endif
|
||||
99
3rdparty/include/fastdeploy/backends/ort/ort_backend.h
vendored
Normal file
99
3rdparty/include/fastdeploy/backends/ort/ort_backend.h
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fastdeploy/backends/backend.h"
|
||||
#include "onnxruntime_cxx_api.h" // NOLINT
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
struct OrtValueInfo {
|
||||
std::string name;
|
||||
std::vector<int64_t> shape;
|
||||
ONNXTensorElementDataType dtype;
|
||||
};
|
||||
|
||||
struct OrtBackendOption {
|
||||
// -1 means default
|
||||
// 0: ORT_DISABLE_ALL
|
||||
// 1: ORT_ENABLE_BASIC
|
||||
// 2: ORT_ENABLE_EXTENDED
|
||||
// 99: ORT_ENABLE_ALL (enable some custom optimizations e.g bert)
|
||||
int graph_optimization_level = -1;
|
||||
int intra_op_num_threads = -1;
|
||||
int inter_op_num_threads = -1;
|
||||
// 0: ORT_SEQUENTIAL
|
||||
// 1: ORT_PARALLEL
|
||||
int execution_mode = -1;
|
||||
bool use_gpu = false;
|
||||
int gpu_id = 0;
|
||||
void* external_stream_ = nullptr;
|
||||
|
||||
// inside parameter, maybe remove next version
|
||||
bool remove_multiclass_nms_ = false;
|
||||
std::map<std::string, std::string> custom_op_info_;
|
||||
};
|
||||
|
||||
class OrtBackend : public BaseBackend {
|
||||
public:
|
||||
OrtBackend() {}
|
||||
virtual ~OrtBackend() = default;
|
||||
|
||||
void BuildOption(const OrtBackendOption& option);
|
||||
|
||||
bool InitFromPaddle(const std::string& model_file,
|
||||
const std::string& params_file,
|
||||
const OrtBackendOption& option = OrtBackendOption(),
|
||||
bool verbose = false);
|
||||
|
||||
bool InitFromOnnx(const std::string& model_file,
|
||||
const OrtBackendOption& option = OrtBackendOption(),
|
||||
bool from_memory_buffer = false);
|
||||
|
||||
bool Infer(std::vector<FDTensor>& inputs,
|
||||
std::vector<FDTensor>* outputs,
|
||||
bool copy_to_fd = true) override;
|
||||
|
||||
int NumInputs() const override { return inputs_desc_.size(); }
|
||||
|
||||
int NumOutputs() const override { return outputs_desc_.size(); }
|
||||
|
||||
TensorInfo GetInputInfo(int index) override;
|
||||
TensorInfo GetOutputInfo(int index) override;
|
||||
std::vector<TensorInfo> GetInputInfos() override;
|
||||
std::vector<TensorInfo> GetOutputInfos() override;
|
||||
static std::vector<OrtCustomOp*> custom_operators_;
|
||||
void InitCustomOperators();
|
||||
|
||||
private:
|
||||
Ort::Env env_;
|
||||
Ort::Session session_{nullptr};
|
||||
Ort::SessionOptions session_options_;
|
||||
std::shared_ptr<Ort::IoBinding> binding_;
|
||||
std::vector<OrtValueInfo> inputs_desc_;
|
||||
std::vector<OrtValueInfo> outputs_desc_;
|
||||
#ifndef NON_64_PLATFORM
|
||||
Ort::CustomOpDomain custom_op_domain_ = Ort::CustomOpDomain("Paddle");
|
||||
#endif
|
||||
OrtBackendOption option_;
|
||||
void OrtValueToFDTensor(const Ort::Value& value, FDTensor* tensor,
|
||||
const std::string& name, bool copy_to_fd);
|
||||
};
|
||||
} // namespace fastdeploy
|
||||
39
3rdparty/include/fastdeploy/backends/ort/utils.h
vendored
Normal file
39
3rdparty/include/fastdeploy/backends/ort/utils.h
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fastdeploy/backends/backend.h"
|
||||
#include "onnxruntime_cxx_api.h" // NOLINT
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
// Convert FDDataType to OrtDataType
|
||||
ONNXTensorElementDataType GetOrtDtype(const FDDataType& fd_dtype);
|
||||
|
||||
// Convert OrtDataType to FDDataType
|
||||
FDDataType GetFdDtype(const ONNXTensorElementDataType& ort_dtype);
|
||||
|
||||
// Create Ort::Value
|
||||
// is_backend_cuda specify if the onnxruntime use CUDAExectionProvider
|
||||
// While is_backend_cuda = true, and tensor.device = Device::GPU
|
||||
// Will directly share the cuda data in tensor to OrtValue
|
||||
Ort::Value CreateOrtValue(FDTensor& tensor, bool is_backend_cuda = false);
|
||||
|
||||
} // namespace fastdeploy
|
||||
104
3rdparty/include/fastdeploy/backends/rknpu/rknpu2/rknpu2_backend.h
vendored
Normal file
104
3rdparty/include/fastdeploy/backends/rknpu/rknpu2/rknpu2_backend.h
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/backends/backend.h"
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
#include "rknn_api.h" // NOLINT
|
||||
#include "fastdeploy/backends/rknpu/rknpu2/rknpu2_config.h"
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace fastdeploy {
|
||||
struct RKNPU2BackendOption {
|
||||
rknpu2::CpuName cpu_name = rknpu2::CpuName::RK3588;
|
||||
|
||||
// The specification of NPU core setting.It has the following choices :
|
||||
// RKNN_NPU_CORE_AUTO : Referring to automatic mode, meaning that it will
|
||||
// select the idle core inside the NPU.
|
||||
// RKNN_NPU_CORE_0 : Running on the NPU0 core
|
||||
// RKNN_NPU_CORE_1: Runing on the NPU1 core
|
||||
// RKNN_NPU_CORE_2: Runing on the NPU2 core
|
||||
// RKNN_NPU_CORE_0_1: Running on both NPU0 and NPU1 core simultaneously.
|
||||
// RKNN_NPU_CORE_0_1_2: Running on both NPU0, NPU1 and NPU2 simultaneously.
|
||||
rknpu2::CoreMask core_mask = rknpu2::CoreMask::RKNN_NPU_CORE_AUTO;
|
||||
};
|
||||
|
||||
class RKNPU2Backend : public BaseBackend {
|
||||
public:
|
||||
RKNPU2Backend() = default;
|
||||
|
||||
virtual ~RKNPU2Backend();
|
||||
|
||||
// RKNN API
|
||||
bool LoadModel(void* model);
|
||||
|
||||
bool GetSDKAndDeviceVersion();
|
||||
|
||||
bool SetCoreMask(rknpu2::CoreMask& core_mask) const;
|
||||
|
||||
bool GetModelInputOutputInfos();
|
||||
|
||||
// BaseBackend API
|
||||
void BuildOption(const RKNPU2BackendOption& option);
|
||||
|
||||
bool InitFromRKNN(const std::string& model_file,
|
||||
const RKNPU2BackendOption& option = RKNPU2BackendOption());
|
||||
|
||||
int NumInputs() const override {
|
||||
return static_cast<int>(inputs_desc_.size());
|
||||
}
|
||||
|
||||
int NumOutputs() const override {
|
||||
return static_cast<int>(outputs_desc_.size());
|
||||
}
|
||||
|
||||
TensorInfo GetInputInfo(int index) override;
|
||||
TensorInfo GetOutputInfo(int index) override;
|
||||
std::vector<TensorInfo> GetInputInfos() override;
|
||||
std::vector<TensorInfo> GetOutputInfos() override;
|
||||
bool Infer(std::vector<FDTensor>& inputs,
|
||||
std::vector<FDTensor>* outputs,
|
||||
bool copy_to_fd = true) override;
|
||||
|
||||
private:
|
||||
// The object of rknn context.
|
||||
rknn_context ctx{};
|
||||
// The structure rknn_sdk_version is used to indicate the version
|
||||
// information of the RKNN SDK.
|
||||
rknn_sdk_version sdk_ver{};
|
||||
// The structure rknn_input_output_num represents the number of
|
||||
// input and output Tensor
|
||||
rknn_input_output_num io_num{};
|
||||
std::vector<TensorInfo> inputs_desc_;
|
||||
std::vector<TensorInfo> outputs_desc_;
|
||||
|
||||
rknn_tensor_attr* input_attrs_ = nullptr;
|
||||
rknn_tensor_attr* output_attrs_ = nullptr;
|
||||
|
||||
rknn_tensor_mem** input_mems_;
|
||||
rknn_tensor_mem** output_mems_;
|
||||
|
||||
bool infer_init = false;
|
||||
|
||||
RKNPU2BackendOption option_;
|
||||
|
||||
static void DumpTensorAttr(rknn_tensor_attr& attr);
|
||||
static FDDataType RknnTensorTypeToFDDataType(rknn_tensor_type type);
|
||||
static rknn_tensor_type FDDataTypeToRknnTensorType(FDDataType type);
|
||||
};
|
||||
} // namespace fastdeploy
|
||||
37
3rdparty/include/fastdeploy/backends/rknpu/rknpu2/rknpu2_config.h
vendored
Normal file
37
3rdparty/include/fastdeploy/backends/rknpu/rknpu2/rknpu2_config.h
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace rknpu2 {
|
||||
typedef enum _rknpu2_cpu_name {
|
||||
RK356X = 0, /* run on RK356X. */
|
||||
RK3588 = 1, /* default,run on RK3588. */
|
||||
UNDEFINED,
|
||||
} CpuName;
|
||||
|
||||
/*! RKNPU2 core mask for mobile device. */
|
||||
typedef enum _rknpu2_core_mask {
|
||||
RKNN_NPU_CORE_AUTO = 0, //< default, run on NPU core randomly.
|
||||
RKNN_NPU_CORE_0 = 1, //< run on NPU core 0.
|
||||
RKNN_NPU_CORE_1 = 2, //< run on NPU core 1.
|
||||
RKNN_NPU_CORE_2 = 4, //< run on NPU core 2.
|
||||
RKNN_NPU_CORE_0_1 =
|
||||
RKNN_NPU_CORE_0 | RKNN_NPU_CORE_1, //< run on NPU core 1 and core 2.
|
||||
RKNN_NPU_CORE_0_1_2 =
|
||||
RKNN_NPU_CORE_0_1 | RKNN_NPU_CORE_2, //< run on NPU core 1 and core 2.
|
||||
RKNN_NPU_CORE_UNDEFINED,
|
||||
} CoreMask;
|
||||
} // namespace rknpu2
|
||||
} // namespace fastdeploy
|
||||
60
3rdparty/include/fastdeploy/core/allocate.h
vendored
Normal file
60
3rdparty/include/fastdeploy/core/allocate.h
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <new>
|
||||
#include <numeric>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fastdeploy/utils/utils.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
class FASTDEPLOY_DECL FDHostAllocator {
|
||||
public:
|
||||
bool operator()(void** ptr, size_t size) const;
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL FDHostFree {
|
||||
public:
|
||||
void operator()(void* ptr) const;
|
||||
};
|
||||
|
||||
#ifdef WITH_GPU
|
||||
|
||||
class FASTDEPLOY_DECL FDDeviceAllocator {
|
||||
public:
|
||||
bool operator()(void** ptr, size_t size) const;
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL FDDeviceFree {
|
||||
public:
|
||||
void operator()(void* ptr) const;
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL FDDeviceHostAllocator {
|
||||
public:
|
||||
bool operator()(void** ptr, size_t size) const;
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL FDDeviceHostFree {
|
||||
public:
|
||||
void operator()(void* ptr) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace fastdeploy
|
||||
72
3rdparty/include/fastdeploy/core/config.h
vendored
Normal file
72
3rdparty/include/fastdeploy/core/config.h
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#ifndef FASTDEPLOY_LIB
|
||||
/* #undef FASTDEPLOY_LIB */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_PADDLE_FRONTEND
|
||||
/* #undef ENABLE_PADDLE_FRONTEND */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_ORT_BACKEND
|
||||
#define ENABLE_ORT_BACKEND
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_PADDLE_BACKEND
|
||||
/* #undef ENABLE_PADDLE_BACKEND */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_POROS_BACKEND
|
||||
/* #undef ENABLE_POROS_BACKEND */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_OPENVINO_BACKEND
|
||||
/* #undef ENABLE_OPENVINO_BACKEND */
|
||||
#endif
|
||||
|
||||
#ifndef WITH_GPU
|
||||
/* #undef WITH_GPU */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_TRT_BACKEND
|
||||
/* #undef ENABLE_TRT_BACKEND */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_VISION
|
||||
#define ENABLE_VISION
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_FLYCV
|
||||
/* #undef ENABLE_FLYCV */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_TEXT
|
||||
/* #undef ENABLE_TEXT */
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_OPENCV_CUDA
|
||||
/* #undef ENABLE_OPENCV_CUDA */
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VISION
|
||||
#ifndef ENABLE_VISION_VISUALIZE
|
||||
#define ENABLE_VISION_VISUALIZE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_FDTENSOR_FUNC
|
||||
/* #undef ENABLE_FDTENSOR_FUNC */
|
||||
#endif
|
||||
121
3rdparty/include/fastdeploy/core/fd_scalar.h
vendored
Normal file
121
3rdparty/include/fastdeploy/core/fd_scalar.h
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <limits>
|
||||
|
||||
#include "fastdeploy/core/fd_type.h"
|
||||
#include "fastdeploy/core/float16.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
class Scalar {
|
||||
public:
|
||||
// Constructor support implicit
|
||||
Scalar() : Scalar(0) {}
|
||||
Scalar(double val) : dtype_(FDDataType::FP64) { // NOLINT
|
||||
data_.f64 = val;
|
||||
}
|
||||
|
||||
Scalar(float val) : dtype_(FDDataType::FP32) { // NOLINT
|
||||
data_.f32 = val;
|
||||
}
|
||||
|
||||
Scalar(float16 val) : dtype_(FDDataType::FP16) { // NOLINT
|
||||
data_.f16 = val;
|
||||
}
|
||||
|
||||
Scalar(int64_t val) : dtype_(FDDataType::INT64) { // NOLINT
|
||||
data_.i64 = val;
|
||||
}
|
||||
|
||||
Scalar(int32_t val) : dtype_(FDDataType::INT32) { // NOLINT
|
||||
data_.i32 = val;
|
||||
}
|
||||
|
||||
Scalar(int16_t val) : dtype_(FDDataType::INT16) { // NOLINT
|
||||
data_.i16 = val;
|
||||
}
|
||||
|
||||
Scalar(int8_t val) : dtype_(FDDataType::INT8) { // NOLINT
|
||||
data_.i8 = val;
|
||||
}
|
||||
|
||||
Scalar(uint8_t val) : dtype_(FDDataType::UINT8) { // NOLINT
|
||||
data_.ui8 = val;
|
||||
}
|
||||
|
||||
Scalar(bool val) : dtype_(FDDataType::BOOL) { // NOLINT
|
||||
data_.b = val;
|
||||
}
|
||||
|
||||
// The compatible method for fliud operators,
|
||||
// and it will be removed in the future.
|
||||
explicit Scalar(const std::string& str_value) : dtype_(FDDataType::FP64) {
|
||||
if (str_value == "inf") {
|
||||
data_.f64 = std::numeric_limits<double>::infinity();
|
||||
} else if (str_value == "-inf") {
|
||||
data_.f64 = -std::numeric_limits<double>::infinity();
|
||||
} else if (str_value == "nan") {
|
||||
data_.f64 = std::numeric_limits<double>::quiet_NaN();
|
||||
} else {
|
||||
data_.f64 = std::stod(str_value);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename RT> inline RT to() const {
|
||||
switch (dtype_) {
|
||||
case FDDataType::FP32:
|
||||
return static_cast<RT>(data_.f32);
|
||||
case FDDataType::FP64:
|
||||
return static_cast<RT>(data_.f64);
|
||||
case FDDataType::FP16:
|
||||
return static_cast<RT>(data_.f16);
|
||||
case FDDataType::INT32:
|
||||
return static_cast<RT>(data_.i32);
|
||||
case FDDataType::INT64:
|
||||
return static_cast<RT>(data_.i64);
|
||||
case FDDataType::INT16:
|
||||
return static_cast<RT>(data_.i16);
|
||||
case FDDataType::INT8:
|
||||
return static_cast<RT>(data_.i8);
|
||||
case FDDataType::UINT8:
|
||||
return static_cast<RT>(data_.ui8);
|
||||
case FDDataType::BOOL:
|
||||
return static_cast<RT>(data_.b);
|
||||
default:
|
||||
FDASSERT(false, "Invalid enum scalar data type `%s`.",
|
||||
Str(dtype_).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
FDDataType dtype() const { return dtype_; }
|
||||
|
||||
private:
|
||||
FDDataType dtype_;
|
||||
union data {
|
||||
bool b;
|
||||
int8_t i8;
|
||||
int16_t i16;
|
||||
int32_t i32;
|
||||
int64_t i64;
|
||||
uint8_t ui8;
|
||||
float16 f16;
|
||||
float f32;
|
||||
double f64;
|
||||
} data_;
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
153
3rdparty/include/fastdeploy/core/fd_tensor.h
vendored
Normal file
153
3rdparty/include/fastdeploy/core/fd_tensor.h
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fastdeploy/core/allocate.h"
|
||||
#include "fastdeploy/core/fd_scalar.h"
|
||||
#include "fastdeploy/core/fd_type.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
struct FASTDEPLOY_DECL FDTensor {
|
||||
// std::vector<int8_t> data;
|
||||
void* buffer_ = nullptr;
|
||||
std::vector<int64_t> shape = {0};
|
||||
std::string name = "";
|
||||
FDDataType dtype = FDDataType::INT8;
|
||||
|
||||
// This use to skip memory copy step
|
||||
// the external_data_ptr will point to the user allocated memory
|
||||
// user has to maintain the memory, allocate and release
|
||||
void* external_data_ptr = nullptr;
|
||||
// The internal data will be on CPU
|
||||
// Some times, the external data is on the GPU, and we are going to use
|
||||
// GPU to inference the model
|
||||
// so we can skip data transfer, which may improve the efficience
|
||||
Device device = Device::CPU;
|
||||
// By default the device id of FDTensor is -1, which means this value is
|
||||
// invalid, and FDTensor is using the same device id as Runtime.
|
||||
int device_id = -1;
|
||||
|
||||
// Whether the data buffer is in pinned memory, which is allocated
|
||||
// with cudaMallocHost()
|
||||
bool is_pinned_memory = false;
|
||||
|
||||
// if the external data is not on CPU, we use this temporary buffer
|
||||
// to transfer data to CPU at some cases we need to visit the
|
||||
// other devices' data
|
||||
std::vector<int8_t> temporary_cpu_buffer;
|
||||
|
||||
// Get data buffer pointer
|
||||
void* MutableData();
|
||||
|
||||
void* Data();
|
||||
|
||||
bool IsShared() { return external_data_ptr != nullptr; }
|
||||
|
||||
void StopSharing();
|
||||
|
||||
const void* Data() const;
|
||||
|
||||
// Use this data to get the tensor data to process
|
||||
// Since the most senario is process data in CPU
|
||||
// this function will return a pointer to cpu memory
|
||||
// buffer.
|
||||
// If the original data is on other device, the data
|
||||
// will copy to cpu store in `temporary_cpu_buffer`
|
||||
const void* CpuData() const;
|
||||
|
||||
// Set user memory buffer for Tensor, the memory is managed by
|
||||
// the user it self, but the Tensor will share the memory with user
|
||||
// So take care with the user buffer
|
||||
void SetExternalData(const std::vector<int64_t>& new_shape,
|
||||
const FDDataType& data_type, void* data_buffer,
|
||||
const Device& new_device = Device::CPU,
|
||||
int new_device_id = -1);
|
||||
|
||||
// Expand the shape of a Tensor. Insert a new axis that will appear
|
||||
// at the `axis` position in the expanded Tensor shape.
|
||||
void ExpandDim(int64_t axis = 0);
|
||||
|
||||
// Squeeze the shape of a Tensor. Erase the axis that will appear
|
||||
// at the `axis` position in the squeezed Tensor shape.
|
||||
void Squeeze(int64_t axis = 0);
|
||||
|
||||
// Initialize Tensor
|
||||
// Include setting attribute for tensor
|
||||
// and allocate cpu memory buffer
|
||||
void Allocate(const std::vector<int64_t>& new_shape,
|
||||
const FDDataType& data_type,
|
||||
const std::string& tensor_name = "",
|
||||
const Device& new_device = Device::CPU);
|
||||
|
||||
// Total size of tensor memory buffer in bytes
|
||||
int Nbytes() const;
|
||||
|
||||
// Total number of elements in this tensor
|
||||
int Numel() const;
|
||||
|
||||
// Get shape of FDTensor
|
||||
std::vector<int64_t> Shape() const { return shape; }
|
||||
|
||||
// Get dtype of FDTensor
|
||||
FDDataType Dtype() const { return dtype; }
|
||||
|
||||
void Resize(size_t nbytes);
|
||||
|
||||
void Resize(const std::vector<int64_t>& new_shape);
|
||||
|
||||
void Resize(const std::vector<int64_t>& new_shape,
|
||||
const FDDataType& data_type, const std::string& tensor_name = "",
|
||||
const Device& new_device = Device::CPU);
|
||||
|
||||
bool Reshape(const std::vector<int64_t>& new_shape);
|
||||
// Debug function
|
||||
// Use this function to print shape, dtype, mean, max, min
|
||||
// prefix will also be printed as tag
|
||||
void PrintInfo(const std::string& prefix = "TensorInfo: ") const;
|
||||
|
||||
bool ReallocFn(size_t nbytes);
|
||||
|
||||
void FreeFn();
|
||||
|
||||
FDTensor() {}
|
||||
explicit FDTensor(const std::string& tensor_name);
|
||||
explicit FDTensor(const char* tensor_name);
|
||||
|
||||
// Deep copy
|
||||
FDTensor(const FDTensor& other);
|
||||
// Move constructor
|
||||
FDTensor(FDTensor&& other);
|
||||
|
||||
// Deep copy assignment
|
||||
FDTensor& operator=(const FDTensor& other);
|
||||
// Move assignment
|
||||
FDTensor& operator=(FDTensor&& other);
|
||||
|
||||
// Scalar to FDTensor
|
||||
explicit FDTensor(const Scalar& scalar);
|
||||
|
||||
~FDTensor() { FreeFn(); }
|
||||
|
||||
static void CopyBuffer(void* dst, const void* src, size_t nbytes,
|
||||
const Device& device = Device::CPU,
|
||||
bool is_pinned_memory = false);
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
80
3rdparty/include/fastdeploy/core/fd_type.h
vendored
Normal file
80
3rdparty/include/fastdeploy/core/fd_type.h
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include <ostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include "fastdeploy/core/config.h"
|
||||
#include "fastdeploy/utils/utils.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
enum FASTDEPLOY_DECL Device { CPU, GPU, RKNPU, IPU, TIMVX};
|
||||
|
||||
FASTDEPLOY_DECL std::string Str(const Device& d);
|
||||
|
||||
enum FASTDEPLOY_DECL FDDataType {
|
||||
BOOL,
|
||||
INT16,
|
||||
INT32,
|
||||
INT64,
|
||||
FP16,
|
||||
FP32,
|
||||
FP64,
|
||||
UNKNOWN1,
|
||||
UNKNOWN2,
|
||||
UNKNOWN3,
|
||||
UNKNOWN4,
|
||||
UNKNOWN5,
|
||||
UNKNOWN6,
|
||||
UNKNOWN7,
|
||||
UNKNOWN8,
|
||||
UNKNOWN9,
|
||||
UNKNOWN10,
|
||||
UNKNOWN11,
|
||||
UNKNOWN12,
|
||||
UNKNOWN13,
|
||||
UINT8,
|
||||
INT8
|
||||
};
|
||||
|
||||
FASTDEPLOY_DECL std::ostream& operator<<(std::ostream& out, const Device& d);
|
||||
|
||||
FASTDEPLOY_DECL std::ostream& operator<<(std::ostream& out,
|
||||
const FDDataType& fdt);
|
||||
|
||||
FASTDEPLOY_DECL std::string Str(const FDDataType& fdt);
|
||||
|
||||
FASTDEPLOY_DECL int32_t FDDataTypeSize(const FDDataType& data_dtype);
|
||||
|
||||
template <typename PlainType>
|
||||
struct FASTDEPLOY_DECL TypeToDataType {
|
||||
static const FDDataType dtype;
|
||||
};
|
||||
|
||||
/*! Deep learning model format */
|
||||
enum ModelFormat {
|
||||
AUTOREC, ///< Auto recognize the model format by model file name
|
||||
PADDLE, ///< Model with paddlepaddle format
|
||||
ONNX, ///< Model with ONNX format
|
||||
RKNN, ///< Model with RKNN format
|
||||
TORCHSCRIPT, ///< Model with TorchScript format
|
||||
};
|
||||
|
||||
FASTDEPLOY_DECL std::ostream& operator<<(std::ostream& out,
|
||||
const ModelFormat& format);
|
||||
|
||||
} // namespace fastdeploy
|
||||
665
3rdparty/include/fastdeploy/core/float16.h
vendored
Normal file
665
3rdparty/include/fastdeploy/core/float16.h
vendored
Normal file
@@ -0,0 +1,665 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#define FD_ALIGN(x) __attribute__((aligned(x)))
|
||||
#else
|
||||
#define FD_ALIGN(x) __declspec(align(x))
|
||||
#endif
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
struct FD_ALIGN(2) float16 {
|
||||
public:
|
||||
uint16_t x;
|
||||
|
||||
// The following defaulted special class member functions
|
||||
// are added to make float16 pass the std::is_trivial test
|
||||
float16() = default;
|
||||
float16(const float16& o) = default;
|
||||
float16& operator=(const float16& o) = default;
|
||||
float16(float16&& o) = default;
|
||||
float16& operator=(float16&& o) = default;
|
||||
~float16() = default;
|
||||
|
||||
// Constructors
|
||||
|
||||
#ifdef FD_WITH_NATIVE_FP16
|
||||
// __fp16 is a native half precision data type for arm cpu,
|
||||
// float16_t is an alias for __fp16
|
||||
inline explicit float16(const float16_t& h) {
|
||||
x = *reinterpret_cast<const uint16_t*>(&h);
|
||||
}
|
||||
#endif
|
||||
|
||||
inline explicit float16(float val) {
|
||||
#if defined(FD_WITH_NATIVE_FP16)
|
||||
float32x4_t tmp = vld1q_dup_f32(&val);
|
||||
float16_t res = vget_lane_f16(vcvt_f16_f32(tmp), 0);
|
||||
x = *reinterpret_cast<uint16_t*>(&res);
|
||||
|
||||
#elif defined(__F16C__)
|
||||
x = _cvtss_sh(val, 0);
|
||||
|
||||
#else
|
||||
// Conversion routine adapted from
|
||||
// http://stackoverflow.com/questions/1659440/32-bit-to-16-bit-floating-point-conversion
|
||||
Bits v, s;
|
||||
v.f = val;
|
||||
uint32_t sign = v.si & sigN;
|
||||
v.si ^= sign;
|
||||
sign >>= shiftSign; // logical shift
|
||||
s.si = mulN;
|
||||
s.si = s.f * v.f; // correct subnormals
|
||||
v.si ^= (s.si ^ v.si) & -(minN > v.si);
|
||||
v.si ^= (infN ^ v.si) & -((infN > v.si) & (v.si > maxN));
|
||||
v.si ^= (nanN ^ v.si) & -((nanN > v.si) & (v.si > infN));
|
||||
v.ui >>= shift; // logical shift
|
||||
v.si ^= ((v.si - maxD) ^ v.si) & -(v.si > maxC);
|
||||
v.si ^= ((v.si - minD) ^ v.si) & -(v.si > subC);
|
||||
x = v.ui | sign;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
inline explicit float16(bool b) : x(b ? 0x3c00 : 0) {}
|
||||
|
||||
template <class T>
|
||||
inline explicit float16(const T& val)
|
||||
: x(float16(static_cast<float>(val)).x) {}
|
||||
|
||||
// Assignment operators
|
||||
|
||||
#ifdef FD_WITH_NATIVE_FP16
|
||||
inline float16& operator=(const float16_t& rhs) {
|
||||
x = *reinterpret_cast<const uint16_t*>(&rhs);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline float16& operator=(bool b) {
|
||||
x = b ? 0x3c00 : 0;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(int8_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(uint8_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(int16_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(uint16_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(int32_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(uint32_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(int64_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(uint64_t val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(float val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline float16& operator=(double val) {
|
||||
x = float16(val).x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Conversion opertors
|
||||
#ifdef FD_WITH_NATIVE_FP16
|
||||
HOSTDEVICE inline explicit operator float16_t() const {
|
||||
return *reinterpret_cast<const float16_t*>(this);
|
||||
}
|
||||
#endif
|
||||
|
||||
inline operator float() const {
|
||||
#if defined(FD_WITH_NATIVE_FP16)
|
||||
float16x4_t res = vld1_dup_f16(reinterpret_cast<const float16_t*>(this));
|
||||
return vgetq_lane_f32(vcvt_f32_f16(res), 0);
|
||||
|
||||
#elif defined(__F16C__)
|
||||
return _cvtsh_ss(this->x);
|
||||
|
||||
#else
|
||||
// Conversion routine adapted from
|
||||
// http://stackoverflow.com/questions/1659440/32-bit-to-16-bit-floating-point-conversion
|
||||
Bits v;
|
||||
v.ui = this->x;
|
||||
int32_t sign = v.si & sigC;
|
||||
v.si ^= sign;
|
||||
sign <<= shiftSign;
|
||||
v.si ^= ((v.si + minD) ^ v.si) & -(v.si > subC);
|
||||
v.si ^= ((v.si + maxD) ^ v.si) & -(v.si > maxC);
|
||||
Bits s;
|
||||
s.si = mulC;
|
||||
s.f *= v.si;
|
||||
int32_t mask = -(norC > v.si);
|
||||
v.si <<= shift;
|
||||
v.si ^= (s.si ^ v.si) & mask;
|
||||
v.si |= sign;
|
||||
return v.f;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
inline explicit operator bool() const { return (x & 0x7fff) != 0; }
|
||||
|
||||
inline explicit operator int8_t() const {
|
||||
return static_cast<int8_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator uint8_t() const {
|
||||
return static_cast<uint8_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator int16_t() const {
|
||||
return static_cast<int16_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator uint16_t() const {
|
||||
return static_cast<uint16_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator int32_t() const {
|
||||
return static_cast<int32_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator uint32_t() const {
|
||||
return static_cast<uint32_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator int64_t() const {
|
||||
return static_cast<int64_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline explicit operator uint64_t() const {
|
||||
return static_cast<uint64_t>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline operator double() const {
|
||||
return static_cast<double>(static_cast<float>(*this));
|
||||
}
|
||||
|
||||
inline bool operator>(const float& other) const {
|
||||
return this->operator float() > other;
|
||||
}
|
||||
|
||||
inline bool operator>(const double& other) const {
|
||||
return this->operator double() > other;
|
||||
}
|
||||
|
||||
inline bool operator<(const float& other) const {
|
||||
return this->operator float() > other;
|
||||
}
|
||||
|
||||
inline bool operator<(const double& other) const {
|
||||
return this->operator double() > other;
|
||||
}
|
||||
|
||||
template <typename T,
|
||||
typename std::enable_if<!std::is_same<T, float16>::value,
|
||||
bool>::type = true>
|
||||
inline float16& operator+=(const T& other) {
|
||||
*this = float16(static_cast<T>(*this) + other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
union Bits {
|
||||
float f;
|
||||
int32_t si;
|
||||
uint32_t ui;
|
||||
};
|
||||
|
||||
static const int shift = 13;
|
||||
static const int shiftSign = 16;
|
||||
|
||||
static const int32_t infN = 0x7F800000;
|
||||
static const int32_t maxN = 0x477FE000; // max flt16 as flt32
|
||||
static const int32_t minN = 0x38800000; // min flt16 normal as flt32
|
||||
static const int32_t sigN = 0x80000000; // sign bit
|
||||
|
||||
static constexpr int32_t infC = infN >> shift;
|
||||
static constexpr int32_t nanN = (infC + 1)
|
||||
<< shift; // minimum flt16 nan as float32
|
||||
static constexpr int32_t maxC = maxN >> shift;
|
||||
static constexpr int32_t minC = minN >> shift;
|
||||
static constexpr int32_t sigC = sigN >> shiftSign;
|
||||
|
||||
static const int32_t mulN = 0x52000000; // (1 << 23) / minN
|
||||
static const int32_t mulC = 0x33800000; // minN / (1 << (23 - shift))
|
||||
static const int32_t subC = 0x003FF; // max flt32 subnormal downshifted
|
||||
static const int32_t norC = 0x00400; // min flt32 normal downshifted
|
||||
|
||||
static constexpr int32_t maxD = infC - maxC - 1;
|
||||
static constexpr int32_t minD = minC - subC - 1;
|
||||
};
|
||||
|
||||
// Arithmetic operators for float16 on ARMv8.2-A CPU
|
||||
#if defined(FD_WITH_NATIVE_FP16)
|
||||
inline float16 operator+(const float16& a, const float16& b) {
|
||||
float16 res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fadd h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&(res.x))
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16 operator-(const float16& a, const float16& b) {
|
||||
float16 res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fsub h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&(res.x))
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16 operator*(const float16& a, const float16& b) {
|
||||
float16 res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fmul h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&(res.x))
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16 operator/(const float16& a, const float16& b) {
|
||||
float16 res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fdiv h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&(res.x))
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16 operator-(const float16& a) {
|
||||
float16 res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"fneg h0, h0\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)),
|
||||
[res_ptr] "r"(&(res.x))
|
||||
: // clobbers
|
||||
"memory", "v0");
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16& operator+=(float16& a, const float16& b) { // NOLINT
|
||||
a = a + b;
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator-=(float16& a, const float16& b) { // NOLINT
|
||||
a = a - b;
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator*=(float16& a, const float16& b) { // NOLINT
|
||||
a = a * b;
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator/=(float16& a, const float16& b) { // NOLINT
|
||||
a = a / b;
|
||||
return a;
|
||||
}
|
||||
|
||||
inline bool operator==(const float16& a, const float16& b) {
|
||||
uint16_t res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fcmeq h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&res)
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return (res & 0xffff) != 0;
|
||||
}
|
||||
|
||||
inline bool operator!=(const float16& a, const float16& b) { return !(a == b); }
|
||||
|
||||
inline bool operator<(const float16& a, const float16& b) {
|
||||
uint16_t res;
|
||||
asm volatile(
|
||||
"ld1 {v1.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v0.h}[0], [%[b_ptr]]\n"
|
||||
"fcmgt h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&res)
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return (res & 0xffff) != 0;
|
||||
}
|
||||
|
||||
inline bool operator<=(const float16& a, const float16& b) {
|
||||
uint16_t res;
|
||||
asm volatile(
|
||||
"ld1 {v1.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v0.h}[0], [%[b_ptr]]\n"
|
||||
"fcmge h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&res)
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return (res & 0xffff) != 0;
|
||||
}
|
||||
|
||||
inline bool operator>(const float16& a, const float16& b) {
|
||||
uint16_t res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fcmgt h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&res)
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return (res & 0xffff) != 0;
|
||||
}
|
||||
|
||||
inline bool operator>=(const float16& a, const float16& b) {
|
||||
uint16_t res;
|
||||
asm volatile(
|
||||
"ld1 {v0.h}[0], [%[a_ptr]]\n"
|
||||
"ld1 {v1.h}[0], [%[b_ptr]]\n"
|
||||
"fcmge h0, h0, h1\n"
|
||||
"st1 {v0.h}[0], [%[res_ptr]]\n"
|
||||
: // outputs
|
||||
: // inputs
|
||||
[a_ptr] "r"(&(a.x)), [b_ptr] "r"(&(b.x)),
|
||||
[res_ptr] "r"(&res)
|
||||
: // clobbers
|
||||
"memory", "v0", "v1");
|
||||
return (res & 0xffff) != 0;
|
||||
#else
|
||||
inline float16 operator+(const float16& a, const float16& b) {
|
||||
return float16(static_cast<float>(a) + static_cast<float>(b));
|
||||
}
|
||||
|
||||
inline float16 operator-(const float16& a, const float16& b) {
|
||||
return float16(static_cast<float>(a) - static_cast<float>(b));
|
||||
}
|
||||
|
||||
inline float16 operator*(const float16& a, const float16& b) {
|
||||
return float16(static_cast<float>(a) * static_cast<float>(b));
|
||||
}
|
||||
|
||||
inline float16 operator/(const float16& a, const float16& b) {
|
||||
return float16(static_cast<float>(a) / static_cast<float>(b));
|
||||
}
|
||||
|
||||
inline float16 operator-(const float16& a) {
|
||||
float16 res;
|
||||
res.x = a.x ^ 0x8000;
|
||||
return res;
|
||||
}
|
||||
|
||||
inline float16& operator+=(float16& a, const float16& b) { // NOLINT
|
||||
a = float16(static_cast<float>(a) + static_cast<float>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator-=(float16& a, const float16& b) { // NOLINT
|
||||
a = float16(static_cast<float>(a) - static_cast<float>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator*=(float16& a, const float16& b) { // NOLINT
|
||||
a = float16(static_cast<float>(a) * static_cast<float>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16& operator/=(float16& a, const float16& b) { // NOLINT
|
||||
a = float16(static_cast<float>(a) / static_cast<float>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
inline bool operator==(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) == static_cast<float>(b);
|
||||
}
|
||||
|
||||
inline bool operator!=(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) != static_cast<float>(b);
|
||||
}
|
||||
|
||||
inline bool operator<(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) < static_cast<float>(b);
|
||||
}
|
||||
|
||||
inline bool operator<=(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) <= static_cast<float>(b);
|
||||
}
|
||||
|
||||
inline bool operator>(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) > static_cast<float>(b);
|
||||
}
|
||||
|
||||
inline bool operator>=(const float16& a, const float16& b) {
|
||||
return static_cast<float>(a) >= static_cast<float>(b);
|
||||
}
|
||||
#endif
|
||||
|
||||
template <typename T,
|
||||
typename std::enable_if<std::is_integral<T>::value ||
|
||||
std::is_same<T, float>::value,
|
||||
bool>::type = true>
|
||||
inline T& operator+=(T& a, const float16& b) { // NOLINT
|
||||
auto c = static_cast<float>(a) + static_cast<float>(b);
|
||||
a = static_cast<T>(c);
|
||||
return a;
|
||||
}
|
||||
|
||||
inline double& operator+=(double& a, const float16& b) { // NOLINT
|
||||
a = a + static_cast<double>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
inline float16 raw_uint16_to_float16(uint16_t a) {
|
||||
float16 res;
|
||||
res.x = a;
|
||||
return res;
|
||||
}
|
||||
|
||||
inline bool(isnan)(const float16& a) { return (a.x & 0x7fff) > 0x7c00; }
|
||||
|
||||
inline bool(isinf)(const float16& a) { return (a.x & 0x7fff) == 0x7c00; }
|
||||
|
||||
inline bool(isfinite)(const float16& a) {
|
||||
return !((isnan)(a)) && !((isinf)(a));
|
||||
}
|
||||
|
||||
inline float16(abs)(const float16& a) {
|
||||
return float16(std::abs(static_cast<float>(a)));
|
||||
}
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& os, const float16& a) {
|
||||
os << static_cast<float>(a);
|
||||
return os;
|
||||
}
|
||||
} // namespace fastdeploy
|
||||
|
||||
namespace std {
|
||||
|
||||
// Override the std::is_pod::value for float16
|
||||
// The reason is that different compilers implemented std::is_pod based on
|
||||
// different C++ standards. float16 class is a plain old data in C++11 given
|
||||
// that it is both trivial and standard_layout.
|
||||
// However, std::is_pod in nvcc 8.0 host c++ compiler follows C++0x and is
|
||||
// more restricted in that you cannot provide any customized
|
||||
// constructor in float16. Hence, we override is_pod here following C++11
|
||||
// so that .cu files can be successfully compiled by nvcc.
|
||||
template <>
|
||||
struct is_pod<fastdeploy::float16> {
|
||||
static const bool value = is_trivial<fastdeploy::float16>::value &&
|
||||
is_standard_layout<fastdeploy::float16>::value;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct is_floating_point<fastdeploy::float16>
|
||||
: std::integral_constant<
|
||||
bool, std::is_same<fastdeploy::float16,
|
||||
typename std::remove_cv<
|
||||
fastdeploy::float16>::type>::value> {};
|
||||
template <>
|
||||
struct is_signed<fastdeploy::float16> {
|
||||
static const bool value = true;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct is_unsigned<fastdeploy::float16> {
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
inline bool isnan(const fastdeploy::float16& a) { return fastdeploy::isnan(a); }
|
||||
|
||||
inline bool isinf(const fastdeploy::float16& a) { return fastdeploy::isinf(a); }
|
||||
|
||||
template <>
|
||||
struct numeric_limits<fastdeploy::float16> {
|
||||
static const bool is_specialized = true;
|
||||
static const bool is_signed = true;
|
||||
static const bool is_integer = false;
|
||||
static const bool is_exact = false;
|
||||
static const bool has_infinity = true;
|
||||
static const bool has_quiet_NaN = true;
|
||||
static const bool has_signaling_NaN = true;
|
||||
static const float_denorm_style has_denorm = denorm_present;
|
||||
static const bool has_denorm_loss = false;
|
||||
static const std::float_round_style round_style = std::round_to_nearest;
|
||||
static const bool is_iec559 = false;
|
||||
static const bool is_bounded = false;
|
||||
static const bool is_modulo = false;
|
||||
static const int digits = 11;
|
||||
static const int digits10 = 3;
|
||||
static const int max_digits10 = 5;
|
||||
static const int radix = 2;
|
||||
static const int min_exponent = -13;
|
||||
static const int min_exponent10 = -4;
|
||||
static const int max_exponent = 16;
|
||||
static const int max_exponent10 = 4;
|
||||
static const bool traps = true;
|
||||
static const bool tinyness_before = false;
|
||||
|
||||
static fastdeploy::float16(min)() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x400);
|
||||
}
|
||||
static fastdeploy::float16 lowest() {
|
||||
return fastdeploy::raw_uint16_to_float16(0xfbff);
|
||||
}
|
||||
static fastdeploy::float16(max)() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x7bff);
|
||||
}
|
||||
static fastdeploy::float16 epsilon() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x0800);
|
||||
}
|
||||
static fastdeploy::float16 round_error() { return fastdeploy::float16(0.5); }
|
||||
static fastdeploy::float16 infinity() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x7c00);
|
||||
}
|
||||
static fastdeploy::float16 quiet_NaN() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x7e00);
|
||||
}
|
||||
static fastdeploy::float16 signaling_NaN() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x7e00);
|
||||
}
|
||||
static fastdeploy::float16 denorm_min() {
|
||||
return fastdeploy::raw_uint16_to_float16(0x1);
|
||||
}
|
||||
};
|
||||
|
||||
inline fastdeploy::float16 abs(const fastdeploy::float16& a) {
|
||||
return fastdeploy::abs(a);
|
||||
}
|
||||
|
||||
} // namespace std
|
||||
142
3rdparty/include/fastdeploy/fastdeploy_model.h
vendored
Normal file
142
3rdparty/include/fastdeploy/fastdeploy_model.h
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
#include "fastdeploy/runtime.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
/*! @brief Base model object for all the vision models
|
||||
*/
|
||||
class FASTDEPLOY_DECL FastDeployModel {
|
||||
public:
|
||||
/// Get model's name
|
||||
virtual std::string ModelName() const { return "NameUndefined"; }
|
||||
|
||||
/** \brief Inference the model by the runtime. This interface is included in the `Predict()` function, so we don't call `Infer()` directly in most common situation
|
||||
*/
|
||||
virtual bool Infer(std::vector<FDTensor>& input_tensors,
|
||||
std::vector<FDTensor>* output_tensors);
|
||||
|
||||
/** \brief Inference the model by the runtime. This interface is using class member reused_input_tensors_ to do inference and writing results to reused_output_tensors_
|
||||
*/
|
||||
virtual bool Infer();
|
||||
|
||||
RuntimeOption runtime_option;
|
||||
/** \brief Model's valid cpu backends. This member defined all the cpu backends have successfully tested for the model
|
||||
*/
|
||||
std::vector<Backend> valid_cpu_backends = {Backend::ORT};
|
||||
/** Model's valid gpu backends. This member defined all the gpu backends have successfully tested for the model
|
||||
*/
|
||||
std::vector<Backend> valid_gpu_backends = {Backend::ORT};
|
||||
/** Model's valid ipu backends. This member defined all the ipu backends have successfully tested for the model
|
||||
*/
|
||||
std::vector<Backend> valid_ipu_backends = {};
|
||||
/** Model's valid timvx backends. This member defined all the timvx backends have successfully tested for the model
|
||||
*/
|
||||
std::vector<Backend> valid_timvx_backends = {};
|
||||
/** Model's valid hardware backends. This member defined all the gpu backends have successfully tested for the model
|
||||
*/
|
||||
std::vector<Backend> valid_rknpu_backends = {};
|
||||
|
||||
/// Get number of inputs for this model
|
||||
virtual int NumInputsOfRuntime() { return runtime_->NumInputs(); }
|
||||
/// Get number of outputs for this model
|
||||
virtual int NumOutputsOfRuntime() { return runtime_->NumOutputs(); }
|
||||
/// Get input information for this model
|
||||
virtual TensorInfo InputInfoOfRuntime(int index) {
|
||||
return runtime_->GetInputInfo(index);
|
||||
}
|
||||
/// Get output information for this model
|
||||
virtual TensorInfo OutputInfoOfRuntime(int index) {
|
||||
return runtime_->GetOutputInfo(index);
|
||||
}
|
||||
/// Check if the model is initialized successfully
|
||||
virtual bool Initialized() const {
|
||||
return runtime_initialized_ && initialized;
|
||||
}
|
||||
|
||||
/** \brief This is a debug interface, used to record the time of backend runtime
|
||||
*
|
||||
* example code @code
|
||||
* auto model = fastdeploy::vision::PPYOLOE("model.pdmodel", "model.pdiparams", "infer_cfg.yml");
|
||||
* if (!model.Initialized()) {
|
||||
* std::cerr << "Failed to initialize." << std::endl;
|
||||
* return -1;
|
||||
* }
|
||||
* model.EnableRecordTimeOfRuntime();
|
||||
* cv::Mat im = cv::imread("test.jpg");
|
||||
* for (auto i = 0; i < 1000; ++i) {
|
||||
* fastdeploy::vision::DetectionResult result;
|
||||
* model.Predict(&im, &result);
|
||||
* }
|
||||
* model.PrintStatisInfoOfRuntime();
|
||||
* @endcode After called the `PrintStatisInfoOfRuntime()`, the statistical information of runtime will be printed in the console
|
||||
*/
|
||||
virtual void EnableRecordTimeOfRuntime() {
|
||||
time_of_runtime_.clear();
|
||||
std::vector<double>().swap(time_of_runtime_);
|
||||
enable_record_time_of_runtime_ = true;
|
||||
}
|
||||
|
||||
/** \brief Disable to record the time of backend runtime, see `EnableRecordTimeOfRuntime()` for more detail
|
||||
*/
|
||||
virtual void DisableRecordTimeOfRuntime() {
|
||||
enable_record_time_of_runtime_ = false;
|
||||
}
|
||||
|
||||
/** \brief Print the statistic information of runtime in the console, see function `EnableRecordTimeOfRuntime()` for more detail
|
||||
*/
|
||||
virtual std::map<std::string, float> PrintStatisInfoOfRuntime();
|
||||
|
||||
/** \brief Check if the `EnableRecordTimeOfRuntime()` method is enabled.
|
||||
*/
|
||||
virtual bool EnabledRecordTimeOfRuntime() {
|
||||
return enable_record_time_of_runtime_;
|
||||
}
|
||||
|
||||
/** \brief Release reused input/output buffers
|
||||
*/
|
||||
virtual void ReleaseReusedBuffer() {
|
||||
std::vector<FDTensor>().swap(reused_input_tensors_);
|
||||
std::vector<FDTensor>().swap(reused_output_tensors_);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool InitRuntime();
|
||||
|
||||
bool initialized = false;
|
||||
// Reused input tensors
|
||||
std::vector<FDTensor> reused_input_tensors_;
|
||||
// Reused output tensors
|
||||
std::vector<FDTensor> reused_output_tensors_;
|
||||
|
||||
private:
|
||||
bool InitRuntimeWithSpecifiedBackend();
|
||||
bool InitRuntimeWithSpecifiedDevice();
|
||||
bool CreateCpuBackend();
|
||||
bool CreateGpuBackend();
|
||||
bool CreateIpuBackend();
|
||||
bool CreateRKNPUBackend();
|
||||
bool CreateTimVXBackend();
|
||||
|
||||
std::shared_ptr<Runtime> runtime_;
|
||||
bool runtime_initialized_ = false;
|
||||
// whether to record inference time
|
||||
bool enable_record_time_of_runtime_ = false;
|
||||
|
||||
// record inference time for backend
|
||||
std::vector<double> time_of_runtime_;
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
31
3rdparty/include/fastdeploy/function/cast.h
vendored
Normal file
31
3rdparty/include/fastdeploy/function/cast.h
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Cast x to output data type element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param output_dtype The type of output tensor.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Cast(const FDTensor& x, FDTensor* out,
|
||||
FDDataType output_dtype);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
32
3rdparty/include/fastdeploy/function/clip.h
vendored
Normal file
32
3rdparty/include/fastdeploy/function/clip.h
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** This operator clip all elements in input into the range [ min, max ]. Support float32, float64, int32, int64
|
||||
@param x The input tensor.
|
||||
@param min The lower bound
|
||||
@param max The uppper bound
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Clip(const FDTensor& x, double min, double max,
|
||||
FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
32
3rdparty/include/fastdeploy/function/concat.h
vendored
Normal file
32
3rdparty/include/fastdeploy/function/concat.h
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Excute the concatenate operation for input FDTensor along given axis.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axis Axis which will be concatenated.
|
||||
*/
|
||||
|
||||
FASTDEPLOY_DECL void Concat(const std::vector<FDTensor>& x, FDTensor* out,
|
||||
int axis = 0);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
29
3rdparty/include/fastdeploy/function/cuda_cast.h
vendored
Normal file
29
3rdparty/include/fastdeploy/function/cuda_cast.h
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
/** Cast the type of the data in GPU buffer.
|
||||
@param in The input tensor.
|
||||
@param out The output tensor
|
||||
@param stream CUDA stream
|
||||
*/
|
||||
FASTDEPLOY_DECL void CudaCast(const FDTensor& in, FDTensor* out,
|
||||
cudaStream_t stream);
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
31
3rdparty/include/fastdeploy/function/cumprod.h
vendored
Normal file
31
3rdparty/include/fastdeploy/function/cumprod.h
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Excute the concatenate operation for input FDTensor along given axis.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axisi Axis which will be concatenated.
|
||||
*/
|
||||
|
||||
FASTDEPLOY_DECL void Cumprod(const FDTensor& x, FDTensor* out, int axis = 0);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
140
3rdparty/include/fastdeploy/function/eigen.h
vendored
Normal file
140
3rdparty/include/fastdeploy/function/eigen.h
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
#include "fastdeploy/utils/axis_utils.h"
|
||||
#include "unsupported/Eigen/CXX11/Tensor"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
// EigenDim converts shape into Eigen::DSizes.
|
||||
template <int D>
|
||||
struct EigenDim {
|
||||
using Type = Eigen::DSizes<Eigen::DenseIndex, D>;
|
||||
|
||||
static Type From(const std::vector<int64_t>& dims) {
|
||||
Type ret;
|
||||
for (int64_t d = 0; d < dims.size(); d++) {
|
||||
ret[d] = dims[d];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
// Interpret FDTensor as EigenTensor and EigenConstTensor.
|
||||
template <typename T, size_t D, int MajorType = Eigen::RowMajor,
|
||||
typename IndexType = Eigen::DenseIndex>
|
||||
struct EigenTensor {
|
||||
using Type = Eigen::TensorMap<Eigen::Tensor<T, D, MajorType, IndexType>>;
|
||||
|
||||
using ConstType =
|
||||
Eigen::TensorMap<Eigen::Tensor<const T, D, MajorType, IndexType>>;
|
||||
|
||||
static Type From(FDTensor& tensor,
|
||||
const std::vector<int64_t>& dims) { // NOLINT
|
||||
return Type(reinterpret_cast<T*>(tensor.Data()), EigenDim<D>::From(dims));
|
||||
}
|
||||
|
||||
static Type From(FDTensor& tensor) { // NOLINT
|
||||
return From(tensor, tensor.shape);
|
||||
} // NOLINT
|
||||
|
||||
static ConstType From(const FDTensor& tensor,
|
||||
const std::vector<int64_t>& dims) {
|
||||
return ConstType(reinterpret_cast<const T*>(tensor.Data()),
|
||||
EigenDim<D>::From(dims));
|
||||
}
|
||||
|
||||
static ConstType From(const FDTensor& tensor) {
|
||||
return From(tensor, tensor.shape);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, int MajorType = Eigen::RowMajor,
|
||||
typename IndexType = Eigen::DenseIndex>
|
||||
struct EigenScalar {
|
||||
// Scalar tensor (implemented as a rank-0 tensor) of scalar type T.
|
||||
using Type = Eigen::TensorMap<
|
||||
Eigen::TensorFixedSize<T, Eigen::Sizes<>, MajorType, IndexType>>;
|
||||
using ConstType = Eigen::TensorMap<
|
||||
Eigen::TensorFixedSize<const T, Eigen::Sizes<>, MajorType, IndexType>>;
|
||||
|
||||
static Type From(FDTensor& tensor) {
|
||||
return Type(reinterpret_cast<T*>(tensor.Data()));
|
||||
} // NOLINT
|
||||
|
||||
static ConstType From(const FDTensor& tensor) {
|
||||
return ConstType(reinterpret_cast<const T*>(tensor.Data()));
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, int MajorType = Eigen::RowMajor,
|
||||
typename IndexType = Eigen::DenseIndex>
|
||||
struct EigenVector : public EigenTensor<T, 1, MajorType, IndexType> {
|
||||
// Flatten reshapes a Tensor into an EigenVector.
|
||||
static typename EigenVector::Type Flatten(FDTensor& tensor) { // NOLINT
|
||||
return EigenVector::From(tensor, {tensor.Numel()});
|
||||
}
|
||||
|
||||
static typename EigenVector::ConstType Flatten(
|
||||
const FDTensor& tensor) { // NOLINT
|
||||
return EigenVector::From(tensor, {tensor.Numel()});
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, int MajorType = Eigen::RowMajor,
|
||||
typename IndexType = Eigen::DenseIndex>
|
||||
struct EigenMatrix : public EigenTensor<T, 2, MajorType, IndexType> {
|
||||
static typename EigenMatrix::Type Reshape(FDTensor& tensor, // NOLINT
|
||||
int num_col_dims) {
|
||||
int rank = tensor.shape.size();
|
||||
FDASSERT((num_col_dims > 0 && num_col_dims < rank),
|
||||
"Input dimension number(num_col_dims) must be between 0 and %d, "
|
||||
"but received number is %d.",
|
||||
rank, num_col_dims);
|
||||
const int n = SizeToAxis(num_col_dims, tensor.shape);
|
||||
const int d = SizeFromAxis(num_col_dims, tensor.shape);
|
||||
return EigenMatrix::From(tensor, {n, d});
|
||||
}
|
||||
|
||||
static typename EigenMatrix::ConstType Reshape(const FDTensor& tensor,
|
||||
int num_col_dims) {
|
||||
int rank = tensor.shape.size();
|
||||
FDASSERT((num_col_dims > 0 && num_col_dims < rank),
|
||||
"Input dimension number(num_col_dims) must be between 0 and %d, "
|
||||
"but received number is %d.",
|
||||
rank, num_col_dims);
|
||||
const int n = SizeToAxis(num_col_dims, tensor.shape);
|
||||
const int d = SizeFromAxis(num_col_dims, tensor.shape);
|
||||
return EigenMatrix::From(tensor, {n, d});
|
||||
}
|
||||
};
|
||||
|
||||
class EigenDeviceWrapper {
|
||||
public:
|
||||
static std::shared_ptr<EigenDeviceWrapper> GetInstance();
|
||||
const Eigen::DefaultDevice* GetDevice() const;
|
||||
|
||||
private:
|
||||
Eigen::DefaultDevice device_;
|
||||
static std::shared_ptr<EigenDeviceWrapper> instance_;
|
||||
};
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
105
3rdparty/include/fastdeploy/function/elementwise.h
vendored
Normal file
105
3rdparty/include/fastdeploy/function/elementwise.h
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_scalar.h"
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
namespace function {
|
||||
|
||||
/** Excute the add operation for input FDTensors. *out = x + y.
|
||||
@param x The input tensor.
|
||||
@param y The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Add(const FDTensor& x, const FDTensor& y, FDTensor* out);
|
||||
|
||||
/** Excute the subtract operation for input FDTensors. *out = x - y.
|
||||
@param x The input tensor.
|
||||
@param y The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Subtract(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* out);
|
||||
|
||||
/** Excute the multiply operation for input FDTensors. *out = x * y.
|
||||
@param x The input tensor.
|
||||
@param y The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Multiply(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* out);
|
||||
|
||||
/** Excute the divide operation for input FDTensors. *out = x / y.
|
||||
@param x The input tensor.
|
||||
@param y The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Divide(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* out);
|
||||
|
||||
/** Excute the maximum operation for input FDTensors. *out = max(x, y).
|
||||
@param x The input tensor.
|
||||
@param y The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Maximum(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
|
||||
FASTDEPLOY_DECL FDTensor operator+(const FDTensor& x, const FDTensor& y);
|
||||
|
||||
template <typename T> FDTensor operator+(const FDTensor& x, T y) {
|
||||
return x + FDTensor(Scalar(y));
|
||||
}
|
||||
|
||||
template <typename T> FDTensor operator+(T x, const FDTensor& y) {
|
||||
return FDTensor(Scalar(x)) + y;
|
||||
}
|
||||
|
||||
FASTDEPLOY_DECL FDTensor operator-(const FDTensor& x, const FDTensor& y);
|
||||
|
||||
template <typename T> FDTensor operator-(const FDTensor& x, T y) {
|
||||
return x - FDTensor(Scalar(y));
|
||||
}
|
||||
|
||||
template <typename T> FDTensor operator-(T x, const FDTensor& y) {
|
||||
return FDTensor(Scalar(x)) - y;
|
||||
}
|
||||
|
||||
FASTDEPLOY_DECL FDTensor operator*(const FDTensor& x, const FDTensor& y);
|
||||
|
||||
template <typename T> FDTensor operator*(const FDTensor& x, T y) {
|
||||
return x * FDTensor(Scalar(y));
|
||||
}
|
||||
|
||||
template <typename T> FDTensor operator*(T x, const FDTensor& y) {
|
||||
return FDTensor(Scalar(x)) * y;
|
||||
}
|
||||
|
||||
FASTDEPLOY_DECL FDTensor operator/(const FDTensor& x, const FDTensor& y);
|
||||
|
||||
template <typename T> FDTensor operator/(const FDTensor& x, T y) {
|
||||
return x / FDTensor(Scalar(y));
|
||||
}
|
||||
|
||||
template <typename T> FDTensor operator/(T x, const FDTensor& y) {
|
||||
return FDTensor(Scalar(x)) / y;
|
||||
}
|
||||
|
||||
} // namespace fastdeploy
|
||||
265
3rdparty/include/fastdeploy/function/elementwise_base.h
vendored
Normal file
265
3rdparty/include/fastdeploy/function/elementwise_base.h
vendored
Normal file
@@ -0,0 +1,265 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
#include "fastdeploy/function/eigen.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
#define DEFINE_ELEMENTWISE_OP(name) \
|
||||
template <typename T> struct name##RawKernel { \
|
||||
void operator()(const FDTensor& x, const FDTensor& y, int axis, \
|
||||
FDTensor* out) { \
|
||||
if (x.Shape() == y.Shape()) { \
|
||||
SameDimsElementwiseCompute<SameDims##name##Functor<T>>()(x, y, out); \
|
||||
} else { \
|
||||
auto x_dims = x.Shape(); \
|
||||
auto y_dims = y.Shape(); \
|
||||
if (x_dims.size() >= y_dims.size()) { \
|
||||
ElementwiseCompute<name##Functor<T>, T>(x, y, axis, \
|
||||
name##Functor<T>(), out); \
|
||||
} else { \
|
||||
ElementwiseCompute<Inverse##name##Functor<T>, T>( \
|
||||
x, y, axis, Inverse##name##Functor<T>(), out); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
inline void GetMidDims(const std::vector<int64_t>& x_dims,
|
||||
const std::vector<int64_t>& y_dims, const int axis,
|
||||
int* pre, int* n, int* post,
|
||||
int* is_run_common_broadcast) {
|
||||
*pre = 1;
|
||||
*n = 1;
|
||||
*post = 1;
|
||||
*is_run_common_broadcast = 0;
|
||||
for (int i = 0; i < axis; ++i) {
|
||||
(*pre) *= x_dims[i];
|
||||
}
|
||||
for (int i = 0; i < y_dims.size(); ++i) {
|
||||
if (x_dims[i + axis] != y_dims[i]) {
|
||||
FDASSERT(y_dims[i] == 1 || x_dims[i + axis] == 1,
|
||||
"Broadcast dimension mismatch. Operands "
|
||||
"could not be broadcast together with the shape of "
|
||||
"X = [%s] and the shape of Y = [%s]. Received [%d] "
|
||||
"in X is not equal to [%d] in Y.",
|
||||
Str(x_dims).c_str(), Str(y_dims).c_str(), x_dims[i + axis],
|
||||
y_dims[i]);
|
||||
*is_run_common_broadcast = 1;
|
||||
return;
|
||||
}
|
||||
(*n) *= y_dims[i];
|
||||
}
|
||||
for (int i = axis + y_dims.size(); i < x_dims.size(); ++i) {
|
||||
(*post) *= x_dims[i];
|
||||
}
|
||||
}
|
||||
|
||||
inline std::vector<int64_t>
|
||||
TrimTrailingSingularDims(const std::vector<int64_t>& dims) {
|
||||
// Remove trailing dimensions of size 1 for y
|
||||
auto actual_dims_size = dims.size();
|
||||
for (; actual_dims_size != 0; --actual_dims_size) {
|
||||
if (dims[actual_dims_size - 1] != 1)
|
||||
break;
|
||||
}
|
||||
if (actual_dims_size == dims.size())
|
||||
return dims;
|
||||
std::vector<int64_t> trim_dims;
|
||||
trim_dims.resize(actual_dims_size);
|
||||
for (int i = 0; i < actual_dims_size; ++i) {
|
||||
trim_dims[i] = dims[i];
|
||||
}
|
||||
return trim_dims;
|
||||
}
|
||||
|
||||
inline int GetElementwiseIndex(const int64_t* x_dims_array, const int max_dim,
|
||||
const int64_t* index_array) {
|
||||
int index_ = 0;
|
||||
for (int i = 0; i < max_dim; i++) {
|
||||
if (x_dims_array[i] > 1) {
|
||||
index_ = index_ * x_dims_array[i] + index_array[i];
|
||||
}
|
||||
}
|
||||
return index_;
|
||||
}
|
||||
|
||||
inline void UpdateElementwiseIndexArray(const int64_t* out_dims_array,
|
||||
const int max_dim,
|
||||
int64_t* index_array) {
|
||||
for (int i = max_dim - 1; i >= 0; --i) {
|
||||
++index_array[i];
|
||||
if (index_array[i] >= out_dims_array[i]) {
|
||||
index_array[i] -= out_dims_array[i];
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline void GetBroadcastDimsArrays(const std::vector<int64_t>& x_dims,
|
||||
const std::vector<int64_t>& y_dims,
|
||||
int64_t* x_dims_array, int64_t* y_dims_array,
|
||||
int64_t* out_dims_array, const int max_dim,
|
||||
const int axis) {
|
||||
FDASSERT(axis >= 0,
|
||||
"Axis should be great than or equal to 0, but received axis is %d.",
|
||||
axis);
|
||||
FDASSERT(axis < max_dim,
|
||||
"Axis should be less than %d, but received axis is %d.", max_dim,
|
||||
axis);
|
||||
if (x_dims.size() > y_dims.size()) {
|
||||
std::fill(y_dims_array, y_dims_array + axis, 1);
|
||||
if (axis + y_dims.size() < max_dim) {
|
||||
std::fill(y_dims_array + axis + y_dims.size(), y_dims_array + max_dim, 1);
|
||||
}
|
||||
std::copy(x_dims.data(), x_dims.data() + x_dims.size(), x_dims_array);
|
||||
std::copy(y_dims.data(), y_dims.data() + y_dims.size(),
|
||||
y_dims_array + axis);
|
||||
} else {
|
||||
std::fill(x_dims_array, x_dims_array + axis, 1);
|
||||
if (axis + x_dims.size() < max_dim) {
|
||||
std::fill(x_dims_array + axis + x_dims.size(), x_dims_array + max_dim, 1);
|
||||
}
|
||||
std::copy(x_dims.data(), x_dims.data() + x_dims.size(),
|
||||
x_dims_array + axis);
|
||||
std::copy(y_dims.data(), y_dims.data() + y_dims.size(), y_dims_array);
|
||||
}
|
||||
|
||||
for (int i = 0; i < max_dim; i++) {
|
||||
FDASSERT(x_dims_array[i] == y_dims_array[i] || x_dims_array[i] <= 1 ||
|
||||
y_dims_array[i] <= 1,
|
||||
"Broadcast dimension mismatch. Operands "
|
||||
"could not be broadcast together with the shape of "
|
||||
"X = [%s] and the shape of Y = [%s]. Received [%d] "
|
||||
"in X is not equal to [%d] in Y.",
|
||||
Str(x_dims).c_str(), Str(y_dims).c_str(), x_dims[i + axis],
|
||||
y_dims[i]);
|
||||
if ((x_dims_array[i] > 1 || y_dims_array[i] > 1) ||
|
||||
(x_dims_array[i] == 1 && y_dims_array[i] == 1)) {
|
||||
out_dims_array[i] = (std::max)(x_dims_array[i], y_dims_array[i]);
|
||||
} else {
|
||||
out_dims_array[i] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Functor, typename T, typename OutType = T>
|
||||
void CommonForwardBroadcastCPU(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* z, int64_t* x_dims_array,
|
||||
int64_t* y_dims_array, int64_t* out_dims_array,
|
||||
int max_dim, Functor func,
|
||||
const bool is_xsize_larger = true) {
|
||||
std::vector<int64_t> index_array(max_dim, 0);
|
||||
const T* x_data = reinterpret_cast<const T*>(x.Data());
|
||||
const T* y_data = reinterpret_cast<const T*>(y.Data());
|
||||
FDASSERT(x_data != nullptr, "The input X should not be empty.");
|
||||
FDASSERT(y_data != nullptr, "The input X should not be empty.");
|
||||
OutType* out_data = reinterpret_cast<OutType*>(z->Data());
|
||||
|
||||
const int out_size = std::accumulate(out_dims_array, out_dims_array + max_dim,
|
||||
1, std::multiplies<int64_t>());
|
||||
int x_index, y_index;
|
||||
for (int out_index = 0; out_index < out_size; ++out_index) {
|
||||
x_index = GetElementwiseIndex(x_dims_array, max_dim, index_array.data());
|
||||
y_index = GetElementwiseIndex(y_dims_array, max_dim, index_array.data());
|
||||
if (is_xsize_larger) {
|
||||
out_data[out_index] = func(x_data[x_index], y_data[y_index]);
|
||||
} else {
|
||||
out_data[out_index] = func(y_data[y_index], x_data[x_index]);
|
||||
}
|
||||
|
||||
UpdateElementwiseIndexArray(out_dims_array, max_dim, index_array.data());
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Functor, typename T, typename OutType = T>
|
||||
void CommonElementwiseBroadcastForward(const FDTensor& x, const FDTensor& y,
|
||||
FDTensor* z,
|
||||
const std::vector<int64_t>& x_dims,
|
||||
const std::vector<int64_t>& y_dims,
|
||||
Functor func, int axis,
|
||||
const bool is_xsize_larger = true) {
|
||||
int x_dims_size = x_dims.size();
|
||||
int y_dims_size = y_dims.size();
|
||||
int max_dim = (std::max)(x_dims_size, y_dims_size);
|
||||
axis = (axis == -1 ? std::abs(x_dims_size - y_dims_size) : axis);
|
||||
FDASSERT(axis >= 0,
|
||||
"Axis should be great than or equal to 0, but received axis is %d.",
|
||||
axis);
|
||||
FDASSERT(axis < max_dim,
|
||||
"Axis should be less than %d, but received axis is %d.", max_dim,
|
||||
axis);
|
||||
std::vector<int64_t> x_dims_array(max_dim);
|
||||
std::vector<int64_t> y_dims_array(max_dim);
|
||||
std::vector<int64_t> out_dims_array(max_dim);
|
||||
GetBroadcastDimsArrays(x_dims, y_dims, x_dims_array.data(),
|
||||
y_dims_array.data(), out_dims_array.data(), max_dim,
|
||||
axis);
|
||||
FDTensor tmp;
|
||||
tmp.Allocate(out_dims_array, TypeToDataType<OutType>::dtype);
|
||||
CommonForwardBroadcastCPU<Functor, T, OutType>(
|
||||
x, y, &tmp, x_dims_array.data(), y_dims_array.data(),
|
||||
out_dims_array.data(), max_dim, func, is_xsize_larger);
|
||||
*z = std::move(tmp);
|
||||
}
|
||||
|
||||
template <typename Functor, typename T, typename OutType = T>
|
||||
void ElementwiseCompute(const FDTensor& x, const FDTensor& y, int axis,
|
||||
Functor func, FDTensor* z) {
|
||||
auto x_dims = x.Shape();
|
||||
auto y_dims = y.Shape();
|
||||
bool is_xsize_larger = true;
|
||||
int max_dim = x_dims.size();
|
||||
if (x_dims.size() < y_dims.size()) {
|
||||
is_xsize_larger = false;
|
||||
max_dim = y_dims.size();
|
||||
}
|
||||
|
||||
int diff_size = x_dims.size() - y_dims.size();
|
||||
axis = (axis == -1 ? std::abs(diff_size) : axis);
|
||||
FDASSERT(axis >= 0,
|
||||
"Axis should be great than or equal to 0, but received axis is %d.",
|
||||
axis);
|
||||
FDASSERT(axis < max_dim,
|
||||
"Axis should be less than %d, but received axis is %d.", max_dim,
|
||||
axis);
|
||||
|
||||
int pre, n, post, is_run_common_broadcast, axis_trim = 0;
|
||||
if (is_xsize_larger) {
|
||||
auto y_dims_trimed = TrimTrailingSingularDims(y_dims);
|
||||
axis_trim = (y_dims_trimed.size() == 0) ? x_dims.size() : axis;
|
||||
GetMidDims(x_dims, y_dims_trimed, axis_trim, &pre, &n, &post,
|
||||
&is_run_common_broadcast);
|
||||
} else {
|
||||
auto x_dims_trimed = TrimTrailingSingularDims(x_dims);
|
||||
axis_trim = (x_dims_trimed.size() == 0) ? y_dims.size() : axis;
|
||||
GetMidDims(y_dims, x_dims_trimed, axis_trim, &pre, &n, &post,
|
||||
&is_run_common_broadcast);
|
||||
}
|
||||
// special case for common implementation.
|
||||
// case 1: x=[2,3,1,5], y=[2,1,4,1]
|
||||
// case 2: x=[2,3,4], y=[1,1,4]
|
||||
CommonElementwiseBroadcastForward<Functor, T, OutType>(
|
||||
x, y, z, x_dims, y_dims, func, axis, is_xsize_larger);
|
||||
}
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
131
3rdparty/include/fastdeploy/function/elementwise_functor.h
vendored
Normal file
131
3rdparty/include/fastdeploy/function/elementwise_functor.h
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/function/eigen.h"
|
||||
#include "fastdeploy/function/elementwise.h"
|
||||
#include "fastdeploy/function/elementwise_base.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
template <typename Functor> struct SameDimsElementwiseCompute {
|
||||
void operator()(const FDTensor& x, const FDTensor& y, FDTensor* z) {
|
||||
z->Allocate(x.Shape(), x.Dtype());
|
||||
Functor()(x, y, z);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T> struct SameDimsAddFunctor {
|
||||
void operator()(const FDTensor& x, const FDTensor& y, FDTensor* z) {
|
||||
const auto& dev = *EigenDeviceWrapper::GetInstance()->GetDevice();
|
||||
auto eigen_x = EigenVector<T>::Flatten(x);
|
||||
auto eigen_y = EigenVector<T>::Flatten(y);
|
||||
auto eigen_z = EigenVector<T>::Flatten(*z);
|
||||
eigen_z.device(dev) = eigen_x + eigen_y;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T> struct SameDimsSubtractFunctor {
|
||||
void operator()(const FDTensor& x, const FDTensor& y, FDTensor* z) {
|
||||
const auto& dev = *EigenDeviceWrapper::GetInstance()->GetDevice();
|
||||
auto eigen_x = EigenVector<T>::Flatten(x);
|
||||
auto eigen_y = EigenVector<T>::Flatten(y);
|
||||
auto eigen_z = EigenVector<T>::Flatten(*z);
|
||||
eigen_z.device(dev) = eigen_x - eigen_y;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T> struct SameDimsMultiplyFunctor {
|
||||
void operator()(const FDTensor& x, const FDTensor& y, FDTensor* z) {
|
||||
const auto& dev = *EigenDeviceWrapper::GetInstance()->GetDevice();
|
||||
auto eigen_x = EigenVector<T>::Flatten(x);
|
||||
auto eigen_y = EigenVector<T>::Flatten(y);
|
||||
auto eigen_z = EigenVector<T>::Flatten(*z);
|
||||
eigen_z.device(dev) = eigen_x * eigen_y;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T> struct SameDimsDivideFunctor {
|
||||
void operator()(const FDTensor& x, const FDTensor& y, FDTensor* z) {
|
||||
const auto& dev = *EigenDeviceWrapper::GetInstance()->GetDevice();
|
||||
auto eigen_x = EigenVector<T>::Flatten(x);
|
||||
auto eigen_y = EigenVector<T>::Flatten(y);
|
||||
auto eigen_z = EigenVector<T>::Flatten(*z);
|
||||
eigen_z.device(dev) = eigen_x / eigen_y;
|
||||
}
|
||||
};
|
||||
|
||||
// Add
|
||||
template <typename T> struct AddFunctor {
|
||||
inline T operator()(const T a, const T b) const { return a + b; }
|
||||
};
|
||||
template <typename T> struct InverseAddFunctor {
|
||||
inline T operator()(const T a, const T b) const { return b + a; }
|
||||
};
|
||||
|
||||
// Subtract
|
||||
template <typename T> struct SubtractFunctor {
|
||||
inline T operator()(const T a, const T b) const { return a - b; }
|
||||
};
|
||||
template <typename T> struct InverseSubtractFunctor {
|
||||
inline T operator()(const T a, const T b) const { return b - a; }
|
||||
};
|
||||
|
||||
// Multiply
|
||||
template <typename T> struct MultiplyFunctor {
|
||||
inline T operator()(const T a, const T b) const { return a * b; }
|
||||
};
|
||||
template <> struct MultiplyFunctor<bool> {
|
||||
inline bool operator()(const bool a, const bool b) const { return a && b; }
|
||||
};
|
||||
template <typename T> struct InverseMultiplyFunctor {
|
||||
inline T operator()(const T a, const T b) const { return b * a; }
|
||||
};
|
||||
template <> struct InverseMultiplyFunctor<bool> {
|
||||
inline bool operator()(const bool a, const bool b) const { return b && a; }
|
||||
};
|
||||
|
||||
// Divide
|
||||
#define DIV_ERROR_INFO \
|
||||
"InvalidArgumentError: Integer division by zero encountered in " \
|
||||
"(floor) divide. Please check the input value."
|
||||
|
||||
template <typename T, typename Enable = void> struct DivideFunctor {
|
||||
inline T operator()(const T a, const T b) const { return a / b; }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct DivideFunctor<
|
||||
T, typename std::enable_if<std::is_integral<T>::value>::type> {
|
||||
inline T operator()(const T a, const T b) const {
|
||||
// For int32/int64, need to check whether the divison is zero.
|
||||
FDASSERT(b != 0, DIV_ERROR_INFO);
|
||||
return a / b;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, typename Enable = void> struct InverseDivideFunctor {
|
||||
inline T operator()(const T a, const T b) const { return b / a; }
|
||||
};
|
||||
|
||||
// Maximum
|
||||
template <typename T> struct MaximumFunctor {
|
||||
inline T operator()(const T a, const T b) const { return a > b ? a : b; }
|
||||
};
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
44
3rdparty/include/fastdeploy/function/full.h
vendored
Normal file
44
3rdparty/include/fastdeploy/function/full.h
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_scalar.h"
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Fill the value to tensor
|
||||
@param value The value to be filled in tensor
|
||||
@param shape The shape of output tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The data type of output tensor. Default to float32
|
||||
*/
|
||||
FASTDEPLOY_DECL void Full(const Scalar& value,
|
||||
const std::vector<int64_t>& shape, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::FP32);
|
||||
|
||||
/** Fill the value to tensor
|
||||
@param x The input tensor.
|
||||
@param value The value to be filled in tensor
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The data type of output tensor. Default to float32
|
||||
*/
|
||||
FASTDEPLOY_DECL void FullLike(const FDTensor& x, const Scalar& value,
|
||||
FDTensor* out,
|
||||
FDDataType dtype = FDDataType::FP32);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
36
3rdparty/include/fastdeploy/function/functions.h
vendored
Normal file
36
3rdparty/include/fastdeploy/function/functions.h
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/function/cast.h"
|
||||
#include "fastdeploy/function/clip.h"
|
||||
#include "fastdeploy/function/concat.h"
|
||||
#include "fastdeploy/function/cumprod.h"
|
||||
#include "fastdeploy/function/elementwise.h"
|
||||
#include "fastdeploy/function/full.h"
|
||||
#include "fastdeploy/function/gather_scatter_along_axis.h"
|
||||
#include "fastdeploy/function/gaussian_random.h"
|
||||
#include "fastdeploy/function/isfinite.h"
|
||||
#include "fastdeploy/function/linspace.h"
|
||||
#include "fastdeploy/function/math.h"
|
||||
#include "fastdeploy/function/pad.h"
|
||||
#include "fastdeploy/function/quantile.h"
|
||||
#include "fastdeploy/function/reduce.h"
|
||||
#include "fastdeploy/function/slice.h"
|
||||
#include "fastdeploy/function/softmax.h"
|
||||
#include "fastdeploy/function/sort.h"
|
||||
#include "fastdeploy/function/split.h"
|
||||
#include "fastdeploy/function/tile.h"
|
||||
#include "fastdeploy/function/transpose.h"
|
||||
33
3rdparty/include/fastdeploy/function/gather_scatter_along_axis.h
vendored
Normal file
33
3rdparty/include/fastdeploy/function/gather_scatter_along_axis.h
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Output is obtained by gathering entries of axis of x indexed by index and
|
||||
* concatenate them together.
|
||||
@param x The input tensor.
|
||||
@param index The index of a tensor to gather.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axis Axis which will be gathered.
|
||||
*/
|
||||
void GatherAlongAxis(const FDTensor& x, const FDTensor& index, FDTensor* result,
|
||||
int axis);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
36
3rdparty/include/fastdeploy/function/gaussian_random.h
vendored
Normal file
36
3rdparty/include/fastdeploy/function/gaussian_random.h
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Output is obtained by gathering entries of axis of x indexed by index and
|
||||
* concatenate them together.
|
||||
@param shape The output tensor shape.
|
||||
@param out the output tensor.
|
||||
@param mean mean value of gaussian random
|
||||
@param std standard value of gaussian random
|
||||
@param seed The seed of random generator.
|
||||
@param dtype The data type of the output Tensor.
|
||||
*/
|
||||
void GaussianRandom(const std::vector<int64_t>& shape, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::FP32, float mean = 0.0f,
|
||||
float std = 1.0f, int seed = 0);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
47
3rdparty/include/fastdeploy/function/isfinite.h
vendored
Normal file
47
3rdparty/include/fastdeploy/function/isfinite.h
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Return whether every element of input tensor is NaN or not.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The output data type
|
||||
*/
|
||||
FASTDEPLOY_DECL void IsNan(const FDTensor& x, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::BOOL);
|
||||
|
||||
/** Return whether every element of input tensor is Inf or not.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The output data type
|
||||
*/
|
||||
FASTDEPLOY_DECL void IsInf(const FDTensor& x, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::BOOL);
|
||||
|
||||
/** Return whether every element of input tensor is finite or not.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The output data type
|
||||
*/
|
||||
FASTDEPLOY_DECL void IsFinite(const FDTensor& x, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::BOOL);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
33
3rdparty/include/fastdeploy/function/linspace.h
vendored
Normal file
33
3rdparty/include/fastdeploy/function/linspace.h
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Return fixed number of evenly spaced values within a given interval.
|
||||
@param start The input start is start variable of range.
|
||||
@param end The input stop is start variable of range.
|
||||
@param num The input num is given num of the sequence.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dtype The data type of output tensor, default to float32.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Linspace(double start, double end, int num, FDTensor* out,
|
||||
FDDataType dtype = FDDataType::FP32);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
65
3rdparty/include/fastdeploy/function/math.h
vendored
Normal file
65
3rdparty/include/fastdeploy/function/math.h
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Calculates the sqrt of the given input Tensor, element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Sqrt(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** Calculates the natural log of the given input Tensor, element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Log(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** Rounds the values in the input to the nearest integer value, element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Round(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** Computes exp of x element-wise with a natural number e as the base, element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Exp(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** This operator is used to perform elementwise abs for input X. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Abs(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** Computes ceil of x element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Ceil(const FDTensor& x, FDTensor* out);
|
||||
|
||||
/** Computes floor of x element-wise. Only for float type FDTensor
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Floor(const FDTensor& x, FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
81
3rdparty/include/fastdeploy/function/math_functor.h
vendored
Normal file
81
3rdparty/include/fastdeploy/function/math_functor.h
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/function/eigen.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
// log(x) = natural logarithm of x
|
||||
template <typename T> struct LogFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.log();
|
||||
}
|
||||
};
|
||||
|
||||
// exp functor
|
||||
// exp(x) = e^x
|
||||
template <typename T> struct ExpFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.exp();
|
||||
}
|
||||
};
|
||||
|
||||
// round(x) = [x]
|
||||
template <typename T> struct RoundFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.round();
|
||||
}
|
||||
};
|
||||
|
||||
// sqrt(x) = x^(1/2)
|
||||
template <typename T> struct SqrtFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.sqrt();
|
||||
}
|
||||
};
|
||||
|
||||
// abs(x) = x if x > 0 else -x
|
||||
template <typename T> struct AbsFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) =
|
||||
x.unaryExpr([](T v) { return v > static_cast<T>(0) ? v : -v; });
|
||||
}
|
||||
};
|
||||
|
||||
// ceil(x) = ceiling(x)
|
||||
template <typename T> struct CeilFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.ceil();
|
||||
}
|
||||
};
|
||||
|
||||
// floor(x) = flooring(x)
|
||||
template <typename T> struct FloorFunctor {
|
||||
template <typename Device, typename X, typename Out>
|
||||
void operator()(Device d, X x, Out out) const {
|
||||
out.device(d) = x.floor();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
31
3rdparty/include/fastdeploy/function/pad.h
vendored
Normal file
31
3rdparty/include/fastdeploy/function/pad.h
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
/** Excute the pad operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param pads The size of padding for each dimension, for 3-D tensor, the pads should be [1d-left, 1d-right, 2d-left, 2d-right, 3d-left, 3d-right]
|
||||
@param pad_value The value which will fill into out tensor
|
||||
*/
|
||||
FASTDEPLOY_DECL void Pad(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int>& pads, float pad_value = 0);
|
||||
|
||||
}
|
||||
} // namespace fastdeploy
|
||||
34
3rdparty/include/fastdeploy/function/quantile.h
vendored
Normal file
34
3rdparty/include/fastdeploy/function/quantile.h
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Compute the quantile of the input along the specified axis. If any values
|
||||
** in a reduced row are NaN, then the quantiles for that reduction will be NaN.
|
||||
@param x The input tensor.
|
||||
@param q The q for calculate quantile, which should be in range [0, 1].
|
||||
@param axis The axis along which to calculate quantile. axis should be int
|
||||
or list of int.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Quantile(const FDTensor& x, const std::vector<double>& q,
|
||||
const std::vector<int>& axis, FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
127
3rdparty/include/fastdeploy/function/reduce.h
vendored
Normal file
127
3rdparty/include/fastdeploy/function/reduce.h
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
/** Excute the maximum operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Max(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the minimum operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Min(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the sum operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Sum(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the all operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void All(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the any operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Any(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the mean operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Mean(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the product operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which will be reduced.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param reduce_all Whether to reduce all dims, default false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Prod(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims,
|
||||
bool keep_dim = false, bool reduce_all = false);
|
||||
|
||||
/** Excute the argmax operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axis The axis which will be reduced.
|
||||
@param output_dtype The data type of output FDTensor, INT64 or INT32,
|
||||
default to INT64.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param flatten Whether to flatten FDTensor to get the argmin index, default
|
||||
false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void ArgMax(const FDTensor& x, FDTensor* out, int64_t axis,
|
||||
FDDataType output_dtype = FDDataType::INT64,
|
||||
bool keep_dim = false, bool flatten = false);
|
||||
|
||||
/** Excute the argmin operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axis The axis which will be reduced.
|
||||
@param output_dtype The data type of output FDTensor, INT64 or INT32,
|
||||
default to INT64.
|
||||
@param keep_dim Whether to keep the reduced dims, default false.
|
||||
@param flatten Whether to flatten FDTensor to get the argmin index, default
|
||||
false.
|
||||
*/
|
||||
FASTDEPLOY_DECL void ArgMin(const FDTensor& x, FDTensor* out, int64_t axis,
|
||||
FDDataType output_dtype = FDDataType::INT64,
|
||||
bool keep_dim = false, bool flatten = false);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
77
3rdparty/include/fastdeploy/function/reduce_functor.h
vendored
Normal file
77
3rdparty/include/fastdeploy/function/reduce_functor.h
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/function/eigen.h"
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
//////// Max Functor ///////
|
||||
struct MaxFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->maximum(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// Min Functor ///////
|
||||
struct MinFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->minimum(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// Sum Functor ///////
|
||||
struct SumFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->sum(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// All Functor ///////
|
||||
struct AllFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->all(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// Any Functor ///////
|
||||
struct AnyFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->any(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// Mean Functor ///////
|
||||
struct MeanFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->mean(dim);
|
||||
}
|
||||
};
|
||||
|
||||
//////// Prod Functor ///////
|
||||
struct ProdFunctor {
|
||||
template <typename X, typename Y, typename Dim>
|
||||
void operator()(const Eigen::DefaultDevice& dev, X* x, Y* y, const Dim& dim) {
|
||||
y->device(dev) = x->prod(dim);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
44
3rdparty/include/fastdeploy/function/slice.h
vendored
Normal file
44
3rdparty/include/fastdeploy/function/slice.h
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** This operator produces a slice of input along multiple axes.
|
||||
@param x The input tensor.
|
||||
@param axes Axes that starts and ends apply to.
|
||||
@param starts If starts is a list or tuple, the elements of it should be
|
||||
integers or Tensors with shape [1]. If starts is an Tensor, it should
|
||||
be an 1-D Tensor. It represents starting indices of corresponding axis
|
||||
in axes
|
||||
@param ends If ends is a list or tuple, the elements of it should be
|
||||
integers or Tensors with shape [1]. If ends is an Tensor, it should
|
||||
be an 1-D Tensor . It represents ending indices of corresponding axis
|
||||
in axes.
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
|
||||
FASTDEPLOY_DECL void Slice(const FDTensor& x, const std::vector<int64_t>& axes,
|
||||
const std::vector<int64_t>& starts,
|
||||
const std::vector<int64_t>& ends, FDTensor* out);
|
||||
|
||||
FASTDEPLOY_DECL void Slice(const FDTensor& x, const std::vector<int64_t>& axes,
|
||||
const std::vector<int64_t>& index, FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
29
3rdparty/include/fastdeploy/function/softmax.h
vendored
Normal file
29
3rdparty/include/fastdeploy/function/softmax.h
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
/** Excute the softmax operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param axis The axis to be computed softmax value.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Softmax(const FDTensor& x, FDTensor* out, int axis = -1);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
47
3rdparty/include/fastdeploy/function/sort.h
vendored
Normal file
47
3rdparty/include/fastdeploy/function/sort.h
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/**
|
||||
* @brief Performs sorting on the input tensor along the given axis and outputs
|
||||
* two tensors, Output(Out) and Output(Indices). They reserve the same
|
||||
* shape with Input(X), and Output(Out) represents the sorted tensor
|
||||
* while Output(Indices) gives the sorted order along the given axis
|
||||
* Attr(axis).
|
||||
* @param x The input of sort
|
||||
* @param out The sorted tensor of sort op, with the same shape as
|
||||
* x
|
||||
* @param indices The indices of a tensor giving the sorted order, with
|
||||
* the same shape as x
|
||||
* @param axis The axis along which to sort the tensor.
|
||||
* When axis < 0, the actual axis will be the |axis|'th
|
||||
* counting backwards
|
||||
* @param descending The descending attribute is a flag to tell
|
||||
* algorithm how to sort the input data.
|
||||
* If descending is true, will sort by descending order,
|
||||
* else if false, sort by ascending order
|
||||
* @param indices_type The data type of indices, default to int64
|
||||
*/
|
||||
FASTDEPLOY_DECL void Sort(const FDTensor& x, FDTensor* out, FDTensor* indices,
|
||||
int axis = 0, bool descending = false,
|
||||
FDDataType indices_type = FDDataType::INT64);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
36
3rdparty/include/fastdeploy/function/split.h
vendored
Normal file
36
3rdparty/include/fastdeploy/function/split.h
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Split the input tensor into multiple sub-Tensors.
|
||||
@param x The input tensor.
|
||||
@param num_or_sections f num_or_sections is an int, then num_or_sections
|
||||
indicates the number of equal sized sub-Tensors that the x will
|
||||
be divided into.
|
||||
@param out The output vector tensor which stores the result.
|
||||
@param axis Axis which will be splitted.
|
||||
*/
|
||||
|
||||
FASTDEPLOY_DECL void Split(const FDTensor& x,
|
||||
const std::vector<int>& num_or_sections,
|
||||
std::vector<FDTensor>* out, int axis = 0);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
36
3rdparty/include/fastdeploy/function/tile.h
vendored
Normal file
36
3rdparty/include/fastdeploy/function/tile.h
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
|
||||
/** Construct a new Tensor by repeating x the number of times given by
|
||||
** repeat_times. After tiling, the value of the i’th dimension of the
|
||||
** output is equal to x.shape[i]*repeat_times[i]. Both the number of
|
||||
** dimensions of x and the number of elements in repeat_times should
|
||||
** be less than or equal to 6.Support all data types.
|
||||
@param x The input tensor.
|
||||
@param repeat_times The lower bound
|
||||
@param out The output tensor which stores the result.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Tile(const FDTensor& x,
|
||||
const std::vector<int64_t>& repeat_times,
|
||||
FDTensor* out);
|
||||
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
29
3rdparty/include/fastdeploy/function/transpose.h
vendored
Normal file
29
3rdparty/include/fastdeploy/function/transpose.h
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/fd_tensor.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace function {
|
||||
/** Excute the transpose operation for input FDTensor along given dims.
|
||||
@param x The input tensor.
|
||||
@param out The output tensor which stores the result.
|
||||
@param dims The vector of axis which the input tensor will transpose.
|
||||
*/
|
||||
FASTDEPLOY_DECL void Transpose(const FDTensor& x, FDTensor* out,
|
||||
const std::vector<int64_t>& dims);
|
||||
} // namespace function
|
||||
} // namespace fastdeploy
|
||||
21
3rdparty/include/fastdeploy/pipeline.h
vendored
Normal file
21
3rdparty/include/fastdeploy/pipeline.h
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/config.h"
|
||||
#ifdef ENABLE_VISION
|
||||
#include "fastdeploy/pipeline/pptinypose/pipeline.h"
|
||||
#endif
|
||||
|
||||
#include "fastdeploy/vision/visualize/visualize.h"
|
||||
67
3rdparty/include/fastdeploy/pipeline/pptinypose/pipeline.h
vendored
Normal file
67
3rdparty/include/fastdeploy/pipeline/pptinypose/pipeline.h
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/fastdeploy_model.h"
|
||||
#include "fastdeploy/vision/common/result.h"
|
||||
#include "fastdeploy/vision/detection/ppdet/model.h"
|
||||
#include "fastdeploy/vision/keypointdet/pptinypose/pptinypose.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
/** \brief All pipeline model APIs are defined inside this namespace
|
||||
*
|
||||
*/
|
||||
namespace pipeline {
|
||||
|
||||
/*! @brief PPTinyPose Pipeline object used when to load a detection model + pptinypose model
|
||||
*/
|
||||
class FASTDEPLOY_DECL PPTinyPose {
|
||||
public:
|
||||
/** \brief Set initialized detection model object and pptinypose model object
|
||||
*
|
||||
* \param[in] det_model Initialized detection model object
|
||||
* \param[in] pptinypose_model Initialized pptinypose model object
|
||||
*/
|
||||
PPTinyPose(
|
||||
fastdeploy::vision::detection::PicoDet* det_model,
|
||||
fastdeploy::vision::keypointdetection::PPTinyPose* pptinypose_model);
|
||||
|
||||
/** \brief Predict the keypoint detection result for an input image
|
||||
*
|
||||
* \param[in] img The input image data, comes from cv::imread()
|
||||
* \param[in] result The output keypoint detection result will be writen to this structure
|
||||
* \return true if the prediction successed, otherwise false
|
||||
*/
|
||||
virtual bool Predict(cv::Mat* img,
|
||||
fastdeploy::vision::KeyPointDetectionResult* result);
|
||||
|
||||
/* \brief The score threshold for detectin model to filter bbox before inputting pptinypose model
|
||||
*/
|
||||
float detection_model_score_threshold = 0;
|
||||
|
||||
protected:
|
||||
fastdeploy::vision::detection::PicoDet* detector_ = nullptr;
|
||||
fastdeploy::vision::keypointdetection::PPTinyPose* pptinypose_model_ =
|
||||
nullptr;
|
||||
|
||||
virtual bool Detect(cv::Mat* img,
|
||||
fastdeploy::vision::DetectionResult* result);
|
||||
virtual bool KeypointDetect(
|
||||
cv::Mat* img, fastdeploy::vision::KeyPointDetectionResult* result,
|
||||
fastdeploy::vision::DetectionResult& detection_result);
|
||||
};
|
||||
|
||||
} // namespace pipeline
|
||||
} // namespace fastdeploy
|
||||
471
3rdparty/include/fastdeploy/runtime.h
vendored
Normal file
471
3rdparty/include/fastdeploy/runtime.h
vendored
Normal file
@@ -0,0 +1,471 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
/*! \file runtime.h
|
||||
\brief A brief file description.
|
||||
|
||||
More details
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "backends/rknpu/rknpu2/rknpu2_config.h"
|
||||
#include "fastdeploy/backends/backend.h"
|
||||
#include "fastdeploy/utils/perf.h"
|
||||
|
||||
/** \brief All C++ FastDeploy APIs are defined inside this namespace
|
||||
*
|
||||
*/
|
||||
namespace fastdeploy {
|
||||
|
||||
/*! Inference backend supported in FastDeploy */
|
||||
enum Backend {
|
||||
UNKNOWN, ///< Unknown inference backend
|
||||
ORT, ///< ONNX Runtime, support Paddle/ONNX format model, CPU / Nvidia GPU
|
||||
TRT, ///< TensorRT, support Paddle/ONNX format model, Nvidia GPU only
|
||||
PDINFER, ///< Paddle Inference, support Paddle format model, CPU / Nvidia GPU
|
||||
POROS, ///< Poros, support TorchScript format model, CPU / Nvidia GPU
|
||||
OPENVINO, ///< Intel OpenVINO, support Paddle/ONNX format, CPU only
|
||||
LITE, ///< Paddle Lite, support Paddle format model, ARM CPU only
|
||||
RKNPU2, ///< RKNPU2, support RKNN format model, Rockchip NPU only
|
||||
};
|
||||
|
||||
FASTDEPLOY_DECL std::ostream& operator<<(std::ostream& out,
|
||||
const Backend& backend);
|
||||
|
||||
/*! Paddle Lite power mode for mobile device. */
|
||||
enum LitePowerMode {
|
||||
LITE_POWER_HIGH = 0, ///< Use Lite Backend with high power mode
|
||||
LITE_POWER_LOW = 1, ///< Use Lite Backend with low power mode
|
||||
LITE_POWER_FULL = 2, ///< Use Lite Backend with full power mode
|
||||
LITE_POWER_NO_BIND = 3, ///< Use Lite Backend with no bind power mode
|
||||
LITE_POWER_RAND_HIGH = 4, ///< Use Lite Backend with rand high mode
|
||||
LITE_POWER_RAND_LOW = 5 ///< Use Lite Backend with rand low power mode
|
||||
};
|
||||
|
||||
FASTDEPLOY_DECL std::string Str(const Backend& b);
|
||||
FASTDEPLOY_DECL std::string Str(const ModelFormat& f);
|
||||
|
||||
/**
|
||||
* @brief Get all the available inference backend in FastDeploy
|
||||
*/
|
||||
FASTDEPLOY_DECL std::vector<Backend> GetAvailableBackends();
|
||||
|
||||
/**
|
||||
* @brief Check if the inference backend available
|
||||
*/
|
||||
FASTDEPLOY_DECL bool IsBackendAvailable(const Backend& backend);
|
||||
|
||||
bool CheckModelFormat(const std::string& model_file,
|
||||
const ModelFormat& model_format);
|
||||
ModelFormat GuessModelFormat(const std::string& model_file);
|
||||
|
||||
/*! @brief Option object used when create a new Runtime object
|
||||
*/
|
||||
struct FASTDEPLOY_DECL RuntimeOption {
|
||||
/** \brief Set path of model file and parameter file
|
||||
*
|
||||
* \param[in] model_path Path of model file, e.g ResNet50/model.pdmodel for Paddle format model / ResNet50/model.onnx for ONNX format model
|
||||
* \param[in] params_path Path of parameter file, this only used when the model format is Paddle, e.g Resnet50/model.pdiparams
|
||||
* \param[in] format Format of the loaded model
|
||||
*/
|
||||
void SetModelPath(const std::string& model_path,
|
||||
const std::string& params_path = "",
|
||||
const ModelFormat& format = ModelFormat::PADDLE);
|
||||
|
||||
/// Use cpu to inference, the runtime will inference on CPU by default
|
||||
void UseCpu();
|
||||
|
||||
/// Use Nvidia GPU to inference
|
||||
void UseGpu(int gpu_id = 0);
|
||||
|
||||
void UseRKNPU2(fastdeploy::rknpu2::CpuName rknpu2_name =
|
||||
fastdeploy::rknpu2::CpuName::RK3588,
|
||||
fastdeploy::rknpu2::CoreMask rknpu2_core =
|
||||
fastdeploy::rknpu2::CoreMask::RKNN_NPU_CORE_0);
|
||||
|
||||
/// Use TimVX to inference
|
||||
void UseTimVX();
|
||||
|
||||
void SetExternalStream(void* external_stream);
|
||||
|
||||
/*
|
||||
* @brief Set number of cpu threads while inference on CPU, by default it will decided by the different backends
|
||||
*/
|
||||
void SetCpuThreadNum(int thread_num);
|
||||
|
||||
/// Set ORT graph opt level, default is decide by ONNX Runtime itself
|
||||
void SetOrtGraphOptLevel(int level = -1);
|
||||
|
||||
/// Set Paddle Inference as inference backend, support CPU/GPU
|
||||
void UsePaddleBackend();
|
||||
|
||||
/// Wrapper function of UsePaddleBackend()
|
||||
void UsePaddleInferBackend() { return UsePaddleBackend(); }
|
||||
|
||||
/// Set ONNX Runtime as inference backend, support CPU/GPU
|
||||
void UseOrtBackend();
|
||||
|
||||
/// Set TensorRT as inference backend, only support GPU
|
||||
void UseTrtBackend();
|
||||
|
||||
/// Set Poros backend as inference backend, support CPU/GPU
|
||||
void UsePorosBackend();
|
||||
|
||||
/// Set OpenVINO as inference backend, only support CPU
|
||||
void UseOpenVINOBackend();
|
||||
|
||||
/// Set Paddle Lite as inference backend, only support arm cpu
|
||||
void UseLiteBackend();
|
||||
|
||||
/// Wrapper function of UseLiteBackend()
|
||||
void UsePaddleLiteBackend() { return UseLiteBackend(); }
|
||||
|
||||
/// Set mkldnn switch while using Paddle Inference as inference backend
|
||||
void SetPaddleMKLDNN(bool pd_mkldnn = true);
|
||||
|
||||
/*
|
||||
* @brief If TensorRT backend is used, EnablePaddleToTrt will change to use Paddle Inference backend, and use its integrated TensorRT instead.
|
||||
*/
|
||||
void EnablePaddleToTrt();
|
||||
|
||||
/**
|
||||
* @brief Delete pass by name while using Paddle Inference as inference backend, this can be called multiple times to delete a set of passes
|
||||
*/
|
||||
void DeletePaddleBackendPass(const std::string& delete_pass_name);
|
||||
|
||||
/**
|
||||
* @brief Enable print debug information while using Paddle Inference as inference backend, the backend disable the debug information by default
|
||||
*/
|
||||
void EnablePaddleLogInfo();
|
||||
|
||||
/**
|
||||
* @brief Disable print debug information while using Paddle Inference as inference backend
|
||||
*/
|
||||
void DisablePaddleLogInfo();
|
||||
|
||||
/**
|
||||
* @brief Set shape cache size while using Paddle Inference with mkldnn, by default it will cache all the difference shape
|
||||
*/
|
||||
void SetPaddleMKLDNNCacheSize(int size);
|
||||
|
||||
/**
|
||||
* @brief Set device name for OpenVINO, default 'CPU', can also be 'AUTO', 'GPU', 'GPU.1'....
|
||||
*/
|
||||
void SetOpenVINODevice(const std::string& name = "CPU");
|
||||
|
||||
/**
|
||||
* @brief Set shape info for OpenVINO
|
||||
*/
|
||||
void SetOpenVINOShapeInfo(
|
||||
const std::map<std::string, std::vector<int64_t>>& shape_info) {
|
||||
ov_shape_infos = shape_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief While use OpenVINO backend with intel GPU, use this interface to specify operators run on CPU
|
||||
*/
|
||||
void SetOpenVINOCpuOperators(const std::vector<std::string>& operators) {
|
||||
ov_cpu_operators = operators;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set optimzed model dir for Paddle Lite backend.
|
||||
*/
|
||||
void SetLiteOptimizedModelDir(const std::string& optimized_model_dir);
|
||||
|
||||
/**
|
||||
* @brief Set nnadapter subgraph partition path for Paddle Lite backend.
|
||||
*/
|
||||
void SetLiteSubgraphPartitionPath(
|
||||
const std::string& nnadapter_subgraph_partition_config_path);
|
||||
|
||||
/**
|
||||
* @brief enable half precision while use paddle lite backend
|
||||
*/
|
||||
void EnableLiteFP16();
|
||||
|
||||
/**
|
||||
* @brief disable half precision, change to full precision(float32)
|
||||
*/
|
||||
void DisableLiteFP16();
|
||||
|
||||
/**
|
||||
* @brief enable int8 precision while use paddle lite backend
|
||||
*/
|
||||
void EnableLiteInt8();
|
||||
|
||||
/**
|
||||
* @brief disable int8 precision, change to full precision(float32)
|
||||
*/
|
||||
void DisableLiteInt8();
|
||||
|
||||
/**
|
||||
* @brief Set power mode while using Paddle Lite as inference backend, mode(0: LITE_POWER_HIGH; 1: LITE_POWER_LOW; 2: LITE_POWER_FULL; 3: LITE_POWER_NO_BIND, 4: LITE_POWER_RAND_HIGH; 5: LITE_POWER_RAND_LOW, refer [paddle lite](https://paddle-lite.readthedocs.io/zh/latest/api_reference/cxx_api_doc.html#set-power-mode) for more details)
|
||||
*/
|
||||
void SetLitePowerMode(LitePowerMode mode);
|
||||
|
||||
/** \brief Set shape range of input tensor for the model that contain dynamic input shape while using TensorRT backend
|
||||
*
|
||||
* \param[in] input_name The name of input for the model which is dynamic shape
|
||||
* \param[in] min_shape The minimal shape for the input tensor
|
||||
* \param[in] opt_shape The optimized shape for the input tensor, just set the most common shape, if set as default value, it will keep same with min_shape
|
||||
* \param[in] max_shape The maximum shape for the input tensor, if set as default value, it will keep same with min_shape
|
||||
*/
|
||||
void SetTrtInputShape(
|
||||
const std::string& input_name, const std::vector<int32_t>& min_shape,
|
||||
const std::vector<int32_t>& opt_shape = std::vector<int32_t>(),
|
||||
const std::vector<int32_t>& max_shape = std::vector<int32_t>());
|
||||
|
||||
/// Set max_workspace_size for TensorRT, default 1<<30
|
||||
void SetTrtMaxWorkspaceSize(size_t trt_max_workspace_size);
|
||||
|
||||
/// Set max_batch_size for TensorRT, default 32
|
||||
void SetTrtMaxBatchSize(size_t max_batch_size);
|
||||
|
||||
/**
|
||||
* @brief Enable FP16 inference while using TensorRT backend. Notice: not all the GPU device support FP16, on those device doesn't support FP16, FastDeploy will fallback to FP32 automaticly
|
||||
*/
|
||||
void EnableTrtFP16();
|
||||
|
||||
/// Disable FP16 inference while using TensorRT backend
|
||||
void DisableTrtFP16();
|
||||
|
||||
/**
|
||||
* @brief Set cache file path while use TensorRT backend. Loadding a Paddle/ONNX model and initialize TensorRT will take a long time, by this interface it will save the tensorrt engine to `cache_file_path`, and load it directly while execute the code again
|
||||
*/
|
||||
void SetTrtCacheFile(const std::string& cache_file_path);
|
||||
|
||||
/**
|
||||
* @brief Enable pinned memory. Pinned memory can be utilized to speedup the data transfer between CPU and GPU. Currently it's only suppurted in TRT backend and Paddle Inference backend.
|
||||
*/
|
||||
void EnablePinnedMemory();
|
||||
|
||||
/**
|
||||
* @brief Disable pinned memory
|
||||
*/
|
||||
void DisablePinnedMemory();
|
||||
|
||||
/**
|
||||
* @brief Enable to collect shape in paddle trt backend
|
||||
*/
|
||||
void EnablePaddleTrtCollectShape();
|
||||
|
||||
/**
|
||||
* @brief Disable to collect shape in paddle trt backend
|
||||
*/
|
||||
void DisablePaddleTrtCollectShape();
|
||||
|
||||
/**
|
||||
* @brief Prevent ops running in paddle trt backend
|
||||
*/
|
||||
void DisablePaddleTrtOPs(const std::vector<std::string>& ops);
|
||||
|
||||
/*
|
||||
* @brief Set number of streams by the OpenVINO backends
|
||||
*/
|
||||
void SetOpenVINOStreams(int num_streams);
|
||||
|
||||
/** \Use Graphcore IPU to inference.
|
||||
*
|
||||
* \param[in] device_num the number of IPUs.
|
||||
* \param[in] micro_batch_size the batch size in the graph, only work when graph has no batch shape info.
|
||||
* \param[in] enable_pipelining enable pipelining.
|
||||
* \param[in] batches_per_step the number of batches per run in pipelining.
|
||||
*/
|
||||
void UseIpu(int device_num = 1, int micro_batch_size = 1,
|
||||
bool enable_pipelining = false, int batches_per_step = 1);
|
||||
|
||||
/** \brief Set IPU config.
|
||||
*
|
||||
* \param[in] enable_fp16 enable fp16.
|
||||
* \param[in] replica_num the number of graph replication.
|
||||
* \param[in] available_memory_proportion the available memory proportion for matmul/conv.
|
||||
* \param[in] enable_half_partial enable fp16 partial for matmul, only work with fp16.
|
||||
*/
|
||||
void SetIpuConfig(bool enable_fp16 = false, int replica_num = 1,
|
||||
float available_memory_proportion = 1.0,
|
||||
bool enable_half_partial = false);
|
||||
|
||||
Backend backend = Backend::UNKNOWN;
|
||||
// for cpu inference and preprocess
|
||||
// default will let the backend choose their own default value
|
||||
int cpu_thread_num = -1;
|
||||
int device_id = 0;
|
||||
|
||||
Device device = Device::CPU;
|
||||
|
||||
void* external_stream_ = nullptr;
|
||||
|
||||
bool enable_pinned_memory = false;
|
||||
|
||||
// ======Only for ORT Backend========
|
||||
// -1 means use default value by ort
|
||||
// 0: ORT_DISABLE_ALL 1: ORT_ENABLE_BASIC 2: ORT_ENABLE_EXTENDED 3:
|
||||
// ORT_ENABLE_ALL
|
||||
int ort_graph_opt_level = -1;
|
||||
int ort_inter_op_num_threads = -1;
|
||||
// 0: ORT_SEQUENTIAL 1: ORT_PARALLEL
|
||||
int ort_execution_mode = -1;
|
||||
|
||||
// ======Only for Paddle Backend=====
|
||||
bool pd_enable_mkldnn = true;
|
||||
bool pd_enable_log_info = false;
|
||||
bool pd_enable_trt = false;
|
||||
bool pd_collect_shape = false;
|
||||
int pd_mkldnn_cache_size = 1;
|
||||
std::vector<std::string> pd_delete_pass_names;
|
||||
|
||||
// ======Only for Paddle IPU Backend =======
|
||||
int ipu_device_num = 1;
|
||||
int ipu_micro_batch_size = 1;
|
||||
bool ipu_enable_pipelining = false;
|
||||
int ipu_batches_per_step = 1;
|
||||
bool ipu_enable_fp16 = false;
|
||||
int ipu_replica_num = 1;
|
||||
float ipu_available_memory_proportion = 1.0;
|
||||
bool ipu_enable_half_partial = false;
|
||||
|
||||
// ======Only for Paddle-Lite Backend=====
|
||||
// 0: LITE_POWER_HIGH 1: LITE_POWER_LOW 2: LITE_POWER_FULL
|
||||
// 3: LITE_POWER_NO_BIND 4: LITE_POWER_RAND_HIGH
|
||||
// 5: LITE_POWER_RAND_LOW
|
||||
LitePowerMode lite_power_mode = LitePowerMode::LITE_POWER_NO_BIND;
|
||||
// enable int8 or not
|
||||
bool lite_enable_int8 = false;
|
||||
// enable fp16 or not
|
||||
bool lite_enable_fp16 = false;
|
||||
// optimized model dir for CxxConfig
|
||||
std::string lite_optimized_model_dir = "";
|
||||
std::string lite_nnadapter_subgraph_partition_config_path = "";
|
||||
bool enable_timvx = false;
|
||||
|
||||
// ======Only for Trt Backend=======
|
||||
std::map<std::string, std::vector<int32_t>> trt_max_shape;
|
||||
std::map<std::string, std::vector<int32_t>> trt_min_shape;
|
||||
std::map<std::string, std::vector<int32_t>> trt_opt_shape;
|
||||
std::string trt_serialize_file = "";
|
||||
bool trt_enable_fp16 = false;
|
||||
bool trt_enable_int8 = false;
|
||||
size_t trt_max_batch_size = 32;
|
||||
size_t trt_max_workspace_size = 1 << 30;
|
||||
// ======Only for PaddleTrt Backend=======
|
||||
std::vector<std::string> trt_disabled_ops_{};
|
||||
|
||||
// ======Only for Poros Backend=======
|
||||
bool is_dynamic = false;
|
||||
bool long_to_int = true;
|
||||
bool use_nvidia_tf32 = false;
|
||||
int unconst_ops_thres = -1;
|
||||
std::string poros_file = "";
|
||||
|
||||
// ======Only for OpenVINO Backend=======
|
||||
int ov_num_streams = 0;
|
||||
std::string openvino_device = "CPU";
|
||||
std::map<std::string, std::vector<int64_t>> ov_shape_infos;
|
||||
std::vector<std::string> ov_cpu_operators;
|
||||
|
||||
// ======Only for RKNPU2 Backend=======
|
||||
fastdeploy::rknpu2::CpuName rknpu2_cpu_name_ =
|
||||
fastdeploy::rknpu2::CpuName::RK3588;
|
||||
fastdeploy::rknpu2::CoreMask rknpu2_core_mask_ =
|
||||
fastdeploy::rknpu2::CoreMask::RKNN_NPU_CORE_AUTO;
|
||||
|
||||
std::string model_file = ""; // Path of model file
|
||||
std::string params_file = ""; // Path of parameters file, can be empty
|
||||
// format of input model
|
||||
ModelFormat model_format = ModelFormat::AUTOREC;
|
||||
};
|
||||
|
||||
/*! @brief Runtime object used to inference the loaded model on different devices
|
||||
*/
|
||||
struct FASTDEPLOY_DECL Runtime {
|
||||
public:
|
||||
/// Intialize a Runtime object with RuntimeOption
|
||||
bool Init(const RuntimeOption& _option);
|
||||
|
||||
/** \brief Inference the model by the input data, and write to the output
|
||||
*
|
||||
* \param[in] input_tensors Notice the FDTensor::name should keep same with the model's input
|
||||
* \param[in] output_tensors Inference results
|
||||
* \return true if the inference successed, otherwise false
|
||||
*/
|
||||
bool Infer(std::vector<FDTensor>& input_tensors,
|
||||
std::vector<FDTensor>* output_tensors);
|
||||
|
||||
/** \brief No params inference the model.
|
||||
*
|
||||
* the input and output data need to pass through the BindInputTensor and GetOutputTensor interfaces.
|
||||
*/
|
||||
bool Infer();
|
||||
|
||||
/** \brief Compile TorchScript Module, only for Poros backend
|
||||
*
|
||||
* \param[in] prewarm_tensors Prewarm datas for compile
|
||||
* \param[in] _option Runtime option
|
||||
* \return true if compile successed, otherwise false
|
||||
*/
|
||||
bool Compile(std::vector<std::vector<FDTensor>>& prewarm_tensors,
|
||||
const RuntimeOption& _option);
|
||||
|
||||
/** \brief Get number of inputs
|
||||
*/
|
||||
int NumInputs() { return backend_->NumInputs(); }
|
||||
/** \brief Get number of outputs
|
||||
*/
|
||||
int NumOutputs() { return backend_->NumOutputs(); }
|
||||
/** \brief Get input information by index
|
||||
*/
|
||||
TensorInfo GetInputInfo(int index);
|
||||
/** \brief Get output information by index
|
||||
*/
|
||||
TensorInfo GetOutputInfo(int index);
|
||||
/** \brief Get all the input information
|
||||
*/
|
||||
std::vector<TensorInfo> GetInputInfos();
|
||||
/** \brief Get all the output information
|
||||
*/
|
||||
std::vector<TensorInfo> GetOutputInfos();
|
||||
/** \brief Bind FDTensor by name, no copy and share input memory
|
||||
*/
|
||||
void BindInputTensor(const std::string& name, FDTensor& input);
|
||||
/** \brief Get output FDTensor by name, no copy and share backend output memory
|
||||
*/
|
||||
FDTensor* GetOutputTensor(const std::string& name);
|
||||
|
||||
/** \brief Clone new Runtime when multiple instances of the same model are created
|
||||
*
|
||||
* \param[in] stream CUDA Stream, defualt param is nullptr
|
||||
* \return new Runtime* by this clone
|
||||
*/
|
||||
Runtime* Clone(void* stream = nullptr, int device_id = -1);
|
||||
|
||||
RuntimeOption option;
|
||||
|
||||
private:
|
||||
void CreateOrtBackend();
|
||||
void CreatePaddleBackend();
|
||||
void CreateTrtBackend();
|
||||
void CreateOpenVINOBackend();
|
||||
void CreateLiteBackend();
|
||||
void CreateRKNPU2Backend();
|
||||
std::unique_ptr<BaseBackend> backend_;
|
||||
std::vector<FDTensor> input_tensors_;
|
||||
std::vector<FDTensor> output_tensors_;
|
||||
};
|
||||
} // namespace fastdeploy
|
||||
19
3rdparty/include/fastdeploy/text.h
vendored
Normal file
19
3rdparty/include/fastdeploy/text.h
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/config.h"
|
||||
#ifdef ENABLE_TEXT
|
||||
#include "fastdeploy/text/uie/model.h"
|
||||
#endif
|
||||
52
3rdparty/include/fastdeploy/utils/axis_utils.h
vendored
Normal file
52
3rdparty/include/fastdeploy/utils/axis_utils.h
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
static inline int CanonicalAxis(const int axis, const int rank) {
|
||||
if (axis < 0) {
|
||||
return axis + rank;
|
||||
}
|
||||
return axis;
|
||||
}
|
||||
|
||||
static inline int SizeToAxis(const int axis, const std::vector<int64_t>& dims) {
|
||||
int size = 1;
|
||||
for (int i = 0; i < axis; i++) {
|
||||
size *= dims[i];
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
static inline int SizeFromAxis(const int axis,
|
||||
const std::vector<int64_t>& dims) {
|
||||
int size = 1;
|
||||
for (int i = axis; i < dims.size(); i++) {
|
||||
size *= dims[i];
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
static inline int SizeOutAxis(const int axis,
|
||||
const std::vector<int64_t>& dims) {
|
||||
int size = 1;
|
||||
for (int i = axis + 1; i < dims.size(); i++) {
|
||||
size *= dims[i];
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
} // namespace fastdeploy
|
||||
74
3rdparty/include/fastdeploy/utils/path.h
vendored
Normal file
74
3rdparty/include/fastdeploy/utils/path.h
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#ifdef _MSC_VER
|
||||
#define PATH_SEP "\\"
|
||||
#else
|
||||
#define PATH_SEP "/"
|
||||
#endif
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
inline std::string PathJoin(const std::vector<std::string>& paths,
|
||||
const std::string& sep = PATH_SEP) {
|
||||
if (paths.size() == 1) {
|
||||
return paths[0];
|
||||
}
|
||||
std::string filepath = "";
|
||||
for (const auto& path : paths) {
|
||||
if (filepath == "") {
|
||||
filepath += path;
|
||||
continue;
|
||||
}
|
||||
if (path[0] == sep[0] || filepath.back() == sep[0]) {
|
||||
filepath += path;
|
||||
} else {
|
||||
filepath += sep + path;
|
||||
}
|
||||
}
|
||||
return filepath;
|
||||
}
|
||||
|
||||
inline std::string PathJoin(const std::string& folder,
|
||||
const std::string& filename,
|
||||
const std::string& sep = PATH_SEP) {
|
||||
return PathJoin(std::vector<std::string>{folder, filename}, sep);
|
||||
}
|
||||
|
||||
inline std::string GetDirFromPath(const std::string& path) {
|
||||
auto pos = path.find_last_of(PATH_SEP);
|
||||
if (pos == std::string::npos) {
|
||||
return "";
|
||||
}
|
||||
// The root path in UNIX systems
|
||||
if (pos == 0) {
|
||||
return "/";
|
||||
}
|
||||
return path.substr(0, pos);
|
||||
}
|
||||
|
||||
inline bool CheckFileExists(const std::string& path) {
|
||||
std::fstream fin(path, std::ios::in);
|
||||
if (!fin) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace fastdeploy
|
||||
49
3rdparty/include/fastdeploy/utils/perf.h
vendored
Normal file
49
3rdparty/include/fastdeploy/utils/perf.h
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/utils/utils.h"
|
||||
#include <chrono> // NOLINT
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
class FASTDEPLOY_DECL TimeCounter {
|
||||
public:
|
||||
void Start() { begin_ = std::chrono::system_clock::now(); }
|
||||
|
||||
void End() { end_ = std::chrono::system_clock::now(); }
|
||||
|
||||
double Duration() {
|
||||
auto duration =
|
||||
std::chrono::duration_cast<std::chrono::microseconds>(end_ - begin_);
|
||||
return static_cast<double>(duration.count()) *
|
||||
std::chrono::microseconds::period::num /
|
||||
std::chrono::microseconds::period::den;
|
||||
}
|
||||
|
||||
void PrintInfo(const std::string& prefix = "TimeCounter: ",
|
||||
bool print_out = true) {
|
||||
if (!print_out) {
|
||||
return;
|
||||
}
|
||||
FDLogger() << prefix << " duration = " << Duration() << "s." << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
std::chrono::time_point<std::chrono::system_clock> begin_;
|
||||
std::chrono::time_point<std::chrono::system_clock> end_;
|
||||
};
|
||||
|
||||
} // namespace fastdeploy
|
||||
58
3rdparty/include/fastdeploy/utils/unique_ptr.h
vendored
Normal file
58
3rdparty/include/fastdeploy/utils/unique_ptr.h
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License. */
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace utils {
|
||||
// Trait to select overloads and return types for MakeUnique.
|
||||
template <typename T>
|
||||
struct MakeUniqueResult {
|
||||
using scalar = std::unique_ptr<T>;
|
||||
};
|
||||
template <typename T>
|
||||
struct MakeUniqueResult<T[]> {
|
||||
using array = std::unique_ptr<T[]>;
|
||||
};
|
||||
template <typename T, size_t N>
|
||||
struct MakeUniqueResult<T[N]> {
|
||||
using invalid = void;
|
||||
};
|
||||
|
||||
// MakeUnique<T>(...) is an early implementation of C++14 std::make_unique.
|
||||
// It is designed to be 100% compatible with std::make_unique so that the
|
||||
// eventual switchover will be a simple renaming operation.
|
||||
template <typename T, typename... Args>
|
||||
typename MakeUniqueResult<T>::scalar make_unique(Args &&... args) { // NOLINT
|
||||
return std::unique_ptr<T>(
|
||||
new T(std::forward<Args>(args)...)); // NOLINT(build/c++11)
|
||||
}
|
||||
|
||||
// Overload for array of unknown bound.
|
||||
// The allocation of arrays needs to use the array form of new,
|
||||
// and cannot take element constructor arguments.
|
||||
template <typename T>
|
||||
typename MakeUniqueResult<T>::array make_unique(size_t n) {
|
||||
return std::unique_ptr<T>(new typename std::remove_extent<T>::type[n]());
|
||||
}
|
||||
|
||||
// Reject arrays of known bound.
|
||||
template <typename T, typename... Args>
|
||||
typename MakeUniqueResult<T>::invalid make_unique(Args &&... /* args */) =
|
||||
delete; // NOLINT
|
||||
|
||||
} // namespace utils
|
||||
} // namespace fastdeploy
|
||||
218
3rdparty/include/fastdeploy/utils/utils.h
vendored
Normal file
218
3rdparty/include/fastdeploy/utils/utils.h
vendored
Normal file
@@ -0,0 +1,218 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdio>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include <android/log.h> // NOLINT
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
#ifdef FASTDEPLOY_LIB
|
||||
#define FASTDEPLOY_DECL __declspec(dllexport)
|
||||
#else
|
||||
#define FASTDEPLOY_DECL __declspec(dllimport)
|
||||
#endif // FASTDEPLOY_LIB
|
||||
#else
|
||||
#define FASTDEPLOY_DECL __attribute__((visibility("default")))
|
||||
#endif // _WIN32
|
||||
|
||||
namespace fastdeploy {
|
||||
|
||||
class FASTDEPLOY_DECL FDLogger {
|
||||
public:
|
||||
FDLogger() {
|
||||
line_ = "";
|
||||
prefix_ = "[FastDeploy]";
|
||||
verbose_ = true;
|
||||
}
|
||||
explicit FDLogger(bool verbose, const std::string& prefix = "[FastDeploy]");
|
||||
|
||||
template <typename T> FDLogger& operator<<(const T& val) {
|
||||
if (!verbose_) {
|
||||
return *this;
|
||||
}
|
||||
std::stringstream ss;
|
||||
ss << val;
|
||||
line_ += ss.str();
|
||||
return *this;
|
||||
}
|
||||
|
||||
FDLogger& operator<<(std::ostream& (*os)(std::ostream&));
|
||||
|
||||
~FDLogger() {
|
||||
if (!verbose_ && line_ != "") {
|
||||
std::cout << line_ << std::endl;
|
||||
#ifdef __ANDROID__
|
||||
__android_log_print(ANDROID_LOG_INFO, prefix_.c_str(), "%s",
|
||||
line_.c_str());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::string line_;
|
||||
std::string prefix_;
|
||||
bool verbose_ = true;
|
||||
};
|
||||
|
||||
FASTDEPLOY_DECL bool ReadBinaryFromFile(const std::string& file,
|
||||
std::string* contents);
|
||||
|
||||
#ifndef __REL_FILE__
|
||||
#define __REL_FILE__ __FILE__
|
||||
#endif
|
||||
|
||||
#define FDERROR \
|
||||
FDLogger(true, "[ERROR]") \
|
||||
<< __REL_FILE__ << "(" << __LINE__ << ")::" << __FUNCTION__ << "\t"
|
||||
|
||||
#define FDWARNING \
|
||||
FDLogger(true, "[WARNING]") \
|
||||
<< __REL_FILE__ << "(" << __LINE__ << ")::" << __FUNCTION__ << "\t"
|
||||
|
||||
#define FDINFO \
|
||||
FDLogger(true, "[INFO]") << __REL_FILE__ << "(" << __LINE__ \
|
||||
<< ")::" << __FUNCTION__ << "\t"
|
||||
|
||||
#define FDASSERT(condition, format, ...) \
|
||||
if (!(condition)) { \
|
||||
int n = std::snprintf(nullptr, 0, format, ##__VA_ARGS__); \
|
||||
std::vector<char> buffer(n + 1); \
|
||||
std::snprintf(buffer.data(), n + 1, format, ##__VA_ARGS__); \
|
||||
FDERROR << buffer.data() << std::endl; \
|
||||
std::abort(); \
|
||||
}
|
||||
|
||||
///////// Basic Marco ///////////
|
||||
|
||||
#define FD_PRIVATE_CASE_TYPE_USING_HINT(NAME, enum_type, type, HINT, ...) \
|
||||
case enum_type: { \
|
||||
using HINT = type; \
|
||||
__VA_ARGS__(); \
|
||||
break; \
|
||||
}
|
||||
|
||||
#define FD_PRIVATE_CASE_TYPE(NAME, enum_type, type, ...) \
|
||||
FD_PRIVATE_CASE_TYPE_USING_HINT(NAME, enum_type, type, data_t, __VA_ARGS__)
|
||||
|
||||
// Visit different data type to match the corresponding function of FDTensor
|
||||
#define FD_VISIT_ALL_TYPES(TYPE, NAME, ...) \
|
||||
[&] { \
|
||||
const auto& __dtype__ = TYPE; \
|
||||
switch (__dtype__) { \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::UINT8, uint8_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::BOOL, bool, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT32, int32_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT64, int64_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP32, float, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP64, double, \
|
||||
__VA_ARGS__) \
|
||||
default: \
|
||||
FDASSERT(false, \
|
||||
"Invalid enum data type. Expect to accept data " \
|
||||
"type BOOL, INT32, " \
|
||||
"INT64, FP32, FP64, but receive type %s.", \
|
||||
Str(__dtype__).c_str()); \
|
||||
} \
|
||||
}()
|
||||
|
||||
#define FD_VISIT_INT_FLOAT_TYPES(TYPE, NAME, ...) \
|
||||
[&] { \
|
||||
const auto& __dtype__ = TYPE; \
|
||||
switch (__dtype__) { \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT32, int32_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT64, int64_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP32, float, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP64, double, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::UINT8, uint8_t, \
|
||||
__VA_ARGS__) \
|
||||
default: \
|
||||
FDASSERT(false, \
|
||||
"Invalid enum data type. Expect to accept data type INT32, " \
|
||||
"INT64, FP32, FP64, UINT8 but receive type %s.", \
|
||||
Str(__dtype__).c_str()); \
|
||||
} \
|
||||
}()
|
||||
|
||||
#define FD_VISIT_FLOAT_TYPES(TYPE, NAME, ...) \
|
||||
[&] { \
|
||||
const auto& __dtype__ = TYPE; \
|
||||
switch (__dtype__) { \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP32, float, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::FP64, double, \
|
||||
__VA_ARGS__) \
|
||||
default: \
|
||||
FDASSERT(false, \
|
||||
"Invalid enum data type. Expect to accept data type FP32, " \
|
||||
"FP64, but receive type %s.", \
|
||||
Str(__dtype__).c_str()); \
|
||||
} \
|
||||
}()
|
||||
|
||||
#define FD_VISIT_INT_TYPES(TYPE, NAME, ...) \
|
||||
[&] { \
|
||||
const auto& __dtype__ = TYPE; \
|
||||
switch (__dtype__) { \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT32, int32_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::INT64, int64_t, \
|
||||
__VA_ARGS__) \
|
||||
FD_PRIVATE_CASE_TYPE(NAME, ::fastdeploy::FDDataType::UINT8, uint8_t, \
|
||||
__VA_ARGS__) \
|
||||
default: \
|
||||
FDASSERT(false, \
|
||||
"Invalid enum data type. Expect to accept data type INT32, " \
|
||||
"INT64, UINT8 but receive type %s.", \
|
||||
Str(__dtype__).c_str()); \
|
||||
} \
|
||||
}()
|
||||
|
||||
FASTDEPLOY_DECL std::vector<int64_t>
|
||||
GetStride(const std::vector<int64_t>& dims);
|
||||
|
||||
template <typename T, typename std::enable_if<std::is_integral<T>::value,
|
||||
bool>::type = true>
|
||||
std::string Str(const std::vector<T>& shape) {
|
||||
std::ostringstream oss;
|
||||
oss << "[ " << shape[0];
|
||||
for (int i = 1; i < shape.size(); ++i) {
|
||||
oss << " ," << shape[i];
|
||||
}
|
||||
oss << " ]";
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
} // namespace fastdeploy
|
||||
62
3rdparty/include/fastdeploy/vision.h
vendored
Normal file
62
3rdparty/include/fastdeploy/vision.h
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/core/config.h"
|
||||
#ifdef ENABLE_VISION
|
||||
#include "fastdeploy/vision/classification/contrib/resnet.h"
|
||||
#include "fastdeploy/vision/classification/contrib/yolov5cls.h"
|
||||
#include "fastdeploy/vision/classification/ppcls/model.h"
|
||||
#include "fastdeploy/vision/detection/contrib/nanodet_plus.h"
|
||||
#include "fastdeploy/vision/detection/contrib/scaledyolov4.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolor.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov5/yolov5.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov5lite.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov6.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov7/yolov7.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov7end2end_ort.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolov7end2end_trt.h"
|
||||
#include "fastdeploy/vision/detection/contrib/yolox.h"
|
||||
#include "fastdeploy/vision/detection/ppdet/model.h"
|
||||
#include "fastdeploy/vision/facealign/contrib/face_landmark_1000.h"
|
||||
#include "fastdeploy/vision/facealign/contrib/pfld.h"
|
||||
#include "fastdeploy/vision/facealign/contrib/pipnet.h"
|
||||
#include "fastdeploy/vision/facedet/contrib/retinaface.h"
|
||||
#include "fastdeploy/vision/facedet/contrib/scrfd.h"
|
||||
#include "fastdeploy/vision/facedet/contrib/ultraface.h"
|
||||
#include "fastdeploy/vision/facedet/contrib/yolov5face.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/adaface.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/arcface.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/cosface.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/insightface_rec.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/partial_fc.h"
|
||||
#include "fastdeploy/vision/faceid/contrib/vpl.h"
|
||||
#include "fastdeploy/vision/headpose/contrib/fsanet.h"
|
||||
#include "fastdeploy/vision/keypointdet/pptinypose/pptinypose.h"
|
||||
#include "fastdeploy/vision/matting/contrib/modnet.h"
|
||||
#include "fastdeploy/vision/matting/contrib/rvm.h"
|
||||
#include "fastdeploy/vision/matting/ppmatting/ppmatting.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/classifier.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/dbdetector.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/ppocr_v2.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/ppocr_v3.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/recognizer.h"
|
||||
#include "fastdeploy/vision/ocr/ppocr/utils/ocr_utils.h"
|
||||
#include "fastdeploy/vision/segmentation/ppseg/model.h"
|
||||
#include "fastdeploy/vision/sr/ppsr/model.h"
|
||||
#include "fastdeploy/vision/tracking/pptracking/model.h"
|
||||
|
||||
#endif
|
||||
|
||||
#include "fastdeploy/vision/visualize/visualize.h"
|
||||
75
3rdparty/include/fastdeploy/vision/common/processors/base.h
vendored
Normal file
75
3rdparty/include/fastdeploy/vision/common/processors/base.h
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/utils/utils.h"
|
||||
#include "fastdeploy/vision/common/processors/mat.h"
|
||||
#include "opencv2/highgui/highgui.hpp"
|
||||
#include "opencv2/imgproc/imgproc.hpp"
|
||||
#include <unordered_map>
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
/*! @brief Enable using FlyCV to process image while deploy vision models.
|
||||
* Currently, FlyCV in only available on ARM(Linux aarch64/Android), so will
|
||||
* fallback to using OpenCV in other platform
|
||||
*/
|
||||
FASTDEPLOY_DECL void EnableFlyCV();
|
||||
|
||||
/// Disable using FlyCV to process image while deploy vision models.
|
||||
FASTDEPLOY_DECL void DisableFlyCV();
|
||||
|
||||
/*! @brief Set the cpu num threads of ProcLib.
|
||||
*/
|
||||
FASTDEPLOY_DECL void SetProcLibCpuNumThreads(int threads);
|
||||
|
||||
class FASTDEPLOY_DECL Processor {
|
||||
public:
|
||||
// default_lib has the highest priority
|
||||
// all the function in `processor` will force to use
|
||||
// default_lib if this flag is set.
|
||||
// DEFAULT means this flag is not set
|
||||
// static ProcLib default_lib;
|
||||
|
||||
virtual std::string Name() = 0;
|
||||
|
||||
virtual bool ImplByOpenCV(Mat* mat) {
|
||||
FDERROR << Name() << " Not Implement Yet." << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool ImplByFlyCV(Mat* mat) {
|
||||
return ImplByOpenCV(mat);
|
||||
}
|
||||
|
||||
virtual bool ImplByCuda(Mat* mat) {
|
||||
return ImplByOpenCV(mat);
|
||||
}
|
||||
|
||||
virtual bool operator()(Mat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
protected:
|
||||
FDTensor* UpdateAndGetReusedBuffer(
|
||||
const std::vector<int64_t>& new_shape, const int& opencv_dtype,
|
||||
const std::string& buffer_name, const Device& new_device = Device::CPU,
|
||||
const bool& use_pinned_memory = false);
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, FDTensor> reused_buffers_;
|
||||
};
|
||||
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
39
3rdparty/include/fastdeploy/vision/common/processors/cast.h
vendored
Normal file
39
3rdparty/include/fastdeploy/vision/common/processors/cast.h
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
class FASTDEPLOY_DECL Cast : public Processor {
|
||||
public:
|
||||
explicit Cast(const std::string& dtype = "float") : dtype_(dtype) {}
|
||||
bool ImplByOpenCV(Mat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(Mat* mat);
|
||||
#endif
|
||||
std::string Name() { return "Cast"; }
|
||||
static bool Run(Mat* mat, const std::string& dtype,
|
||||
ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
std::string GetDtype() const { return dtype_; }
|
||||
|
||||
private:
|
||||
std::string dtype_;
|
||||
};
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
40
3rdparty/include/fastdeploy/vision/common/processors/center_crop.h
vendored
Normal file
40
3rdparty/include/fastdeploy/vision/common/processors/center_crop.h
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
class FASTDEPLOY_DECL CenterCrop : public Processor {
|
||||
public:
|
||||
CenterCrop(int width, int height) : height_(height), width_(width) {}
|
||||
bool ImplByOpenCV(Mat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(Mat* mat);
|
||||
#endif
|
||||
std::string Name() { return "CenterCrop"; }
|
||||
|
||||
static bool Run(Mat* mat, const int& width, const int& height,
|
||||
ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
private:
|
||||
int height_;
|
||||
int width_;
|
||||
};
|
||||
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
68
3rdparty/include/fastdeploy/vision/common/processors/color_space_convert.h
vendored
Normal file
68
3rdparty/include/fastdeploy/vision/common/processors/color_space_convert.h
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
class FASTDEPLOY_DECL BGR2RGB : public Processor {
|
||||
public:
|
||||
bool ImplByOpenCV(FDMat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(FDMat* mat);
|
||||
#endif
|
||||
virtual std::string Name() { return "BGR2RGB"; }
|
||||
|
||||
static bool Run(FDMat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL RGB2BGR : public Processor {
|
||||
public:
|
||||
bool ImplByOpenCV(FDMat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(FDMat* mat);
|
||||
#endif
|
||||
std::string Name() { return "RGB2BGR"; }
|
||||
|
||||
static bool Run(FDMat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL BGR2GRAY : public Processor {
|
||||
public:
|
||||
bool ImplByOpenCV(FDMat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(FDMat* mat);
|
||||
#endif
|
||||
virtual std::string Name() { return "BGR2GRAY"; }
|
||||
|
||||
static bool Run(FDMat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
};
|
||||
|
||||
class FASTDEPLOY_DECL RGB2GRAY : public Processor {
|
||||
public:
|
||||
bool ImplByOpenCV(FDMat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(FDMat* mat);
|
||||
#endif
|
||||
std::string Name() { return "RGB2GRAY"; }
|
||||
|
||||
static bool Run(FDMat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
};
|
||||
|
||||
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
42
3rdparty/include/fastdeploy/vision/common/processors/convert.h
vendored
Normal file
42
3rdparty/include/fastdeploy/vision/common/processors/convert.h
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
class FASTDEPLOY_DECL Convert : public Processor {
|
||||
public:
|
||||
Convert(const std::vector<float>& alpha, const std::vector<float>& beta);
|
||||
|
||||
bool ImplByOpenCV(Mat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(Mat* mat);
|
||||
#endif
|
||||
std::string Name() { return "Convert"; }
|
||||
|
||||
// Compute `result = mat * alpha + beta` directly by channel.
|
||||
// The default behavior is the same as OpenCV's convertTo method.
|
||||
static bool Run(Mat* mat, const std::vector<float>& alpha,
|
||||
const std::vector<float>& beta,
|
||||
ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
private:
|
||||
std::vector<float> alpha_;
|
||||
std::vector<float> beta_;
|
||||
};
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
66
3rdparty/include/fastdeploy/vision/common/processors/convert_and_permute.h
vendored
Normal file
66
3rdparty/include/fastdeploy/vision/common/processors/convert_and_permute.h
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
class FASTDEPLOY_DECL ConvertAndPermute : public Processor {
|
||||
public:
|
||||
ConvertAndPermute(const std::vector<float>& alpha = std::vector<float>(),
|
||||
const std::vector<float>& beta = std::vector<float>(),
|
||||
bool swap_rb = false);
|
||||
bool ImplByOpenCV(FDMat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(FDMat* mat);
|
||||
#endif
|
||||
std::string Name() { return "ConvertAndPermute"; }
|
||||
|
||||
static bool Run(FDMat* mat, const std::vector<float>& alpha,
|
||||
const std::vector<float>& beta, bool swap_rb = false,
|
||||
ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
std::vector<float> GetAlpha() const { return alpha_; }
|
||||
|
||||
void SetAlpha(const std::vector<float>& alpha) {
|
||||
alpha_.clear();
|
||||
std::vector<float>().swap(alpha_);
|
||||
alpha_.assign(alpha.begin(), alpha.end());
|
||||
}
|
||||
|
||||
std::vector<float> GetBeta() const { return beta_; }
|
||||
|
||||
void SetBeta(const std::vector<float>& beta) {
|
||||
beta_.clear();
|
||||
std::vector<float>().swap(beta_);
|
||||
beta_.assign(beta.begin(), beta.end());
|
||||
}
|
||||
|
||||
bool GetSwapRB() {
|
||||
return swap_rb_;
|
||||
}
|
||||
|
||||
void SetSwapRB(bool swap_rb) {
|
||||
swap_rb_ = swap_rb;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<float> alpha_;
|
||||
std::vector<float> beta_;
|
||||
bool swap_rb_;
|
||||
};
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
49
3rdparty/include/fastdeploy/vision/common/processors/crop.h
vendored
Normal file
49
3rdparty/include/fastdeploy/vision/common/processors/crop.h
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
class FASTDEPLOY_DECL Crop : public Processor {
|
||||
public:
|
||||
Crop(int offset_w, int offset_h, int width, int height) {
|
||||
offset_w_ = offset_w;
|
||||
offset_h_ = offset_h;
|
||||
width_ = width;
|
||||
height_ = height;
|
||||
}
|
||||
|
||||
bool ImplByOpenCV(Mat* mat);
|
||||
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(Mat* mat);
|
||||
#endif
|
||||
std::string Name() { return "Crop"; }
|
||||
|
||||
static bool Run(Mat* mat, int offset_w, int offset_h, int width, int height,
|
||||
ProcLib lib = ProcLib::DEFAULT);
|
||||
|
||||
private:
|
||||
int offset_w_;
|
||||
int offset_h_;
|
||||
int height_;
|
||||
int width_;
|
||||
};
|
||||
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
33
3rdparty/include/fastdeploy/vision/common/processors/hwc2chw.h
vendored
Normal file
33
3rdparty/include/fastdeploy/vision/common/processors/hwc2chw.h
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fastdeploy/vision/common/processors/base.h"
|
||||
|
||||
namespace fastdeploy {
|
||||
namespace vision {
|
||||
|
||||
class FASTDEPLOY_DECL HWC2CHW : public Processor {
|
||||
public:
|
||||
bool ImplByOpenCV(Mat* mat);
|
||||
#ifdef ENABLE_FLYCV
|
||||
bool ImplByFlyCV(Mat* mat);
|
||||
#endif
|
||||
std::string Name() { return "HWC2CHW"; }
|
||||
|
||||
static bool Run(Mat* mat, ProcLib lib = ProcLib::DEFAULT);
|
||||
};
|
||||
} // namespace vision
|
||||
} // namespace fastdeploy
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user