@authme/identity-verification 2.4.7 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/locale/en_US.json +273 -298
- package/assets/locale/ja_JP.json +273 -298
- package/assets/locale/old/en_US.json +18 -0
- package/assets/locale/old/ja_JP.json +18 -0
- package/assets/locale/old/zh_Hant_TW.json +18 -0
- package/assets/locale/zh_Hant_TW.json +272 -303
- package/assets/styles/style.css +207 -43
- package/index.cjs +1725 -383
- package/index.js +1729 -387
- package/package.json +6 -6
- package/src/lib/interface/config.interface.d.ts +44 -1
- package/src/lib/interface/result.model.d.ts +2 -0
- package/src/lib/lottie/scan.d.ts +5 -1
- package/src/lib/lottie/success.d.ts +4 -1
- package/src/lib/module/ocr.module.d.ts +1 -1
- package/src/lib/status/scan-view.status.d.ts +3 -0
- package/src/lib/ui/default-images.d.ts +1 -1
- package/src/lib/ui/extra.ui.d.ts +1 -0
- package/src/lib/ui/ocr-flow.d.ts +31 -3
- package/src/lib/ui/ocr.ui.d.ts +42 -2
- package/src/lib/ui/shared.d.ts +1 -1
- package/src/lib/v2/component/countryCardType.d.ts +3 -0
- package/src/lib/v2/component/frameView.d.ts +2 -0
- package/src/lib/v2/index.d.ts +4 -0
- package/src/lib/v2/interface/index.d.ts +1 -0
- package/src/lib/v2/thickness.d.ts +76 -0
- package/src/lib/v2/ui/button.d.ts +1 -0
- package/src/lib/v2/ui/modal.d.ts +11 -0
- package/src/lib/v2/utilities/index.d.ts +6 -0
- /package/src/lib/ui/{basic.d.ts → basic/index.d.ts} +0 -0
package/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ require('core-js/modules/es.parse-int.js');
|
|
|
25
25
|
require('core-js/modules/es.regexp.exec.js');
|
|
26
26
|
require('core-js/modules/es.string.replace.js');
|
|
27
27
|
require('core-js/modules/es.object.from-entries.js');
|
|
28
|
+
var operators = require('rxjs/operators');
|
|
28
29
|
require('core-js/modules/es.array-buffer.slice.js');
|
|
29
30
|
require('core-js/modules/es.typed-array.uint8-array.js');
|
|
30
31
|
require('core-js/modules/es.typed-array.fill.js');
|
|
@@ -73,7 +74,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
const LIVENESS_GUIDE_IMG = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAG8AM4DAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+9aVrrWLy4tLe4ls9Lsm8i7ubVzFd315gNJaWtwButre1VlW6uYGFw9wzW0MkDW8zNWyva7e19kv8xb6dFv8A5f5kv/CMeHTzJommXDnlpbyzhvZ3Pq9xdpNPIx7s8jE9zS5pd38nb8g5V2Xz1/MX/hGPDX/QvaH/AOCmw/8Akejml/M/vYcsey+5B/wjHhr/AKF7Q/8AwU2H/wAj0c0v5n97Dlj2X3IP+EY8Nf8AQvaH/wCCmw/+R6OaX8z+9hyx7L7kH/CMeGv+he0P/wAFNh/8j0c0v5n97Dlj2X3IP+EY8Nf9C9of/gpsP/kejml/M/vYcsey+5B/wjHhr/oXtD/8FNh/8j0c0v5n97Dlj2X3IP8AhGPDX/QvaH/4KbD/AOR6OaX8z+9hyx7L7kH/AAjHhr/oXtD/APBTYf8AyPRzS/mf3sOWPZfcg/4Rjw1/0L2h/wDgpsP/AJHo5pfzP72HLHsvuQf8Ix4a/wChe0P/AMFNh/8AI9HNL+Z/ew5Y9l9yD/hGPDX/AEL2h/8AgpsP/kejml/M/vYcsey+5B/wjHhr/oXtD/8ABTYf/I9HNL+Z/ew5Y9l9yD/hGPDX/QvaH/4KbD/5Ho5pfzP72HLHsvuQf8Ix4a/6F7Q//BTYf/I9HNL+Z/ew5Y9l9yD/AIRjw1/0L2h/+Cmw/wDkejml/M/vYcsey+5B/wAIx4a/6F7Q/wDwU2H/AMj0c0v5n97Dlj2X3IP+EY8Nf9C9of8A4KbD/wCR6OaX8z+9hyx7L7kH/CMeGv8AoXtD/wDBTYf/ACPRzS/mf3sOWPZfcg/4Rjw1/wBC9of/AIKbD/5Ho5pfzP72HLHsvuQf8Ix4a/6F7Q//AAU2H/yPRzS/mf3sOWPZfcg/4Rjw1/0L2h/+Cmw/+R6OaX8z+9hyx7L7kH/CMeGv+he0P/wU2H/yPRzS/mf3sOWPZfchp8NaMgJsrOPSZuSlzo6rpsyPggP/AKKqRTYznyrmKeB8BZYpEypOZ9Xf11/r5Byrpp6af8Ak028uhcXGlaiySXtrGlxFcxp5aahYyO0cdz5YASK5jkRobyCMlFk8uaMJFcRxoPutu3Z/1sC7Pf8AQj8Nc6NbOeXmlvriVj1ea4v7qaVye5aR2JJ5560S3+78kEdvv/M3qQz8cv2+/iB+1V4K/aL+F1r8CNY8b6q2uaJ8Hbf4d+AfD0fj7T/Cc3jY/HeSw+Lt58QU0f4O+L/BXxF8PeI/hDqVlp99p3iP4keCm+Dmj+HdZ+JMyacmp2HinS9YKLT5rdbvTbl0tqmrPXS/Nt3umVPjj8d/2x7/AOMn7MEfgbwd8YNS+D1l8UvB0Pjvx18H/hjB4a8L/Em88V/GrxV4F1zwp428LfFPxL/wsnwd4M+E3w58N2+o6zq8ljb6N8QvEXjC28YaVq+keFfDel2mvNRhad2r2dk3e2ie6XK22/la2r2D7K/Yrb4xweHvjzonxo8XePPHereF/wBp34qeHfB3i34g6Hpmganrnw/srbwxNoN5pFlomg+HNDbwyby61dNFl0fTjp6Qo9pDdXTWskpifLePKkrwTaWuut/mCPs6oGFABQAUAFABQAUAFABQAUAFABQAUAFABQB+JH7df/BVL4q/Bjwx8U9B/Zf/AGVfiv8AEb4k+CbP9o3RoPFHjX4deNH8C2Xjr9nxvgTebLLw74atv7V+IPg34haV8Z5/+EW8QaX4q8LNNeeENbW2t9Qjgna22p0lJrmmkvddk1ezv16NW10YmzqfgB4j/bu/aB/ZS/a+jsviXr3w2+POg/tm/tTeFfhFrnijwF4b0jUZPhH4J8eXCeAfAvhSfxX4T1Pw74dsdc0pF8NeG/ix4g8C/E+Lw7aznxBceGvGc9kls5LkjKOl4uEW0n9prV6Nardq6+QamJ/wTF8P/t96p4p8Y+Nv2gvi748f4TaNqPibwWfh38Um1rxpq/i/xjo+sapo+o6/4X1j4gfsxfss/EnwFp/hbUdKjEOrW8PxM+GXxR0jW0fwvpngu+0O9lcq+zslFK+jutLK3W0pJt/Jq2u6BXPxt/bm/bf/AOC+HgD9q74x+D/2bPg7N4k+CWia3o8HgTWf+EOGpNeWs/hXQbzWBJdL4600ebbeI7jWLSa2On2bWMtu9k1vGbcqNYU6LinJ69dfP0E2z9av+CMHx+/4KOfHDwJ491H9vXwHH4S8UWHxBvdN0mzm09dCkh8Ex+EdEvdM1eKxGueJHlubnxVPqelxK1xpyXtp9vuAlw2hgDKtGnFrkd9Px9bDV+p+zfi2eWzn0y6t22TiLULfeM58qV9PkdeCOrwRn22+9ZxV7/L9RS6fP9DZ8M/8gOx+lx/6VT0pbv8AroNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/AJAdj9Lj/wBKp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/wCug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf8AkB2P0uP/AEqnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf+QHY/S4/9Kp6mW7/AK6DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/wCQHY/S4/8ASqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv8AroNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/AJAdj9Lj/wBKp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/wCug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf8AkB2P0uP/AEqnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf+QHY/S4/9Kp6mW7/AK6DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/wCQHY/S4/8ASqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKAPM/E/xp+DngmUQeM/iz8M/CM56Q+J/HfhbQJTzjiPVdVtH68dOvHWgDR8KfFL4Y+PAT4H+I3gTxmBjJ8KeL/D/iIDJwMnSNQvOp4HqaA8zu6ACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/wCQHY/S4/8ASqeplu/66DWyN2kMKACgAoAKACgAoAKAPyk/4KGf8Fof2Cv+Calpc6V8ePii3iH4uf2dDqWlfAH4V29l4x+Lmo292XSyuNQ0ltR0zQ/Bun3bI72+o+Odf8N297DHK2lf2lMggaXJR337LclyUd/61sfxXftl/wDB3r+3f8YrjWPD/wCx98P/AAP+yX4QF7Oml+K77SdI+NHxfuNOjYosl/feMdMm+G2iS3duRcTWFl8PtWutOm3Q2vie5MK3MsOo+ll+f+XqCldcy+G6V1r1S/r+mfzhfHr9vj9uX9pK+1DUfjt+11+0H8UlvpTPc6R4j+K/i+fwxAZGdZotO8F2mp2vhHRrZTt/0HStEtbaFGKoiKoFQ23u3/X9f1uZc0W2uZu+tntHl/z9Nz5T0i8LXXmyLc3TyZeZpWSV5SGf55FnYtKq7htL+ZgnLq4OKT2dt2t7f1/WpSa07yW++n3XPY/D/iW0hKf2Yy6TdZLJJp6fZZC8MBcB3VYi8oG4FoZUUqw2qNzVi1LZq/Z6v/hv8zeMotdFHZeer/rqz6z+DX/BUj9vT9l7W7e5+BX7YHx08EWlkokh0C1+JfiLxP4GwBtWG6+HfjS+8S+Ar11UgRpe6DdRxlR5eNuTpF1NHzta21vt538iJyS2te3TXt6rb+tbn9Gv7Ff/AAeI/tE+BX0jw3+278HfDfx+8MRsYtQ+I/wusdP+GfxaihkJc6he+GopF+F/ieaHAjTTNM034ap5brJLqEjKxbb2jTs7Nd0/v0/4YE73fz/4Hqf2j/sKf8FQ/wBif/go14VfxB+y98ZNI8SeINPsobzxR8KvEif8Ip8XfBiy4DHxB4F1OUahLYRSn7P/AMJJ4el17wjdXCtDYeIbx0YC4yjLZjP0DqgCgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/wCQHY/S4/8ASqeplu/66DWyN2kMKACgAoAKACgDE8SeJfD3g3w/rXizxbreleGvDHhvS73W/EHiDXL+20vRtF0jTbeS6v8AU9T1G8khtbKxs7aKSe5ubiWOKKJGd2AFGwH8A/8AwWI/4Or/AIieI/E3iT9nf/gmbcXngDwRot/Np3ij9qrV9FceNvGz2ciia2+EPh3W7eNPBvhaZ45o28Wa/p8/i/XbeSGfR7DwZFALvWcZTurR27rf5W2MqkpKSik1d/F5dT+Oj4s/Fnx/8atYn8c/Eya31/xlrl3PqGteL5dHhtde8QX91NK1ze+INUhQyanfz3DySTTyEM+1ZZt0rmRskkm0peqbb176/iypuSitOa7Xe6votr/dY8uuNJiNqpuL0rLCgKQMQDGG4MYjADED3IYYBVmJqtdle3Xtf9f8yFTcXzOoo3s3H17MxI52Z2s5gJLsptt55Nw6DKwSyOSZY3iyI974QnGApKgIUYtq0tXotVfXS3XTf+kX5vsdnpqoNqXt3crAy5JK24G1rhR8uSHDb0LBMhVUcmjr5W/H11KVnDR2aTSer67/AIfLsPlvoltEs12TW0amGKWJmSZnjdjLI4ISUbm8xmyCkaOSGZiiMrfj/X3r+u4nVajypXSt73Trb5vc52SKKV2nXzESJRK0bFjIc5G1WwWZZCPkc9jljtXhkc0ue3RWvt3Xfunb8T74/Y7+KXg3wRrU1tdrpinV9bsNN1HTtf8ABPhDxzp91oF7pOtXaavaDxLrum39prOiX9oukajZaXIun+IdA1KP7Td6fqVkkmqZVE/PbdO3VXvZed/kdtCad4q27Tj3Vnazs+vya21Pqj47fDT4q/sEftE/Cf476FfXXw113WJPD/jm9svhxrOp+Dta8Fw3WvbNKm0q+8L3wuPCOp6jbWl5aSS6d4q1SLUrmDWptOvp4ob+1syLc4+67NX5Jtrm0Sau/vtts11La5JNr4WleLTta+ie39JNdj/TN/YI/bLb4y/B/wCFd54z1q58T/8ACV+DND1TRviNcrZxT6hNLbSRappPi17e10i0m13w9qtvNoOqaxp+k2Md1qESyXunQGX+077WlWbSVS1725lon8rv5/l1FOKUny7b2v8Al+X9afpwCGAZSCCAQQcgg8ggjggjkEda6TMWgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/AIZ/5Adj9Lj/ANKp6mW7/roNbI3aQwoAKACgAoAwvFHifw74J8N694w8X63pfhrwr4X0jUdf8R+IdavINO0jRNE0m1lvtT1TU7+5eO3tLGxs4Jbi5uJnWOKKNnYgChtJXeiA/wA3T/gst/wcf/tH/tAfEfxZ8OP2N9Xu/hX+zH4I1qHQrLUJtOtI/HnxX1PTLhrqbxvr6ahZT3Hh7w9NcRQp4Y8LxgTRWsA1HXy2rXg0vRuSpL2vuptR30um7bbWe+qX9JSlyJ2SbTs+a6tf7vwfc/lk8afFfxB8WdUvvGPiHxBNf+Ob+aZtbn1S2sH/ALRmuJXkWfT5TbwxWskcY+ztCuze4jlh8oHylmMeXSzaet1ffz/4PczVWTV7Pm7N3ul1jfXr+K16nn9xquvTRra3l28jx7mgSQFwACo8v5hhUdANjqCVmVhwznFpJbW9UKVZuPKvi7LVp2v/AF59tSGPSZ9SmIurh5FEUk58xiAgijeZwVkxgbIGLdPlUlRjGXt/XVv07v7zGKnOT953tbrbtq9v60IbfRH/ALVl81CGt3VCjuwPmG5jjAKnnp5qA/dwucHAyaet/u6msaejT1UWtbO/R6bu1+hs6lpqXNot42d1tvgwSzfNM0cE8oZgGJ82SCVSpxmabKhUBpeVvn9+nT+t/MfLGEnFaXsr3vrpe2mistdb63tYxksd+oTQsygxpBHgDaBvVXlVVGQMmbDBcYG48Zp/1+hk1OVorbTXu+n59ibVbFm0i5vVTbb3GpC2ifCgjyk3iMZK7h5XlFsnaOoJLgUvLrYdSNkmlayauvuetn+a8kUdIW60MR67a3clpfQzhbB45HWQS7A5kCj7yLGWEilWDFogysjnJo9N7/PT+vvLvyqLUrRfvXfktru7/rY+pb39rH4x+PdP0rwT8SfE8nizwl/wsGx+JfigXNhpY1/xBqmmxC1tl1bxJdWdzqE2laVphubfR9ELDRdK+1XbWdhFJNI1S4JKXKtWrbvT0/4JoqzbjHmuruTSva71fRa/L/I/cT4U/wDBfX4ifDPRf7O8F+CPBlprgnu4dDmtNJGieG/CmmX1lDZ3kw8G280kWreJr+OwtUgWz1XSbR47aJLi5WKScyY8ko67P9dPu6a/cdF1K127tJb+8uqtp3P3n/4I7f8ABdDxzDrmn/CT9qDRtU0n9ly832HgT9oP4n6veR/EDRPGWuamL23sfFVilo+jHwFqc19dx6dHp8livg23hij0+1PhezNrpe1OtyPknK93bpaOnfrH8tO5fspySajrp7qvzN+mrv32Xkj+0SOSOaNJYnSWKVFkjkjZXjkjdQyOjqSro6kMrKSrKQQSDXYYD6ACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv+ug1sjdpDCgAoAKACgD+F//AIOd/wDgol8RvG2v2P7D/wAGteg0j4TeGksvF3xwvbK8mtdS8c+INP1a5g0Xw7qc8N5Gtv4H0W9065v4NOvbVj4k1zT4vEsEN1ouh6RqTctapf3U9Fv5/wDDFx5Urt9ezdrfK3+R/Df4s1CY3UpNwJ9xlXzmUQR3qKSvlSK2PmOzMYYhgxKA5BDRC2/n9z/4Iqmi0t5p+nbVvpt9x5LcaALx2m0+N1lDD7RBgMqhirs21cMq85OQu3YDk5OLvZb2/BHLKCa5oylpfTVv5dunr2Wxe+zalprLFewl2URzqrx7/wB3j91IjPkNjJJA4B3RsysCtW/es47fLRrf+vwDRNPSSVrprp3XfTf8+hrpcTSNHI8G6zKmG4EAxLDHKojk3BVU42szbV/jIchxuV4e3n59X+GxamtZRT5LpKysnrtby76+VztvDvh5ft7Cac3FujIFfOJntfOhIEkmWQ4tYxtB/eRzKInUJymbknp+Pn+BtCGju9dk3e9vPq3fr/T2odBttQ029t1eFLq2tYEeFNrM11bXc2mao0bgEbMR2V5Aq4KJqKbQxO8Jtp31e9t+qur/ADf4Mnld7aWe9lbX+tUeXXWmTWN5eoEE08UkiXLKDsVljjJXa2MSCVvKIO4Bo2YcLltU00n0fe3TT+v83ockW3G2u92trf0jbv8AwvdCwsEuI3hgge5unVinlW8bwac6SFAAxneBmkRThpBsCkFmNTzK/fRJff59CPZycF72l22ou93pfbXXX79tTzvXb23EyW8S7Y4mkbyWILorbBCrlQFwIIommbkO2FHJDC0tN9dF6/1fzMaijsny2SfK2/uS2va7eu689L2jW8O5GuHCvfGF7uVlO21s3O9cN/fnYNIq5yRFEBuD4pPT7tvPfrb+vvKjBQ1vfZu6atfpom/U9M+ED+GE8ZaZN4lvLzTNGlv7YnWLQkT6Ttuke0nSXy5thRYkBaS3YlMxhVikkLRNScdNd/V6fjY1oO/NLono9b/r36f5n9o3/BJlv2Wf+E/1fSfHUeg/E7xFq+oanefAr4m+MdVm1PxfY2fhTTLPxLefDPVRNJbaVpIawnuNS0jxBYaF4c03xPJLfQtpk5igW8wtDmbktLxTjdpJu+q781tb3t31R2e1lyWWjUt1rJxWm7inrfma20truf2xfBP4gS3llZ+GNaZ1lFtC+iXNwYg0tu8SumnOYSYd8CZS28sJEVjMMKqn2eMdtGba5X028072Xysc8rN3V9ddf6+Z9G1uIKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/AJAdj9Lj/wBKp6mW7/roNbI3aQwoAKACgD5s/aa+NWm/B/wUJJrz7Ff67LHYLqBlit7fQtPuJ4rS51m/u5g0djAsk8dtDcujNG8k13GjLYTlM6s+SOmrenyBbpfP5Lc/ye/26/jlB45+MX7Snim+8Y23idvHvxx8Snw1Na2CwXGp+EfCerXejeDtVnu7i1ufL0FtE+3/AGHTrTUhNcXrl7yLy4LaR+O3NJWd7Lf8fz0/EOZKMeZ+9vJeck7+X5fkfmPcyC9ea0lfzonLSKygeWUA3+aj/wAEsYUZKKofKh4txdhqrJJ2t0e7/rUpR5tXrq7W7Xb+9R+RoW2jS2XkyxOpDSII9Q4SRVJUGORN7BiVc5QCZWKloZJW+VlzKV7r5Nv8fy/QxceRbu7d77K76NPp6fjc7/SNHsZrhIb0QyNCH8lpGW4gl3Plot+RJ9mfLM+1bi4icRtHbsC7HNzlrZtX6J6f1+Y4RdouSUpe8tNVbyX62KGt6To1nqa3Gkrd2cI2NJaoQ/lOjb3eHG8XQxnzISwkiyUKwn5AKTtbRrz/ACNFT6apaNJaK/mjs7DSRfxwhYlt7wqDFcoPMhuY3jYszKDkxukgc4wpyssQ/d+VS/r+v0Nt3bvovx+7TocxZw6tot7qAktJHuIhKZyiia28rdayedu2YVI7q2gk3HYxQbJVC+VSlJaJ8v8AX/Ab/paV7KT1tsm/u++xbt/DB1+XxJrtzC9mIYJrm+jhXcPtlhDKbqOP/bubqB5MqCUWfex8tGw+b4V2vp6/1/lqHsr8zs7pa73Tu9L99vQyXvC174oJSW4nubmzk03ez/ZLWJobSFybdnw62QkQzTYLiC2jKADeBWjUdtn63IacE0777u66efW36dzw+x8P/wDCQ69drAXW0V5JmkuABKmn2zFzPIE4LyQxqGSPd+8kAQbBkbOVkvds9tNr+f8AX6HLGLqTbatbS9t009PPXrt2Ogk0zMV8IYJhChVVlmAAjiEiqs+2BWVSxi8oRl5MINoLbRsm+13rvZL8Pxv0NeS19Pd8/TZ+vmN0NGZ54YUdRLZpHEgG9hcRPAIpFQLtLuyBFGAw3k7s5YuVrL19NLPoKCS5lFW2TVn2Tv2btY+mvhLfPoeu+H7jUfFHiXwYLfVrFbvxL4U1i40jXdFspJrWxmutPmW4jie8ihdnUST24VSrfaFAVThLW9lfsnrd9tO3Tqbx0+779P8Agvv6H9gn7PfwK/4LIfDzwd4G+JP7Pn7b+seNPBdzpumar4b8G/tHeBV8eaE+hTRm70iSDxb4Nn+I2rnTZmQS2F5pKWN3aWzwx+RZNGlvGUvetNqUUrq8fe2v9ly07bXCXs2277u767322emnbstD+vb9g/49fFn9oH9nvw34l/aA+HVr8LvjvoE9x4V+KnhjSJZLnwje+INOWKS28YeAru5nmv7jwX4v0u4s9X02HVVg1XRb+TVvDWoxyXeiS3dz3wlzRTvd2V9Lfh+JjJWemx9mVQgoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv8AroNbI3aQwoAKAIp54baCa5uJEhgt4pJ55ZDtSKGJDJJI7HgIiKzMewBNGwH8vH/Bdv8AaKv/AAT+z7rfiBCQ3jPRfHvh3QY7gSGLTJBZWFhYXMIikVl1AaReajb2ySLLbtqesSXoj320YrjqScmrp6vZ9Fsrfm/VjSXMvNK618+zXVI/zY/Fdz/bEl5fyq6wvczM1skshFvHM5kjUjbyVHl5mC7pJY3aQM7MrTDe3+X5/wBaepVSKcbNX7/Pz+Vl/wAOeeWEs1pcgCeZoJGx5kaBmw2fnK7lQ7WXD4YMRnvzWj26d7ee39ehEFy7N2fd3tp08loej200UyxmJIGCxeXIgUyQTxKqhXvLBvMdQyKP3yCKOMrvVw/zDLVX8ttddb7Nf16GnKpKz1tt/Xr/AFobtrNYyWsdrF56yF8i380R+VL90pbSEASEhdsQdo5wEEayXI2xquv+XXT5r1GopKy9fPz/AOCaJ8vU4goLC7Vldg6bblJtoaNZYX2CQI2cK4aQIzmGe3XMKrbfp+BpGDlrsr7s2tN0/VIrFL63kl862kmkgwdrWsscsMrW8MrK7LazrMXw4ZIpJPs8jCYu0+bqJbeln38/zN1RfxKLe7tqttbLRvz1/VHqnhDUI21G2k1LT4Z7W5Y2qG6tn+yyRajhLiymLgSWiMvl20Ik8yC3vJrC4hnaEWyycuIno7aS1dlo1bVNd/l0PRwtFqSlJXUkrfFyyUkuaMo201dk2+/z+iLj4Q2UWitFZ6dJpVvrMYWYTYaZLu1NnFC0kxWKQ2uoQtqInZRIBPvt02TwPAvEsbLmSbTalq7y0vF+dt7aeR67yxOMpxg4pxvrrqten81tX1PGPjH8FZ/C3hvS4Lc3Npq/iCwGpyyNAYwLK5S+vbLTbRd6ruu9PnW61Er5iQqbRSDl67MNi41J1NVZXUX00dm3d7322PLx+Wzo0aOj52ryesm3JN2t0SWru1vseO+Afgb4lmvNTtrXTru4MWnbL25jgM4jSa1ld54Nqygo++OyiOMyXV2ibXzIketbGU42bkm27JKWrd9e3m/luceGyytVv7slGKUpu2lunR79vToaHxJ+HS6Nc3mj+QqXlvHbI2y4hjtXSO3TEEUUAdZLgbPumfzHka5YNh1U1Qr865ldK+z7br/hmRiMFOjdNWe+l7WXlv06fNbnntl8P7mNWEenNDLgzHezxbFiCRL50mNtsszO2zzSem8fIGrb2q6P9fPfy79/M51QtrZrXqm3olf0vor9lt1K+r6ZqNpbJE8ImRp1aTEX2qJFZtjMTZ/vZQhYyNE7rPLhWKE5NXFpvz/FPf8AFaepE4cqbV3ra29tD+7z/g3D/a+HxY/Zh1D4AeJ9fubrxl8CrubT9Hs9Tvnulvvh7f3Md5pzWjXE000Z0bVdWuNDmtBK8UNrFYPCkYEscbp3hNxb92SvFdLt2elvR/8Abz7GMmpLm2ez0ffR/of0ZzfHfwR+zyLXxr451WHRPB2o654V8HaxeyAvHb3Hi3xJpfhjQ7oldx8qx1bVreScRh2TTvtTQRgqyV0waTveys7vzuv+D+GvR5t6pWd5OySW76/hr8j9EwQQCCCCMgjkEHoQe4NbALQAUAFAHB+N+mmfW8/la1cevyJl0N/wz/yA7H6XH/pVPUy3f9dBrZG7SGFABQB4/wDGbxANL8NDSYmP2nXXeCRFOH/s232NenIIKiQyQQHJG+OSYDocRN2XqB/I5/wcRa14Zsf2Mjb65d3EPiKy8b6bb+FI1uZY01Hw/rsF0uquQcw3d3Z3um6dLJAVSaGG1jvLe4yZo65GnG17/Fddbq3rv9xcGlJPyfr5d+v6vTc/z+3VNZ1Axx+eHklLvJJcStbp955XuA2FTdEkk8whxHtRpdygMRSuley9LK/4db23FKMZPr23dvLS/lf9Se30sI4E0z3kM6kRWTyPFGkbYKzyFCNgcIOHLyyRKBtAwCnK/RLz326fj8u5XKl6fh6nd6N4RS/uI0sLaC0R5wU22svyFhu3yXBeRBsBXBR9z+YCqR4KjKVRJXk3ZK/TZLXt+vmdFKi5yikleUrf+BaLX17nr1n8EPFDqLiHRGuRJlY2t5kR5C7eZElxFdFrZg4JYPE29QqFGO3zDxPH0U37zVu6drdbWTt8+h60MmrzXMoRd9VaV35aX9X6a2PUtF/Zt8capP5k2k6xZPL5e+e4RxHhioSdJTJEHZiAWLO6OXVo49uJK5qmaUIxb9om101bbs9LaO2iulrY7sPkGKm3zU3yt6P3opeejX9I9O8O/BCbStRcy3puUtHia9macJY26xSMIwZ2tZlQyD920Hk3rXzhUjjhSeJm4Z5hzJWdr30Salt1Tl57pJeZ7FHJJQu/e0a5+aXNCKit78rX4O+nWx9PfD34YeGIre81zXdK0+Oys737E9pZ3swh1Z3ZontTpz39x5bXcu2Miyu7LM73CHSdkdzFZ8VXGN2UW2+W6bjZpaWab369H0s2ehSy3lUm1Czk0lpaUr2a5U22nvdOP+F9PvPRfB/wJtPDGlWs94tzPZQ6fctBBeoLTSlY+W1tObqSO5vRZ2Qv764KSQ2cLQjIgN5Kw8SpjcVKo+WDSvKPM0lz2W/urq7RV03r1W31FDLsLCjFVJqU4qnKUE3aPM9YtbStCXNJ3skvi1OI8b/Cf4M38fhFrrTtU1jV/ENg8WjaBc3UP220TS9oP2x7tXa3XVJjaw3Yna3nT+zbSyXyrcqUKOY117V3jThSlarUt7nvu32VZzSi3on1k2upXyjCVFSfs3KpV/h05aSVtNeiUr9WrWsex2P7MHhTwvoUl74bv9Hm13XNLW3axuxcQW2nT29/evaQRHZPdi6nV0mtbL7FPZC6jSZY8BJLXj/t32s2pOTjCUrSWraa0bS3V1Z7WT2vo+z/AFajShK0IKU4qMk1e0k3f4m372lly2uux+SHxm8CaXoniXWHvrK71DVA11JLqN5cfaWe6Z43kDPJdRqk807SC5imS0MZkjSEg7bY/WYHFe1jFxmuW2vL2vbayVtL6XPgMzy76vOpzU7uUmlKS0TvfTW1rNKzs0+m9vkTVp0mNzbg21vKBIGgEKmSch97LJ9qeeLzhLj5BIquVWSNroGR296mm7ON7XX8rsvkr69b7bM+UryVnGUYxevLy3TbVt/O79Ntzx7UmgurO8iuUt3S3uGMk1vELSWJJZUUELYiKIxOvyOjqYneW2mLKrM8fbBW1b/r01R5VS6j6uzaPsb/AIJY/tjH9kL9tL4Y+O2OoReFdQ1mPwd4106z1F4rTVNA1h59HeSe2jFvaTy6eNQu5I1v1kFvI8t1HLHeRQyxaSTilOMmuXVaJ+q9GktvLoc90207rS/+XTe/6n+jV8SfAfg/4znwRaa+BqUGqavpE/h/S7pJ2t00yCDSPF3i7V5tJTfbxm50Ozl8K2mqOHlsf+EqkMN7FcX1usWtlKKe8ZLTpdyScm1192/3S7Mz+GSfXRPXom2l2+JpN97LY/Wj4b68Nc8L2fmyB73S/wDiVX3OSZLVFEEpJ5Yz2hglZiATK0gxxXRF3XpoI72qAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv8AroNbI3aQwoAKAPjP4wa7JqnifUUhJa306FtHtyThFmikC3DZ9ftrzKCpyQkYOMcY1Jau3p8/+HGfxp/8HR3juGw8F/s0/D/7PH9o1vXPFviBb1J9kltbaXa2cFxa+RGpYC7e6sZFZ2MbPaNlTs3rjKNlstr6eqt36BH4pdEkr+rcv+B87n8WUNvDayX86XBjthFJLdJ5iiaWFiStpEr5LSXXlbSynHlq5YBVIkLtrZu1kumvW3l93Qvq/S722vt/Wp6B4Zs5vEkjJJHFZrJvuHRXZ2S32wxQxhflMksjzIwzhmK54wi1i3ZfK5pBczinpftv+X9fifePwY+DNld3OlwfY7jUb++mUwRSsqwfPDE0UkkhRcgMW8yczYjjGAEQwyHwMwxns1Unz8sIK8pXaVkru12otrorfmfa5Tlim6MORzlUmlGDgnJpK95NK+136+qP2J+Bf/BPfxD45WG6e2s9KhXymW/uowgWd4tsZs7d2kkTcWVkEy2/AdnRTL5ifAY/imFBuFLmrzd10tvq22rPfpfX5X/SsBwq5ckq8Y0oqKk3a8rtacsW7pf+Ap72ufT/AIq/Y0ufhZoKSar4GsvFFoFT/ibeH71tOuJCS8yT31tdxLbTASKzPM6zxbFSa48hlZZ/FWe1a9V/7S6PN9mok43X2YtWkr9EumyfT6ZZJh40Pdw8KzWjnBck72Tk5xba06S5mmtWo2tL4m8ffDXS47xNR13WvCfhfQEeb7Hpljr1lrmsKFV3+13un6Pe3uy4uEMqvLYWdjp9rkRrPAHkEnvYXMqjpuMKdXEVLe9KUHTg3ZK0JyiuaK3s5tvdbXPBx2WU1PmnVpUKf2KcJKrUemjnGnUlZtrT2cUlte1ovzDw98MvG3xH8Srb+BfDfinWrWGT7Pps95aXGm6bpumEMkd/di3hliW51HM7rEyTRQpGYJZrhHnN76NbH4TB0VLGVqVJpXlGMlUqSm0vcjrqo6Juy6XWunlQy7G4yolgsPWqLncYSqR9jQpwv8TbsnOV7x3sklzN3PufwT+wD4ih8Owax4gkudX1W4mkY2UZuJ/s1p5UiCGy0m1PkWo3hZpb/UXvHe3hggltwpNtH8riuJ1UquGFg4U07JtLmbT1lKo1s1tCKSTvZ2Vz7HLuGKNOF8dP21VXTav7GMdlCFNOzlzb1Jt3UVHltv6r4E/YI1vUNb/tm5hGgO0ulmC+No1xqt3HHcPcSWsdvMY7e2s5YYwJpFaeG4aaN2tGhSKA8GI4gn7OUIwlUUYTclqoN9PeSblK+uuu6u2z1aWSYajKNWcknKcfeUU58sJXlHVxjFW2vf8AmSvo/sfw3+zLJp0/iTQr+2S5tY9Ms1W41DZLNc4spIo5zIiMsMNut3NbTQeWY7mJJ4zEoZ/M+elj63NzJyXK2+VdLNSb5U9XpdN3s7Pex7E4YWFOm4xVSMpWm5JSbtzRa1Vtn0Wvoz8sf2nv2YbSK+1+x1OGe4toGkm0+9RHj1C2WTrB5SjF5GkyTz2DQyRCY+TDbC2aW1UfaZNn7jGm0/fvFTWkovWybW8W72lfV3b6Nnxmf5FDERnOUb0qi517tpxv69U7uN2ktEuXQ/Bb9oP4N694TmluWkklsr1XbTdUTeouoVeUsr3aYQqWV4/KmTzYrkS2s5S5jwf1bLMdSxMPdaU42VSD+zK2umzeitbS2vmfiOeZVWwlRKUeanUdqVRXa5dd5J3v7ttWndWsfFt3reoWjzw30pgLq1vubcqXEYdlWOZCo2uCjruBZBcwqwZuHr3EotKzb9EfJVHJPlkmrfK/T9GcZo+pPbagrPE90ZtSRlmjkEdwg3xn7RYMq5WRHjAnVo3DyABkiKo1a2Vtei/TRPqjklUSkle95ctk7u/pv999D/Ux/wCCYHxf/wCGgf2S/wBn74o3d9Pql9ZfCmy8G3d3JG6G+1/QLyLwxrt43nu12hnh8I6E224UNtklfzblJkmrOk7pR/593SfZaWS9F+b16GkrXfdtN/r+Nz9g/g1qbWOtXumSuoj1iN5FUfd+22nzpg4wM25njPPzFYxzgV0wetu5J9M1qIKACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKAKGqXqabpt/qD422VncXRBOAxhieQL9XZQo9SQKHorgfBHiXz5ra7u5S/nPK907AbmlbzRNIzJgBi+5j8rbt3Q8Vhvq+j/zGf5//APwcy/FWfxh+2H4Y+HEEl4kPwu+HGnxeS0kBskvfFbrr/m2caEzO0lg1nDO0rB0O+JfkTdWcm3N+kV5atyT8tJ66bhFJxbs9ZdOvK+X9On4H81YlE/EX+sY+WyzJvR7lm2vL5n3U6gKW2h1UtwWkZ1ay3Ss/Lbs+r/pFfJ3/AKb/AKbPr39nj4S+I/EGs2rzQ3Us7RyXMECRu7+XbsLiW4VApaSKONGjDDYmSEXJVM+TmGMp0YS95K/u32Xvaaa79tz38py2tiKsG6bdrySerdlzJ235Ur3v523V/wCnv9ij9lHR/Nj8X61apdR/ZdJ+xN5IuBbCe0S6u2hRsqbjzyDG8gIil4VRhdv45xJn05/7LSlyx9pUdRqzuk1aL5ns7S0uk/mfu3DuR06PLiakIybpU1S5pRaTcfeaTlruredj9wvBXg+XShCohtLS1h2m3tYIySCy/febam5xG3zMhEQckRooHmH4ePO5Obb1fX4nez136N9T6+pyqKsvesk1ppyqys1v1vuvRH0RDokeo2aRyx2qq6DarxvK4fZztO9CPLGQSHYKrqVJ4r0KVPnjol71nazbtF209L+f4nmOvKlOduZ2VtGrXlZq6a220baaWt1ocDefsx/DzXrq41PW/DOhardXJWQSN4d0W3nMm5S0j3MFkt1IztjC3DyRlVUuCQuOynSrJXhVqRTtyxg5RW1npe2+mqb67mjzGLSi6cJctryqWnL75K9ulr6dPPvPDnwG8IaLYy2Wm+FLLT7fy3wLCxgtGmDIFZFNusIV3MYDSAImxioPzFhrHAVKt5zUm0pe8/flLR2S5ns3bZ+nnz1c4hCyhVpx1XuaRjF300Wl3rq7yelz0iz+H+nparZ2+npb2jxmOYCEefGqBgEQbmz5mWhIYqqR5VQerdSy1W+GNpXv7q5rqzVruyvs9e9uh5zzZxk26t5qSjTtO0JJ2veye1rqy1fqc1N4WZNQyLUW8VsXt4SY4VhDslmibGUgxrEkbYUx7FWfIQbePNr4JqpZQcU5SgrrTRX6Sf8ANHTyPQjjYyg5KftFP33FTd425pO61avp1V9lfcx7jw7HbyXM0sT7xGIyFCyGREWQFZBsGV+fGVyfmIPGQfOnh3CUnOLuk46dn1uvv1OyGIdaK5WldqSTaik36tLVK1kunqfGvx4+Dmk+ObS50y4gS0upLG5j0rUBAATFLEd1jdMJAjbX8mS2Z23KIsozgTiXijWqYWvGpBPlT53HvyW282nbz+R60fZVsM41fefNOMl7t/ft8MuVO11fyd/M/B39p39lyfU/B2vaPLYPJquhatq8cksSbklW5s3ntjHMkcTxo8L6brFnKshkdV1BXLfZ5I4/0bh/PFDEU5XtTqU6Vr9HGXLJSet9XOLWunL0Z+e8QZL7fD1IKKc41Kko3alJczfLa8U1dKEk/wDGten8ynx98C6h4N16aNoLqOxnSKeGeZCoaKSJZopHB+Vp4sBJVIBEsMuUUSqzfsWArwrUoyi094+7smnqrdu3r5H4XnOFnhq9pJqL1TtvfZ7vtZ/8OeFeH545L4t5W2dmKwXLwMIUlDAbykZ8sMBIHBUDGV4AOa75q63ttfv8v66dTw1CLnfld7r3mtOt9e+39bf6RX/BvdcXA/YM0yxkSUW2l+O9fXTvPmtiRaalY6JqLx2sEGHjtfPuTN5sytNK87F2U7okijvO/f8Aq/3Gs9076tX/AB/rQ/fzw5etpup6bqMYf/Q7qK4IBBLKsq+YrDcDtlXcmTjhhgcnG+z+ZB9pqyuquhDI6hlYdGVhlSPYggitxDqACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKAPO/ije/ZfCVzAG2tqN3ZWIPfaZhcyj6NFbOh6ghsY5qZuy9QPjvxlcy2ejXD2SiTUpwLPToWyYpLuc7YvNVQSLeLAlnOV/dI4VgxSsfTukvm0l+L18hvZ+j+6135n+XT/wUw1qXx3+3F8f9e1C7v7i7n+I3ieziutUE3n3ljp19NpKNcBkTyDFDaCC3XykjiSOEhDhaxbtJvfWWt79fv06XLj8ENLPkTt5u777/AK3Pl74U/B+38UavZrcaZqF1becj2rLNFbwGUTK0Zublo5RNFvZo9iKXdiAiIxweXFYhUqcnJpaPZbWT6X/HY9LA4KWIqw0duZaaJO+tm3urLVJXWh/RN+zF+zNN4cvPDVxe29kl3qTqLi1tmS5umsxGk0cU0rqVto0mgG9iUMjoSYWLHP5Ln2dqftaUJScY7SbslLbRrVvW6333P2zh7JPZeyqNLmko83KtFGK0TbXe77bXXf8Acr4F+D7fwPYQeE9PiX7Jpq291CRyoW8FwjQAsN4t1uIJjCGciK3nitQoWFVX84r15YnEOpZJyu5W05uXRPTS9uW/ez9T9Bo0o0qKpq/JG9k7+6u0Wne0W2lq2kkr7H2fZ6bI/wBkdspsY+ZtQ742IJy2MgoPkYjlMPg5PSmo2TVm3a+m2rd16aKxjKbvNKL5bWi7qze9t7p2e767Hq2jILbyWmeXCMQqKke1Ij1Y/KuWOFMi7txVehfgejh5Wiud68zta2idrJa/f5bHl4hK8ow0ulezvqt1u11v1R6JYmyQIsmPMDM0eHztbAbjJyAyluhI5I+7mvVouK5bNbu6vrfXRJtP7vU8fEqvK/K/dWsrWXuvTotl+LsdDbXYbow2gEfvQGbeWO3cqkHaQvy7TyrAnAU59ClV03j5fLvzX1tru7nm1sPLR+8r2v7N2XKlqneMk3fz/Gxpqw8lirIzsCVOza0ZYYO/5pVwuMAkbVzkjHFdTcVC6cXvq1Z90mlJuyutdOuhwTjP2iUoSiouOjmmpptP3fcjdt2ej7WszMuTYWqOTbrMHZvO3LHhsMDlxtxnBDkhRuIUZXmuerOhDmbgpJttv3WlZxvd7dHq7vujtpRxdZq0/Z8qtHlU73lGUdPft3XxaXfc8y8SzW6vM1syruJZwoBCMwKmIFeAOOgYBTtGB0PzeY1Ic75FGN007W76arR6eX3n1OWqpyU1Vbdlu09bK6d3rrdW21+Z4drsKmeW4kVZThlKsvmDyUyhwPu5wRklcEnI9/npK9bma0jGTacdHo+rstku578FdJXelnfz3t+PrqfJXxV+GOh+I0mvfLd4r+F9N1OwRo1s7+zLO8ZnUqSl3YzNmCcE5ge4tmX/AEgMm+GxnsZKKvZSjODW8Wmm7e8tGt9d7O2jJr0VNO8E5Wcbu/K/XrdPbpa5/Jn/AMFAfhPo/hvxxrVlrNhPBp2oT39tbyvbtJFaPLcSXmn3JmCDbBfLJK1yPkbzo4Yw0JvPMr9u4Wx7xOHpuMlJxUebXW1uVrfdWt/wUfi3F+Ap05t1E4qd+V8sbK15Rl397b1tbU/GBPC8Wm6jLZy3M0Nrazqsaqhy8swLRo2Cq4U7txDs7pCWSOQYA++UnJX3uvXTbf02uflkqfJJxT0Tdrddf6+Z/pb/APBGDwFH8N/2IvhRpH7l7zW9Is/Et4EZ3miXVtJ0qSxuruFQRbyaho66RdQJG8rG3mM1wsNxI8Ed0ftPvJu2l7a2uul/P1Inv10dtbfL8D9i7Jd3IDdMj5hGDkDplScY6qSCOmeCDsQfXng+7N74Z0aZiS62aWzktuJezZrRizdyTDkn1Nbx+FegjpaYBQBwfjfppn1vP5WtXHr8iZdDf8M/8gOx+lx/6VT1Mt3/AF0GtkbtIYUAeK/GS5222h2gOd1xc3TqO3lC3ijbH1mkAP1x3rOfReo0fK3iO5VXt7mVS8RuES3VGI+YyRqpI6rv3s5c7QqDnAHEdLtddOn6dxWv9zXyasz/ADjP+CzXwX1L4P8A7bnj1L/T5rHSPGOseIvEHh/XbUJbf2pba7evrl28dwyLazGyl1WXTXhhlecNZeZKsZmiFczvzO7T95t213d9Pv7msPhgr7RSfyutfWxV/YW+Gx+I+raLpMdzHFa2NxAY9sCHa7SRebNcriGJpUVlChWmLyu0doNvnO3yXEmM+qYepN630SvZu9tF1e99PmfecK4JYqvTjotYyutUox0d79+n3H9S3w3+F2j+FrHS7WKGO6urdET7asMcCRgwyBRHFEsSKrMwiWNV+Z5WZg2DX4di68qzqVJ6qV3Zy0vulr10Tv5dD96wVFUoKMUkkktFbp11e7fZdUfS3hHSxa3c1xIg88SLK5UYKxRBliiVeTsQlyM8fNINvOE8dVeWSlot+l338/LqrdDuqXceWDum7X6XaXnte59C6Or3B6xrbtGm8lwrGQiPByVBUkFUAw2dwyd3Xvpxc7cu1r3t5X/rXY4K0o01eV3NXvFO9+n4+XnbodvbwOckfKVIHzCPaSFwEVUyRvDsctk4XAGNtdiguXSVp/LT1Sv1tvb7rnHz0k+Zx1aenLorvRpWs/T+W501jbBQk0ZaSUFjOD91sIY1DMVDAAklAcqA3y7eo7qNN2U4t8yTuu9uZfgn+CscM5fFCWilZRXL1VpdZPt0XkaqNI6or+b8jqAI9ucBjnPlkElGYYDHcyrkbgCD0pSjpJST7x1u/S6/UwkoRb5VB8y+0tdFrrK6V1ppbX7y3GJHdZgU+RgzF1dGeTHUuM4HbcAyEHBX5TVrmdr99VJatpWVr6JLVdd2YScVFpp+8rR5GnFRd2k1qn5p67+RDf8AmNvKRTGSJUd8ujfaGC5Zfmy0f7tFOcfcyBnGWzrSupe5Lvo1aStsrw01S7Xs3e7KwysknKFpPlVoWatqm/eezfbsecasGLMCUU797hxgglmJTeMAkYyrFQC2CcAq1eDiW+Zv4etnd2vo1p1Vr9j6DDRjGKa1vpzPvG627b6ej7HnPiOKTYbiHLFR+9jGA7qXeJgoDdSFTcDnJYhVZl54Kz91tdnfr1t39T0KMkpcrd+bW+2qaWv9aHhXiGANG8W1hIs+ACrj72dykdWBJOWZfl4RduCK4IN+18ku6/M761P/AGdP4W3Fu+t91pv5X8tD8O/+Co3wssL/AOHEHiJrK2kNilxHfzYQStb6oxtIkLbEULG0EcUDvJvj81guArV+mcEYuUcY6HPKMamsfKUVsnppqtEv8z874ywiq4KVVQTdLeySfJZ3Te78n5pH8sPw4+Het/Ez4o+H/A2h6Tc6xrmt+KtL0Kys7aCW8nkZr0QmOeFAPkhhjllkAbakSSF3hSOWRf3KLSgpPdQT7a231/X7j+f60Pf5Y9JSs9lZN6v06+ulz/Up/ZG8GWfwq+B3w98DQ2KabLougadps0X2iK6v5ILLTIbPTF1i/t41D30Gk21jayQW8aWlmkKQWe6ySFjtSTjFX3f36bX/AB9OhxSab0d07va2ru9F28/0PsGw2TKpEyBz8wTzyzHd2wwjfBx2bDDgE5FaiPpr4XTl/DstuTk2uoTIuG3L5csNvMNuSWAMjy5VjkNnk8E6w2+Yj0irAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/66DWyN2kMKAPnj4yyudStIkBbytJWTjoDLd3CnPBxgRKxx7Z44OU916DPB9Tt/tUaRsQEhAIVl++23ABORsCBc8DjLcccpO1n0ve3drbfb1A/iU/4LcfDG2+Lf7VvxFn+0RWmteDtA0yHRbttRWWKG207Rraa40+PTnfZAbyZ3uwkBjSR3uJ3LzSqJPgaue1aGf43DTi3RhOlSgknaSdOm3K/wAPxPfvpsrn7BhuCsPiuCsszelUhGvVjWqV3zQvH97UUbrmU38KVrOyTte58df8EnL7TrX4p3fh2WaS4uLaz822JZjGbzc0d1cYyyHbcTFINmFEMZY5wWPn8bOTwNOolZOautNE+W2qW21/vM+B4KGMqUW+aUabskut5X9NW9r7n9SGiTEQIE2rIsYOw/MfMba29sDcTuXDH1zjGBX41XtKElbVP8O93/Vuh+yUm4pJ6e6l81ZK706aLR272PTNG1mzsmN5dTwQ2+QLqS4lSCKJQwLM7yFFVAS/zMcYUAN1z59OnJ1I3i+W+l1e70+9nRp7Kz3u2rrayffztrZnbaR+0N8B7a5k0wfFLwcJ4HEF6516xFvDd5ZZLW5vWmWzt7kRsSEmmV8DIAwpr6ehgq1o/wCz1uWUee/sZctno942dkt/nsfO4mqqk5SVWlaMraVaWnu31Slu3pa19ddtPetKvtD1+BLrR9Vs722kCvHcWN9b3kMymNcNG8UjJJGVeMrIpKspDYO5c19WU5PlbjJLROyeiSvZ/PW2zM/aSpe84c6ldJO27u76bdfyOxhVbYLm4BZ2DEFAAWHJwMoWGCcso29OcqSOynFU3FTk3ffbS3W/4v0Xoc8p+1U7R+HRO7v2f/BV7bGpO1shijxuNwdysMMgIB2fMBhRuJCj733R93GOtypJRV7ty36KNr6vpdrTv96OOlGtLmbdlTThZ6XTau7a30abd7L5WdgxiRIkjZFZBk7erKMZVlHGN5+b72MfKytwE4RtFqdtpNJ20tdbv5b+dzOLkpSlK7UruzSXvPTR6X0X39CW6XzISEEbltnmxAbnbOSYwykMQc4QHHGQrBWpSUWnFRT2Vlq5XSV15310f6mVJ8s1zuUeRScJdEr7vW2tkjzbXdJkit5Ll9zbCFXsUUurEyrtIKggbCBhQ5OCMk+NisFJRlU1td2W19dXfov66n0GFxtOb5FJe9vJ/DorWTV9Ul5Xem7R4Pr/AIz8G6XJNa6v4l0fS7ncAkV7q9hBM4YjCpHJcRsc5JYKpGA3lg5215Douamo05Kya5lee+nSN1bz738z24yUXCT5U2ly7J9dNWuuu1vM8n8S3lrcxx3VncR3VpM4mtbi1ZJYJomVjHLFLCXUowwd/CvjJQA5rzI0JU6nK9Gn13cXazS/4btfv3uspQkmlbl678yvqm30fa+vmfDn7Zfg/SvFP7OvxZS+SPyLDwXrWpqx3HB0q2fVIwrdQY3gUoSmQdrkocMv3HDMHSx+CmnZ+1jH/wACVpff/XY+Q4hbqZfilJLk9hU8/g9/T7t/+HPwv/4IsfAC4+P37YkMdrrFpoOneCtA1XX/ABHq/lxz6m+nStbaXbWemk21wYdVu0uizTT25s7nR7TUIXmCz/Z5f3yLU1RpdZxu7vZK1+2vvLTz3sfzpiY6V6rvyqpGK+HWc3KVt00nCEmrLt3V/wDQQ0Xwzp+k2tlZ2mw2un2qRwGeDzFEMMYijRVcIFLL91t+HcMcs5Jr0FBRVl366+Wh5Wl2+53FjZ2m9f8ARrefPzN+5jIYdQwbaSqjjKMTjbwectQHvfwsitreLV4bX5Y3NjOEGdgJW5QlQQNpKhAwx2HA76Q6/IGetVoIKAOD8b9NM+t5/K1q49fkTLob/hn/AJAdj9Lj/wBKp6mW7/roNbI3aQwoA+evijiTXnQ4/wCQdaxqMZ5Z5mU4yOAXJP0HYGsp7/IaPDdWUWsUs9zHJLLjiMoGjdyAqGLJC5zkjcCACRzjiAZ/Kr/wX18F2vw7u/BfxT0PTrK11f4rWdz4V1SCKG2fUbrVdIsX+0X7qp8+GCbRJLGxvby38too1UliS2fjM6ytrOKWYw0p16UY10p2XtqbXLLlWj542bb+0u71/U+GuJP+MWxmQ1UnXoYmFTCe5GU3h6vP7SPPbaFRvzSl0SufiH/wSksZD+0c7Mu5otGv55mWMiIbJYU3qXG5WaSSd1BAAjIVg4GU8XjSa/smmurqQirvXaL6X00+WnmdnA0Jf2viH7r5ac20m925SSW12vXc/qhtbi5VRJEvzsHVFBAZn5fYQwHADZUEgY5xggV+Nyerk0+V9NN/Py9GfsEotJ3Wj7Pr1ev4fcfKPi/9nz42/HHxLrA+JvxdPgL4WgsLHwh4HlEWpX0ERHlSapq8nlNG7qokm2PtZmEaIqRs9e1g8yy/BU6c6GDhWxvLeWIxHK1B9VTpfPe3d3d7HDXwGLxs5RqYypDCv4aFDlhOSt9uqknrvZaPVbHIa5/wTg/ZdOhz2sXxp8W6Rqdugv1e71yynheUkk3rxwjTpnxtkG6SeQAKzEqqE17MOMsbTs5UqFWNlaMYSStpaKabSv0SS10aPMnwnh675EqsIqN41XVinG17yaau9Xu5X0s9D5O1T9nP9qb4T6m1/wDs8ftWWXiiaFHutJ0L/hI1sdQuoJ5ZLWKCS1vZLmzkuZZLaa1jU39w0TWjb8i3Xy+7/WPJsVH/AIUctlRTdpVYwvy6Jt80YwktHeWmz3szifD+dYP/AHDM1XUffVGq+aD3Vmpc8E9GlJtWs7tbHsvwX/b9/bx+E+p6ToH7QHw91rxfoTXVvZTavdeHvs+oWaEzRu0mpaTZPbXA86EWaTG3OXvLORjIs6NXHj8JkuKhUnlWY06TjFz9nKcZpq0W4pTlzwbvqlNbNW0OzAV8yjN0czy6UpT9z21OKg4PVpyjTUqco3VnaLbumpJNtf0Z+F/EVt4k0fSdQilP+n2NrfxpJuVoPtMMc8YkRkSRXjWTBDoCGA3IThR8fRxjlpz3mlJNN3SemjV7aaK+3md1ahOhKdoe5flb25o36O28ku3VdToLnURbu7PcogWN9rbiSgI3DLHIbABU7zubIY8qoPRVxbgnLnUbxstWtd302s+++3llCjKpFe5eLeqtG19ulv6v1ufid+1p/wAFSvin8M/ifqXwY+A3wt1Lxb4n8PXkljrGtahpWq3um29wPIltUsxYKqTCS1S8uJDcTbVhhjUqFl3V7eTYGWKwyx+MzKGFw3M/ZQ54OpJRk4uUvaO0btWXuu6d9DhzCtChXWEw+X1cZXmryfLKNGm5KLUW4pu+vRqzW2tz4ovPid/wVI/aYv4LXxN4utfg74R1id4be6vdQs/Db3UbIZzFHpVmwvpUjiWWZobiKWV4o3WRnP7x/WnjeGMFHWrVzGstZLm5ofEleXNamlzNJuN/xMKGB4hxLvCjhcroLVTSXt5Kzelk6i0u7Ta/I7nw5/wTK8UeMrFr7x1+1jqGpavOkyP/AGRBBcxrLErxTGNpJrKYkXAbzA+6R8bXeFo2cYvi7CwajhsqoQhZ2U5xV7Wfwxi91+D63NJcM4iTticzxtapJXc6cFyX1Ts5TvZNPaK9Oh678M/hR+0F+y34o0rwp/wlT/GH4PXk1nYSPdB7fW/DMs8kSTajFBJJdh7dBLJPKiXBjEcju7LInzeXjsZlmbx9s6CwWOjJyXI1KlVivhi7Ncsu0rfI9DC4PH5U1SWIeMwbirKq1GrRbd5SW94u7vHsm+iv6R+2mkrfsmfHcWMjwyyfDfXR5yHDbbhIom24ZcZgYrIqkIV3DaUYg78PSazLBxa1VdWvZ6b9ez1vvbsjlz6PNlmMab5JYedtk7yg9+lrX16H8zf/AAS3/aA8cfs0fG2X4q+ENVhikvIraw1TwzctdQR+NvDE+ofbPEOi2s6QyxQ6toEdtBrVhfNY6pHpoaFGsNR+0nR7390gry9om17NcttF1UrLzaST9OjSP56xaahGnJX9pN1NHZpRSUVJOy01a7czdz/RV+C3xR8K/FzwVovjHwnrVhrOn6zZi4W6s7izk8x0dYryC5gspHtDc2lwTb3wtXmhik2T2s1zp11ZX916EJcy13t/wz00/rzPKaaeq79U+tun9fp9H6dCjxfIESUMp+VWjK4OGDqMKdwGBjsSdx61Qj2H4bkLd6mgQITBETtBAO2XrkjnO/jnjpWkN38gZ63WggoA4Pxv00z63n8rWrj1+RMuhv8Ahn/kB2P0uP8A0qnqZbv+ug1sjdpDCgDwD4ijHiWQ462Vpz7Yf+uayn8QzxHxbfWGnRpqGpTLDY6ZBcajeNyT5cCYXCgEuwLblVQWJGFBNRdJa6e8nfoui/ruDP5G/wDgrj8QNQ+LWt/ECxuJbWNtM0YaH4MDC9a5gu5JbLVLiLSWmWO3juIdBF6l00UUks94+p2QMT6klqvm4yPt6coys+XWCd7XXK42Tuk9fTd9NPWymtLD4inVvyqblCq4pX5Gmmr76t+ltOp+bH/BKrwFqmhfGLxJq+tWdzYSp4buCsN5CY7hftN7p6wmUusbec9tGWlUFQrliSuWB/L+MsTCrg6VCLXNTqpSs9pRjaSS7X0v5H7JwXgqlHF1K7i4qtT5qbdm3GUmltdJuHof0uaBYxXZhlZXYLHI0bKUYlzHsBIwCeP7wDEcKfm+X8ixFRped7PW27007n6nTpSdpct1fRPrsr+iXX/hz8tv23vHv7WvgW18Q2vwn8GQeKNMvLeexi1Cw1H7FqWl3N0yQwXH2V1hLQxxjezW8/2iC4jS7S5gRJIrv6Xh2jkuJrUlj8VOjUU78jpzlCcUm2lJXipduaya91xd+ZeXnVfOMJhZyy3B0cRdOLk60IVYzdrT5XZuCWnuPmTs0+/883jT4b/tX+JLc+KPiJ8SPFenLqVxq8GoeGPDcd5c6voF5bW73Gny6hcahdAR6Xe3ULrcXAubezhWO4EXElvBL+x0VkuHw9J4XC0ayU4xnzRp+1cFFv2sYJRvZ2Vk29dj8Zxq4nq16jx2LxVGnKPND6vUl9XhNuzpTnZyg3vso6uz6H0N+z7+wf4y8d+LNDuPhZ8efGXw2fTPCl5481G6+M3iPw5pnh/T7+z127s9Igl1jw7rt7AE1i0S4YaXcDSNesr77T9ls7u2EWpT9U/7Kx/1hU8PSeGhStUrVqNOhPncU3GKlo9NEmpX23R42Hq57gPqvLXxVTGPEJxo4WtVxFNqLkrzk0mnbezSW+jvb9+/2Qvit491u6X4UfEnWfDuveJrfSje2q6VrVnrgnsYDGINV0zUoZ5nvtPuAUYaRrK23izw+/lxaslxDc2N5P8AiHE3D0MLWlWwSaw1ST+GcZQTley0cvZ9nFtRe8Utl+/ZLmlerg6bxtoYin8UXF8z5ElJXcVzLS6cXrre+jf6a/BnW7nXtRvdOjdhc2MstlIkskmwvby+UW2sm4qf9ZGA5HzEg4JUfH4DD1frboLWUfd0d7q6Vl67de57eazprCKs0lF2b0vbT5Put7/K9vS/ijq+o+GoJY5iyuqF2K7kUKF+c/vI067hht4AfcoO4Hb25rQr0Zqi23Jp+7e2q2urK+mm+6PPyeWGrRdXl5oq7S0nfW97p2t18vxPyO/aS+Knja9u5/Avwl0ywvPHev28sRv5IY0awF1cpY22ovdzQtaaXpdlqdxbx3WvatugWWQ2+mWepX88EQ9bh3hyrja8JYmVSeHhJSmoSlGmrO8uZ3atrqopvVOTSte86zOOBwM69JQVRc6p01HmnKdm1ZL7Ts1Z66Nq9rL+d/4zfCP9rPwZ8a7j4efGb9ozxJ4VvLLXL3xB9s8FeEvFHxF0yxvbzw7p2raZfww6fdw31z4d1q31TxHaXlzDZsLb+wL5m0uUXENqn7lQyzh3A1Vh6+GoYdPCKUa9SnzxrU4tWhFrduXKkpNvms2fgVfP+J8bSli8PisTW5ca41MPSqwpTw8m503OXtHdxSV3Fw09otVozzPwN8Wf2yPg5pGkfEy91TU/G3hBfE8nheKbw3f3VrrW3Sk+3tdW+kmf7Frkct3qs9rfS3tlKy3VrcwCaOdxOmWMybJcdhm4UqGHcuZU5zjGKk1KKUoyXvKKUVZ2cV12sduV5/xBhcXZzxGPow5JVIxnKTjByk+WSfNTlNuUtObm0dtGf0wfsTftF+Kv2h/B+n6vqvhXXtJYWhku9R1vTLnTBdX08pDRW1pOiTiBAjzBmCRxpP5AP7mN5PxjPcBDKsU6UMTTn72kaNTnko2upOSvq9Fb1fVKP7VluIjmuEjiPq9bD8y5rVY8jb10UZatRavfbV211Pef2lNCj1P4EfGDRywkTUPhz4pt1jkIIH/EnvGDAhd4UOoIJ74KAYrtyDEJ43Czu7xrUrye6vJRlq9NnfySPNzrDJ4HFQiuZToVEl7tk1CT16r+ux/Pz+zz+xLreseAfBngfW5tb0P4j6trFx488MTaXHfXGqaB4U8Xabejw1410i2s47Vprax8VXUmneJdNM13dWmo+E/EBSKxuLBtP8Tf0JQ1pQck7VOWffmSvHffZdLaNH80Y6yxNVJqUYOUedNacv52enXbpqj9yf8AgjF+0l4rTx/4v/Z5+JVqujeNfstp4re32LZ2J8V2Fp9j1i90qzS0htIdP8R+FRb6hcW9pefY7S20XT9I0nRrSPQNQuT102o1bP4Xez0WsU3a2nTT5Hn1Y3XMopW+Kz18/uev+R/UBpt2ZLePePLGQsjeh3HowwAEwRhvfBYYzuYHsXw5KtfagVJYi0jUsep/fKw6cHr1H07VcN36AeuVqIKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/wCug1sjdpDCgD57+Ksv2TXopCN5m0y2Mca5Duwnuozg47BMk9ABk57ZT+L5fcM+SfiHcXN7cwW8krRWgtrmTUZFVXj2q0Qh0m2tSsn2u7vC8pd2WWKNLeVPIkZyqTJpOKSTvvp+XXfzJevrpbX8fRH8/viz9nu0+Lv7f/wv+Dup6aZ/Dug6d4i+KnxWtBNcFBp+k6zfJ4R0ApdmVpdPtNYNjayPMgfUf7cvrm4hYMJn4Z03OpCmr+825dLRXN91/Pfpc76E4xo1at0rKEE3FfHK17LRJLSz8vU3f2ifgdoHwb/bH8W654ejWxg+JnhiDxXd6dDDHbwQak14sd49nDCEjihkkiuJ2hiRUEjSgBlBx+T8cYP6vmKjDSGIpe2UdlGadpqy095q+u93fZn7p4c42eKyqDnrPCYhYeVRvmlKnK3K3dXTi5Wu29n8voLwHdyNYwRDDOU+Vz8xxuJyMchV+UYO0AjPG05/JcRDmqSTb9fR36rf+r6H67Kh+7i9bWTtdLRq/TW3l92j19ebwVB4i065h1KMXKXv7u4SaB5IJYmOYg5wysArbkYFSCAM9GNYeMo3cdWnbmtZ2ai97dGr31d/keRiKnLJqCUlZaJrvvbT/PqzxzW/2bPB2p+VDrPgHTfEkMVzLcW0/wBjWGdbn7Lc2kM80hSN2mtUn823VkaJJdk6jPJ6o5jmuFf+zzqtbLlk3pdOyvJNXtrpt6Ao4GvDlruEJR9600pK6Vk2nHez627nVeD/ANmjwlpDwy6D8MvDmjzxowW41OcSySx+c9zsdTYG4kjXesXlJcLhIYYlkWOIY7IZhnWMSU04r3re1qtxulZtxS8rX1b0vo2cVSeWYbWnPmbe2GowTs7Xs9E11tqtlZHrF18OdLsdN+26xp+gqdLaO/S/j02GCexuonXFzb3hU3NtMWiVJFEgFyhaHyjuBLmq/s5LE1YuLXvKMWlo001Z9GurTelovZcqxHtKyWHjUV20ueTvKPLrzR1095pOKsrdLM8O+FPiH+x/iVJNAhhjvp7idwcqFjnleVEKKUMcoRkDs+cSMhXdkE+Xg5f7bGorrlbfNtLRtpX83a2+r3PcxVBzwNSM1vHZbJpJtu/m2mvLU7747+J5tSvTDeNItrcRFGZdxJDhiZVLHDxn5XA38hscNgV0ZrUlUxSqz95crad9nfVNdH0Xk1Y5stw8KGD9lC13JJqPL7qukk7fK602PEbr9lrwFr8eoavB4I8P69qutRQeZqN5DHNq17a2pia2gXULhZIrUW8UH7uzWRIII4/NjcHaqduGxeYUYRhhq0+Vc0lBVHFNO+jtZX/H9HVr4WUmsTGNrpSk6cKisk1flsnJa7pNq2jPnz4ofsQeA/iBe20vizQ/HltfadCun2JltLjW7W1tozF9n0+yulv71ILKBjPILPcbFnuJfMtSZZXf1f8AW7N6EadPE4evVjT+HmftYxbv8PxOz0vZqzOB8OcO4l1J044FTq3lOUIwo1Kku8klGLaW7dP1jdXOu8EfsVfDXSW0m20jwneNbaXZ21jZya7aWunpb2tsEKfZ9LSHTNLilVm88vaWyysxRlkwqFOHE8RZpmD/AOX1OmnpF80LRd7pXa6dO3dnTQy/K8BBU6UMPdJJ+zSmm+kmorfRSba02vZH2BpHwy0jwRbr/ZOmW1vDshSXZEi+RtSJG+VSIy396RAuZPnYK7HHh16cqknUlaUpWu29bPZ38nbQ64V5TSpQnLljdQipNLrsuVadWu2hm+GfD1h4r+K3gzwtqVtBqWm6v4o0S11PTLqJLi1vtNbUIJLy0ureQNHNa3Nok0M8MqNHJG8qspVnU/ScH0FXzjBUJx5oSxFHmTSaklLmkmn0tHXfTzPD4sqywvD2YYiC5ZxwtVXvZxlKEqaknZ6pyT/VX16bx58EbPwX8R/hZc6LYWMU/wAJv2j/AA5pVnLFZIZ5/hX8R08M6JcaH9rC+ZHbW3jfWbHWJS7BWk0LWo7ci1vrm0T+j5U+W8Y7QqQkrae7zJWV7X091+mx/LPtHJ3k7udOae2rSbb76tXfrqz4o/bU+Bc/7Nfxn8PftkfDO4vdI/4Ux8XPAusfEzS7KaSO18UfBn4z+KrG31G71CS2tpXtLXTviLa+Ih4gCRPapY+MNX1SRYmlkkep021OWnMuWols9pKSSSt0V15q/cISurNbrlTvpe6+96rU/o/8JarBrGiaLrtgwuLHXNJsdRhOCd8d3BHcwTD0l8l08xcKRtwcMOdE7qL/AJkn8mYWa0e6Z798NIEFzq0yKqjyrZPkY7DueU5C8Bf9Xjgc4z3rWHX5AeuVoIKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/wCug1sjdpDCgD57+NCvDqGjXW4Ks2n3lujccPBKsj8HvtuFVOvzMCRheZcU2m/uA+Xr7SP7W13SJpU3C0SaXTo8yYjmTYtxfyKH2yM0cjRwF1YxhvkMbO+YavKK0XSN/wCtvN7B521Pjn4M+A0n/bP+JfxGFrBPZR+E9S8D6feywyrdRMviq01vULeKaVys0Elx50ZmCb2a2EYcwrGqYL+O5W2U4ejUtNet3Jr5Oxopv2LhfSThJxvbZW29dfV7G5+2V+zPP8TLzRPif4deBfEHw60HV5r61uJPs41HQTBcvepBL91ruwBee2t5AgnF1InmCVIhJ8XxpkeKzKhRxuDlTVXCKr7WE5W9pQ5W5crtZTg1GavZS99Xukfonh9xLhsnxGIy7GRn7HMalCNGrBc3ssSp8sOaP8k07SmvgaTem/wZ4FuWW3tsZLB8nphQu5Bk5BK4XlTtYnBPbH8/4lWqS1afM9uuuy0/zP6zw1KNWjHmimpU0rre2ji9L207a/r9ueAZBfwCNk3Mipt3DKKxj5wpBVgzDjI4Vdx5wRrg/wB6uVJJ67vZJ77a6b/I+TzvDRwrul8TafXTRJ38kna/fqj2q08NidU8tArkbS5YDaCeBjOO4weTlgT7e9SwPtEkvdb+1e17LpdPt0b69T4urjI0G/aSb5deX1vu99ui27mgPClnalWm3Ss4LMmScnnLE7sZBKlgSVwp+QZ3V1LLlSd5Nyavf3uur2t12/zvpy/2k6/MqcFGK2lq730sk3LbXor6e9bR/Pfxr1Kc2i2iAWVhGHYRx/dmciRw0vHzKhP7sEFVHOW+9Xg5rXs/ZpKMdkkreT1+9fefRZNhU1Ko3zz0fM9HGNkvdu2le6vZJa6I+T/hbYyX3jJZvJ3KhSFiZFRI1keNZpk5J2wwLJJGin5UXAKllauPLqbeIio2a1cr9Uv0Wj+XqfQ4yolQna9+Rq2jWmu+m9u23kej/FbRGj1LT/kdjuuIysjABAHd0AQJuRmXdhgxYjqpCRNXRmkHCpC66Tv1bs7Ly8/10OfA1LwTlZKTi0u6SXXV/FHz1s9djsfhVdahbQRafOBIsewxGTJZ0ZWDDKLiONsKwACBmL/LgFhhga753Tvez27La3zvYyzDCU5WqJcrcdXF2XTa3ZeWvc+im8PG7QTsjxl97NGiKCyKoYFthA2pll2sqswO3aqqa92VCU+WW10+7vbXX3l1ta63fVb/AD3tKdOT1vGLsnKaSb879+yuy5Z+HGSKU3C4ZQXhL5DMqhlBJWRl5wADlchkZsMcApYOfK5Tsv5U2lovtfrre5M8TTlOMKbb53yzs78rdr2urq19X1V7dTxP4ialFZLcIGKnJCjj+9h3OS20/d4OARnKg4avExdRRm1Hvrd3aa7afgfY5Jl8qsacmrx3vfu32T3+/wC44n9m+NdU/aC8I3DjEViuvX8rAqURbPw7qtxA2cEqpn8oBugLbl5GB9f4fUnVz/DN7QVap13hRqWPm/FT2eF4Vxaho6joUr7X58RRVltfS9/L7z7T8deHRq/i22v/ALKRNr/jf4ax6UkSsXkPg7xDqfi+a8uQR8qt/Z17H5udhiSMAAMxl/oKXxP/ALdins2+Zvmt5u0vkz+UFK65bfzW72sk/k1+Pqc3+1F8KNO+Ifgzxh4K1HTo7nS/id8KPid8I9bYxoHkPiDRLODw3sucM1vcQ6vcG60+42ullcJczQeXcTlWuDXPFuXXlk3rpJWt1/mv8m9bBfRpdPeX+Jar77W+Zlf8E4viDP8AEL9k34T3d7M1zqnhrT7r4d67cSmV3l8R/DPVbn4feJp9zxwstvca/oGpPZJ5aqlqIkXcqB2zgmoqNvh93TXbVa97NL5XKm7ycrWT1+bP1R+HFqIrXVJ1+5NdQRqvZfJiZ22n0JuBx2+hFbw2b8/6/MhnpNWIKAOD8b9NM+t5/K1q49fkTLob/hn/AJAdj9Lj/wBKp6mW7/roNbI3aQwoA8P+OVjLc6LotxCuXj1SWy3HOEF/ZTMrNgE7RLaRHtlwg6kAp/d/wwHzfr0v9jaUmo2MJl1F7OewtFk3Eve3KrFEWwPkiS4CySEDiNWIXIwZe2q1W3n/AMADzz4XeE4tO1PXb9cu9vqqWsNz1knVgt1qN2ztl2kvNVvrppTI3zeTGQNoVjmorW/utO3q7a/O7/4cE7697fhsex+NLPzdHv47pA8Oo6JrOlTnAUn7Vp86RM3LKN3yqQTweCSOaxxFpYevBx5lKlVXnrTaXTvp536HThJOGKw9SO8K9GS9VUi/+HPwU8KQJ5gt1baYpXwd5xg4DRnGCw3IG64/h6bgf5Ix1SNHFVYTls3Zb6Xun+nysf3dktZSwlDnV37Om9bNfAm1s9N9ep9i/DfUvsZSV5CSoG9Q2VICjAbgZQ427QQAcYHOazwWLVOaknpd8yvZW/rT8NTn4hwscTSSjBOSu+yW1rW00V3621ufSlrrwMAMCrCxYsCys7OCBwDlcAN74UDGC2K+oo5krJL3WtVdSkmrNaPS17p/I/McRln7xupF1Fs7SSitbXd1q/NMsXOuQxW7yXcoUBSZDIQoACkFl6AfeyCWODgHnkFbNoQjKc7cyvzXk1+bWi6dPM5qeXylNKlCy6W11T1vJ6OPqz84/j18ZodS1O/0HQoPtUemqRe3gHyRTTEoqLIrMgkVNu5TtXbIu8rjFfN1cQ8bNVFZQUmoJe9J2692t/x9T73LsueFoa80qk1qotJRSUUkkk73t0endmF+zdq66rqVtchnZZolmlkKmZWgkG4OMD52AC4kI2qMOS5PHfhYuhiNU7tcrj1V3Z3/AJdV/SDF0k8PWna/u+6ua2rWmvmul112Z7V8aNTcXkEi2zLG0UkqSqAY0uI40UxuVkDLMUKsilWQ+XOWZSEDa5nJVKjkktE7J72Svpfz636o5sBhuWhzOV5Lmdk2rXk7NaNfK/S/a/n/AMOPitc6bqtsl/o00tvLOYN7LvxtjduFKoAnythDgbSw8z5lB8V13gmqsIxqK6clfXfS1t9d9L7voetUwEMXhZwlV9nUlT5qU4u0VJO8ou13quvya6H3Zo3i/RNZtorqxlwUWMuyMjEMVULGykhkyCCykBiRnPc/S4TOMHiYpp8tSK96N43hrqrS1/DS3U+HxGT43DSlCorwk3a/Mm7at39eu3zNu+121SwkiCb125AcqrkFgWwxJO04OF+ZgMjoAtd1bNKMaTgrT6bJ3XXW1rar7tzjw+WVXiI1L8tmubldo3vs421a2butD4w+Kd2001wdpUEY3DJbYsYKK2V+5uXkjbkspGfmz8bUrqdZt2tzPsravX8Ufs2QUIwwsUrcyWqeul3t3tt30+Z3v7HWjfaPiHqmqyxJnS/COozKZSTGs93c2NgHLAELsjkm+bBOFIG7OK/WfDTDxlmFas/+XWFlyyerTqShF+ezet9mfifjTjbZXRw0WkquOjdbNqEJybel7J2svPQ/R7TdEW71SLxPdIS1qVsNFicFVgt5MR3V2I2PFxcMvlCVxujg3onlm4nSv2l6ta3SVl91m/K+x/NC2263v19Cr490p9X0iW0UCOabUZRazZZTDJNpkgt5iVwxRbuS3Z1zggfMpUbS4pPRu2sflrq+m2/4X6g3bU+Df+CXcvkfCr4i+GArrbeF/jN4/wBNihaOCOWC41jVZ/G+oGT7KxgjkkvfFs2+FT5ltJE8cyrOrIsJ/Gna6kr/ACilf8CpLSKd/hjrdXaS0va+vfU/bPwPbfZ9Ahbp9pnuLj3xvEC59crACP8AZwO1bw+H1/4b9CDr6oAoA4Pxv00z63n8rWrj1+RMuhv+Gf8AkB2P0uP/AEqnqZbv+ug1sjdpDCgDj/Humf2r4U1a3AJkhhS+hI+8r2EqXZK5/iaOKSP6ORSeq3t5gfFurM0k1nYSMw+zXC3C5Hzkyk7h6fIwftjYcjgg0rLTV/8AA10/EDS8M2gg+2BPk+1lJoSwADhZI44WDZ/5aCMBz97OCB1IicWlfo23f7k7/gM7+7s49W0m4tLgBkuLWeFxkDJKMuQ+eG4wCO59KzkuaMo94tfemioS5Jwn/LKL+5p/hY/ACz0ufTL69TYUk0/VryzmJPR7Wd4ZA2SWJxGQCSQD83Sv4/ztSWOxVKStOlWqQd917OclbW3R3t3P7cyHEf7FhZcycKlCjJPylTvpr006bH0N4PVJBCVdgTsO7JweSQrDkfIWycDO0npyT4lKa50ne/bvt/TX3Hs4vE/u3HRr53/Pr0t5Hss2vW2j2hlnnSJYkLMZGGMANlcE8g9sckgA9cD0/wC0fYU3e14Rsm7+m1r3t2/4J8p9Sni6jjFNxm/5ZJvbVNR730b31PNdS1+98RRXdy7yw2G2T7MjkRrcFVOGeMncELYUZKqy5wAoU1xe1q4xurUbVNybjHVLRXVvNea+49NYTDYJKlRUZVF/ElZtxbVuVPRdFfR376HypGY/C/ia5j1PSlvrfVr/AFa8ttV862RbW9n0y9GmQ3RuisUFwmqG1a0vZpo7O1kNtcXk1vHDJJXZC9CaqKUXTlRqw5ZuV4VJUZqnJcvRVHFrRtStKzsdOMpSr4Nezck4V8O6qp/HUw8a9GWIhBJqT5qXtFJRalKMpQjdyPQPgZrHh3TvF80FsibIpJLO5tb/AH215YXLFXEc8Uu2QsxX93OC9rdqd1tczxEPXdgMwUK8FOMZQh7sk3de705ovdWS2vr73nw4/Czlg6nJOacpRnTajKzg/KSUkrSv8O1tmfQXx1vvCKaDawpGY72W6UtKZXdgpjYhlAbpkBI1OSGdfLHyEr7Gc43ASpx9hBqcXJvVv/NbdDzOHsPj/bVZYmpGVFwcaUeVJ32fMrXdrpq21lfR2Xz54Wi+0rBLdafFY2VkYvskjytJc3cvlu3mybNkVuoYhETcxyvOUA3fKQ5qzk56QldpNPfWzejeqd/v2PpanLTXsk0200mr2Stt2vrZrfTTRlxPEl78PPFFpf5c+GdXljS4bDNDY3cpCgS7T+5t52bdFIyqkUpMfy74UPl1XVwGJjWp39m1ecYtu1tdlpa1tLba2VmzsVOlmWDnhpW+sQ5nB3SuotfDpe7drp9+9kfTbeJLW/so54JEkidFbejBiB1IG3PUAn5uAewHX2njViKS5Wtb367pff166HzEMDUoV3CalpaykrN6uy6J2+66PCPGTw3t24X94kjKSVJwoRgB36PtwxYEHthTWFOKlNXStzb/AIL8eh9Vhq/1XDWbalFO66vr+HN59l5fUP7GeixtqXju+eNngtLDQ9OijIwrzX11qV1JuKkb9n2OJ+RtUMCyAtx+8+GUL/2lVs+WFPD0lddZe0m0rr+6r9NfI/nLxfxTqvK6Ld5yqYms/wDDBU6cXvs+aW+9vI/QGSMJZ7MqoQIc/wAJCsHcYxk5G7AA3ZxjkGv1c/Eevl+pzmrQm5ntonyjR3Nq68FlMkPmOGI5Gzy4fn9JARnAaneyffv+gH58f8E3UiJ/a/lhmluYJP21v2hFtpcK0SW1l4wudLtbK3EajbHY29lFb7Dub5VZSImjVCceWtVXnDTtzQi7fmO94x0+z93vS0/G3rc/cTS7X7Dp1jaH71vawxv7yKg8w/8AApNx/GtkrJIkv0wCgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv8AroNbI3aQwoAa6LIjxuAyOrI6noysCrA+xBINAHxL8R9DbSLtrlRITYahLE8g6mMSYjEnTdHJEQ3QfLt6Z5yvb1i7r0/y6g7rVaj/AA+n2nTNHYZV/scf3Cux1hxuV1B+9lM4YZBBIPaiV7LtZff1+/8ANDOwtTmVoJQfKbLsyDftGCf9X/CHwGYkEJnJwOBH9abh/Wux+SPxc8Cr4Y+LvjnQngaK1168uPEGjSgARSWmrn7e3l8AN5F+NQtflXIaHBGDiv5f8Qctnl/EeLfLy0sVL63RaTScay99xvppUU07dT+q+Ac0/tHhfAVYzTq4GCweJg9ZJ0nyqUrWsnTlBx1d9OmhU8J6fMYW8pjG8TyQkFRvDjaVyByQ3DAjsckfMc/n3JJylKFt2uunX8/67fYYivbe7uotb2s73t3dvkZfjG3bRzrviDXJ5ZNF8L6XZ6o0LQzzxuJEv7q7v2ji3vObWGyMVvDEkmJWMgV5AipKw9V1n7ROfI6UYxd7SdVNxezb5eVRXRPrvbtwlWNWlh6dK1OeIqVozqcyvBU3BRj717NqfNJ9VfTt4D4S/aX+FXxKmlt/B/jbw9rUlq0Ud9ZadqUEt3YpLEZUe4sGdZ0SZFZ43eMIygsr9MfQ/Ucbh1fEYHE04yjpKpSkopW/n5WrtPe6b7HRHLVNyhSxeGqVIpzUIV6ftJKL3dNSb5Ut2rrbc9VjsNG8QKSiW1wZFGP3sRQt95hseQ5B3D5juwCFUkkUQhCpFxlFpfh17xjfbSz2Oarg8woS5pRasna3M/RWSsu2u172NPw18Dri212Lxfpo04iC1nilt8yrFdWlxmHyrkwKMNuCyRORIY5YkzgLmtKeT4mbc6Hs/ZpOUk3P+bS3uu13bS9r31OLFZrSpxWGqutCq2op2Ss4pN212cbqz6Ho+t+Bbq9WC+8R3NhFaWaA29vMY1Vrg8Da0s4MhRS6KMDZ5ZB+UsrdVTKa8V7TEzhFWi+W+6ulpZ3vtq1f9OTDYzmlKlg4Vp1JaXjGUtfd5ndKSV7LRu7b66nkev65oeixSwtqNoVtUuWYi4jkXbbI0jyhlPKxwoZWZUURoGLFQMLxypNydKlCVSV7RjSUm7Lsle/39bLdHsxwOMcPb1UqcNJOVR+zUbr7Tm0lZp36+R8s6n+1b8KNR22Nvd6v4k0ubVBoFzd6V4c1PUtES4a/fSJ4pdRexSykggvFe1upYJZ4YJWVHkQSI1TjMpzCNCtOrhZQVGEp1I1pU6c0lFO3K5J83J9lx5tNr3PSw2AglRq0sVCp9Z5Y05UearTnNytdTUWuXTdSceaKbbPpnwT4c8TaVqOv6XZ3st54Wtzp0umx3TSyXFi9/YQXNzpi3BYGaG1MiSWvmbpUSUwM5ESZ+aoOdOUo01P2VoXurxi5NyS+6yaS6+ejzCvRjCnOvyrEfvIu2jtTm487u3a7Xne+lkdxBopubu4aVy8NnteYkEBcfdB6g/MO4w2CcdRXq4dznaK0vLdLV3fkt+3qeDisYrJv3m0+WN99336JP1P0X/Zw8Fnwt4BjvLqIRX3iq9m8QujR4kitJ44bfTIpCdrKslpD9qRWGV+1yfL8xr+n+BMrllmQUHVUvbY2TxU+a6lGEklSTuk9YLm/7e6n8t+IebrNeI60aUk6GAprCQcXeEqkJSlXlF/9fJcl7u6h2PoJlDqyEYXaBnHBzkYHUAj0I5B4zzj7M+GPNvHmsy6B4e1jV4TE+pWWmm20m2ckLca9qUg0nQbL72cX2p3kSxtnaDNhsLu26xSXvSSatdq9rpK9k+72Xm0J9l10utGtUr/JNv5Hh/8AwT+8CaZpOlfEhdMjiW11b48fEbVNRkSFoF1LV9D1h/C/ivU5YQqBLjVPFXhjWrm7wNrTzuZHkkdmlVrzk+r9m5dm/Zxu1tu7/gCTSV/7zX+Fzk46/wCG3/Dn6rVoAUAFAHB+N+mmfW8/la1cevyJl0N/wz/yA7H6XH/pVPUy3f8AXQa2Ru0hhQAUAeL/ABS8Nrfwy3Cj5b2AQyrg48+LbGjblHys0brwThhExxleYa95Pyf9fcHQ+f8Awg8yWt9parL9r8PXk1u0ZBYPBIFuIyhOCwaKRRuBxu3ICNpNS07ejt8t0/xGdzZapaNfyDmF1dZfKkBQKNuHiJYMD/dBY4IyWBbBE26rbb7wPAP2l/h/Y+LdCs/F2hpF/wAJJ4WczRxRKWk1DTJGBu7FSq5eSPBubaMcb0eJDmbNfBcf8Of25lSxGHhzZhl6lUpKK9+rQvzVKKvu96kE3vzJatX/AETw64n/ALDzWWDxNRRy7M+WlWcn7lGvZxpVt1ZNtUpt6WcX9k+GNNu1try11CJg9peSIlyh+URzR7URjjo0gyuzHLoVPXI/maUPZVfeUoyu1OLTTT7NO9nffon6H9GuftKUopp2ipU5bqVN2cbNXXwta3enU9X1HT7TVNLcyok0F1byWc6smVMDbzGHU53YLsuWzwzAL0x6LpwqQjNWbslrdJ8l5RT8ua60/m3seXQxc8NiEk3zU5qrG/8AMo2lZ3W9ou118KZ+MP7Sv7HupfC/xzpnx3/Z01S28H+ItKm1Ka40K6jluvCN5dappd/pNzpuu6OjwpqHhW8iv5rzyFnt7nQtRtlvbC4hjRoX+1yXPZSo/U8ZH29KVNU3CSjz+4otOEpJ3kmt2ndbq578srw3E1LlpzeCzbDOpUw+LpNxVWLitK0Y2fL713ytWcVKL7+3/A/9rD4N+IU8OeFf2jPAup/B3x5onwu0q38Y/EC2tbjT/hnr3jWOX7HeS+GrzQLq7EUk4hGtqviDT9PCW+pRacst49mzH1KuWZJiP3kWoR9nOK5HyVFUv+7bp25eZK6ejUmr310+arYbxIyFTp044rF0Y4mNRfu4Yuk6TX7xRquUpKD3SfI4K2iaZ+l1l8DPCWq+DfDfiLwZ8UdcEOtjws41K11nQrjTNTstVu7I3dzZSppsgkuLu0mkl09FmeJrg26BSGJrvlwbgVg8PVw+PqRqzlh41uadLkSqShGtpFqcXC8mklo7X6nzMPFPPaOPxWHzPIsBiYUFjHRU8JiKc4zo05+z5r1OWUbqPNLS66q6ZF458CfAj4X6rok3xQ+JU0zarput3WnaV4x8SWlnJrTac9gss+n2OnW+n3t7JYfbYF+yWomeU3MZaGQou28Vwxk2X1KE8RjKlSlOlVbVaagpTjKKik4++l7ztFW5rWv2vL+OeOuJaWKwuQ5LSoTpVcPFvKsFUnKlTl7RtTlWlVj78o3lUlZRST0Ukz85fib8cX+IHhLT/APwl+HNr8PPD/iXwDeaR401zXbHHj19b16UWuo2miXdne37WlqmlwNbSajLezz3kmriGBbNrAPN4zzDB4GnSWAw1KhXhTlCviZXnKclPmVWi5u8YSikrS95pyVtVb9Qyjw8z7HV6mZcZ5niK9J1YVMPl1Kso0o0VC6ji407U7qcrpRTs17tSTk2bvwe/Zr8P+H/AAvZaa9jHPi60q4lW5VWaKDT7lL6GBDtG2NbgKfJUfvmctMpydvwmc5hWxznCNSdpSbm3J/vG2uZu99JK6Tvd7s+ix+aYbByhh8LCFOnhqcqcfZr3U00oqFm0krXvZPdu2x9s39tDoGlWlhbqpv73dcXBTG95ZzhnPdQFGI8AhECgAbAK82VGFKhSim+aS5pa63dnr38vQ+HnipYzFVqtXmlTg/ZwdntCUuvXmk25dXe51fwy8Dw+JNfstMvdw0qGVL7X7oRsFnVRui0pJzlfNu8DzVGHWBLiUcoAfvOBOGZZ1mMJ14NYHDShVxE7NKfK7woprrVtd25Xyx8j4fjTiaOS5fUlRlFY7ExnRwdO/vQXwzxDj2pXstHeUoroz9IIzbmOFbXykjWOGNRHtWNVwFVFAASNAq7ANrYUEhh1H9JRjGKUYpRUdEkrJJdEuiXS2lkkj+apSlJuUm5Sk23J7ttttvzb1Yk80MaY+ffuKsGdeyg7flVSRuHXOPm2/N1DEeV+IEOu6tZaZx9hguDe3xUKfOmMMkFvFvYOypY21xe3ZKrHIt79kEU3yXCVrFS26Oy6f1ZdfOwn/Xmbv7DHhxrP4OWvi5ojHD8QfEnxD+I+mBmVm/s74p/E3xl8TrUnAG0pYeLbCALgBDFIi5QKaq3vzlrrOX3J2T+5K3kPpFdoxv6uKct9veb02WyPtWmIKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv8AroNbI3aQwoAKAMvWbAajYTQYzKu2aD2miO9B/wACwU9Pmz2pPbTcD5Z8Q2X9j6/Z6vbgRQ6ky6dqJIG0zFj9kmkyPl3OXiZm+bkZIUACLXSfd2fTVbX/AK/yGVr2SW2uReeWka4XexAZZNm7gjbyHGdm4dV6gDmrJpJbL80I0jJBqU9rErQGO1LX0yFV2mQr5cSMNpwPvkJjuAuCOJ1irW1bD9NV6n5P/FrV7LQPjf8AELweYIrO0kvrbUrSBI1jg8vVtPtL1zGuFEbrczTthAFdTuXBVhX8weIGCoYbiXH0aUI0nUdLEKMElF+1pqpKyT0tNy2vZ3vZH9T8B4mpjuGMtr1JzqypKeHdRvmlFUpunCM291yq2t3ZLUveHfExW0vNOu5QWtSpikdj+8gBBjYD7rMACjck7gx5XFfEU604RtJ9eq7dtvwXY+jxGEjKpGolHVtXu7c2i/4NvVbJi+J9Ch8QaTdW11D59nd2rqV4YNE6Deq8EO6FvlJ3bmDDOCRXr4ZyUVUUt/eUtdNN0736aPe+tgwmLq4LEU6tLSpSqX1+GUduV9XFrSXyPlO2+C13o19eNBpOk+ItJu43h3XdoLmSMGSYh/LwstvLHvVVVHMZRV+fZmM+rRzj2aanSjU5ouLfLKcez0Wz6uzW3VLX9WwfEmX46jTjLE18DiIWlKk6nJB+6vhk5cs4O7Wq0t5XOsf4K/DqeyshL8N/DaXVtcrdx4hktI1vLUGSG5WNJVVJ/OPmrImGiaRthBY12081y9rmnSgptcrSqyjF82148y287tWMJ4qn7aa+sUq0JOT97C4apJKb1tJwbaSve+jV7p7vun8AxNaRR6b4N0OS8MDWz6hcQy39xBEoEscEFxqFzcG3t85j2wCIDzHJJHNOpnFCFOVOhhaLm7x59araTvaMpNqLv6PbTQ46WYZfg6tSpPMatGk5c31ahClhqdRv3XKccPClzSSbklPms+ilqc34f+FVlomp/bbzbeaiGcyLEo8i3Bky0aDCghNxSPlVwAVHy5PzOMxdWu+W1o815LW711v71tH310ucub8W1sZSnh8M5UaXwqbbVSW9tG7xT0Ut2/U92tWttMhLiJUEG15gOS7AEwwIo4LFtm5FBAfj+EgcVZx5o2i+ZJXb1V1pZO+vfunfY+G5qsuZznzc97X36cz331vF9LqWyRxnjfxtZeDvCviXx9rSSXf9iaNqurR2Fuf31zFptjPdm0tFc7fMkWEwQ5wpdtzEK2R2YPB/XK+HpXbderTpa7R55KC2TdlfrfzZy16ywlGtNK1KhTnVn1lJU4ubs/5m01H8dEfQf7BXxS1H4+/so+C/iXqXh218J+KNWvfF8Os6LZ75007xF4c8Y69oXltcygTXStb6Tbqly2BNC+I0jj2xL/VHDuWUMpyujgsPGKVJP2k0lF1a12/aSWm6svKKS6H8ucSZnWzfNq+MquVppKjTbk1RpJaU0npa/M20vicnrc+49Pe4ghjvIJDPZXMZlNouEe23pl12/MR5bHa8WcBu47ew3fW1vL+up4Y6fUEuiRbjPlxkTS8+XaRKOUiIXa9y0e52C7vJLqX+YBGqPayvfS6fbuB5t4603VLj4f8AjJNEd4/EfivTpvBXhqSB3W4i8QeLE/4R/TLm2kVWkB059TtrkTpufdFczgmRs1prGXNGz5fe18k+X8bfP8V223S1dtLpO3nZs+4/BfhbTvBHhHwz4P0mJIdN8MaFpehWUaDCrb6ZZQ2ceB15WIHn1oirJLskht3bfc6emIKACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKACgAoA8b+IfhxJre7KL+4vc3Cf3YruErKyjA43FTLHkH5mfbgLxLdnr8PXS/9fkB5zBFDfaO4uwBKkP+sU8yRx4U+ZnjeDjkAE/ezkYJGV3bZa20/Pf+mByVp4Jur6a5ubfVZtPlaTBaKSZJVQKfLAVHVXAX7u8EAnngYpPl1u2n5dOz3Qf10/zPx+/ao0V/Dn7Rur2jarqGrfadJ0O6nv7+WM3cbtbFIkjEEcaLBEsI2x7S0aPhmfJr+ZvFqLp8R88ZScnhcNUvezi+VxSTS0Vo6LXd37n9QeE8/a8LxjOKjGni8RBJbPW/NrvK7eqtfTR9eXs9aurGe3Mx3bDhfSW3kXbLC5yBuGS8Z4G5dm4cCvzaliYYnlhL3K2ikre7L3U9O3Xb8T9CrYdwUlZOm9YNfFFtX12Wkn7tu2p7Z4U1r+09Km0yZlSZEeW1PJkUCTaBwcOVbpgBcOtezg6i5JUu2q8/Lfq9dup5GKouFWnWXwzdpKzsnvfrZv1/yDSdUt4rq7gbAELNvDMwO5zjywpVnBBIkCbfu85CAY3owg5Tt5aXV7f57pq35m3sZuNOVtW/dW6tGN77b7eZ2dgRNlzb3co3E5aWMqVjfACJsLIHD8h2BwV+bg12RoQ09y6TTtfpFdPUwxXtqWkZQstHH37ptaX953d+2jWuvW9f6pY2kMjTyNCuSHUlsbhlGGEJ2kfKiAAHBLhfuiqmoRjLeOmqfS/f7/ncyo0cTUlH3VOSfbRRvq2297fgcMlwvzXzAuGEjjO+NGKkKqoGAzt6OSQSw/vHFeXWkoWmubeS1t2sul9bvy6nVXoSbkk1FJq2kejWui6K9t7mRc3EztFbxNK0k83mvGjBxsILxBg2MCEE7nA4I+Zj0PFK7e1r6pef9fmVeMr3WkI8rlqnorO2rTXNZdranlXxM0tNVgtdC1u/az0jWJ7fSNSukUlbDTdSkS0upkUbXIt7aZ5flZXYxgbgxAHt5FKKzXL3NuFOOKw7cmtFH2kOa9+itfY8bNrvKswVJc0pYbExS11fs5JJb63+XTQ+g/8AgmxbXfwzsf2i/wBn/VZY2vvhH8ctbg0e2V1j2eCvEWk6deeENSlheQsjeIrO1k8SOyZS4m1ia6A3TFa/rHDJL20E21zxkmlb3XGyf/b3IpeTb26fylirydKbiot05KS/lanJtX0ulzNL0fRH6VWFs7yNFckwwyXkzLDG0iblZpJSHlPzAFSoZVAIDDI6g9iir9Om/lf8zkLN6iWoi0+2jVTevJNHFEAdiIYjJEpGMHDQo2QDsaXb8xJqU+ZtLvoB6h4I8FwX15o2u337228O3N5daVb/ADGM6xNbT6cL052hlsLC7vooo2R4/tN3HOrCexj2Eb2d+r/Lzv6eWlw/S/3/ANfme5VQBQAUAFAHB+N+mmfW8/la1cevyJl0N/wz/wAgOx+lx/6VT1Mt3/XQa2Ru0hhQAUAFAFHUbCLUrOa0m4Ei/I+MmOQcxyL7q3UZG5Sy5ANAHzpfaXNp8t3bXKmDyrua1mG0mMRS5likXKjKOrqUbJBzGc8kUR1TUrLTda3+f5/oBU1/VtF8HaNf+ItavrfTNJ0i0mur65ubsRQCKCMuxeSQqrYdQEB5b7mCGxWFapTo0516slCFKLnOctIxUVdtvp93XS9zSjSq4irToUYSqVas1TpwgnKUpSdkkl579km2fz3eOfiQfiz8VvE/jaRHSLUdYMenxOCDDpUB8jTVIbBDiySKSQYwJZZB2Ir+T+Os0Wb5riMdHWnOXs6TT09lSdoX1/lipPZK5/W/BWVPJsnoYCUf3kbSqtJL95Us5/8Ak2jPSRov2/Tg6AY8sfOMFo2C53EdQme4JIb/AGTx8BOm2o1KcpXUr3Sato9N9tbbdj7GNZRm6dRWTvo9nf59mtyDRrm90XUI/tJcwAopmUMR5e4ZLHHQAZAHysBhjjr2YbG2fLVuparmSdtNNd7afmTXw8ZxfLaSsvPW2i33va3pqe+6L4e0HXAt+wBnlG6WSJ9okA4EmQTjPBwDgnLHAOK+lwc6U7StaWt97X2vrp2+T7niVsTicInCOqim4qUFdLd6+Tbtfoe46N4Y0axtIQWIk37sZBV14JUEEfKAu7BPHC/MFyfqMNSoKEXJpPWXvNOPnsk7Lr2Pl8XmeNq1JKMY8sk1e1mpW3XZ9EN17QfD13bK5gt9qMTMzYdnOfuhRwcYPBG5QOuKnFwwc6KahBaq7et976bN21Tb0Hgcdj6dSXNOUpSXLBJLRNJJybvLdyX3dbnh+rWrXt1Lp2lW3nBA8eEGIo1YIGkuJFBVDkEkZ8yXGIlJGR8nUvKcoQhKVp6WWiT6ye1276ro9uh9C6qhTjOtNRk7uWqvJ6v3Yu1+ye2lm72NbTPCVvpcJlnBuLnaPNuOgCdWijU5IXjBAJLH5mJIGNaeEj7sp+8730u4t/NJeml9Ls82tjqlWXLD3YN8sV2Wru16X6o+Zfj1u/s29MKmMMQoDbhliR/COSFAUEAAZGOKqk40sQpRTjacZXaS0ve66fNap2e50qEqlDkbUvc5Xppa8nqlv1vfdXTuj8qtY/b4+I/7G/7Xlt8cfGNu2v8Awz8e+AvDnwk+J4jtjb3DDwc8t38PPHM0sZZLrU7DT7m48KX93cKXms0to5JA3l4/eOGeKJ4qlTpVZKrVo0lT0d5VKcXpzarnqRSjZ7208z8U4q4Rhhp1K1BOjQq151JOSvGnOd3prFRhJu1ktJXvbQ/o4+Dv7eHwD+Kvwz0f4sv4t0zRPCet2sF9aahf38EMccsLC1u9NlUuWi1BLpBbm1IeSVnQ26zb1r9ApYqGJpRxEZcqd17ycUmt1Lm1Xne/r1PzXE4Otha8qE4OUlquX3uZP7UWkrrzsfaXw31G3+K9xpvifw8yjQbmJZdJudrqX02QRStqBhIR4RcQ3O+ATqkk3mwkpGQQOmNpRuno3uuvS6/rz7HI01dNWeqt2Pr+2tobO3itrdBHDCgSNR2A5JPqzElmPVmJJ5NWBPQAUAFABQBwfjfppn1vP5WtXHr8iZdDf8M/8gOx+lx/6VT1Mt3/AF0GtkbtIYUAFABQAUAeYfFjTNem8H65qvhDRo9f8WaXpl1d6VoLXkWnHxDNbQySx6PHfTlba2u7ph5dhPdtHapcOsdxNbwSvcw51p1KdKpUpUvbVIQlKFFSUHVkk2qanL3YuT0Tlpd6tLVbYeFOpWpU61VUKU6kYTrOMpqlGTSdRwi1KUYrVqPvWTsm9H/Lz8Uf2hPjf+0V4vv9J8fRXvgrwz4cvprWb4eRJc2K2V7YyNE0GvRzJFdXeo20qlZYLtUjt5kO21SRS5/nbizjLMMwlUws+fB0o1JQlg4pU5RknyuNVu1Sck1aSnZJqyjsf0fwtwZleVQpYqmqeLryhGcMa+WopqSclKha8I02pXUouTkmnd2uYXgqxB1qZI1PlpcLgHP3OVzjGQAQG65HBOecfnOMfPRp6Xu3e2y3P0LC/u6m9tV2tyt32+X3n2h4T09HghU4CvGd6kAgDOABnjAOfUj8a82lSTXL3TbW/bSwYupLnu09Fo9bq217Ps1a/b5nWXngR7hY2gRHx+8yFCllPVSB14OOvpgVrPLJtPkS2Tulo016d7/duzjhmqpStOcnfRttW8v6enqTaT4ZlspDHHcTWo+YhYmZcNhc4U8bSemPTOOpqaGGrUpW9pKFtl1vf5ddPy3KxGNjNOThCemjaWunbW/np89j0rT/AA/q0qp5mq3m0YREDRscFRzlkYg4yAOoBxxk5+gwmHxdRR5q9RJtLXl23vqn99zwMRmVGk2o0KV7tuTjft5v0/I1pvC5EcYa6vLhQNzCe4bbnJydsKxg9wVctz0HQV3zwNVpJzqTV22pu6Xk0rK3S1vL08+ObtubUaVN7Lkgk7fZ1abvun56m1YeG4La3Ty0SPf87IsaKGJOTtGM4PAyQGOeo7dVHL4wgr+7za+7Gy09P8jgrZlKdSzblbS976X117qxieI7ZVgMKbVG7btHGMHaSc8dcFRzk8keuOIpxp8sY2vq9N+u/Y78DUk37SWqSuuqejVvJ63+XmfHPxh0xruDyIkLpuO4/ec7c54wQBkBieuR0Irza8WvetolbTR33S/BLfc+jw2sOb4eZ37O2tlbutE/6Z+aHxq+CugfEaz1HQ/EOlQalbT2xtGhniEiypIGeRSCvGVWEoc5zyME8a4PMsRgKkatKo4SUk/durNX/Pr6nVWwWHxsJUq0ITpyVmppNa6vXdeTWz1t3+n/APgmB+xJ4MtPB/jrw5b2l9qx074pafd6Hpt7Y6ZfNBFe6Bpl0bW11C6tZLmNGlSR553nX7LAsjb49zTL+98DZjPOctxFWtb2lKtGKstWmm7+u2ux+AeIeVUslzLCQofBXw8p/G5KNp2snbbS6V3a6Vj+pj4U/DXTvhn4bXSrYpLf3kn2zVJ4xthFwyKq2tnGAqx2dogEUW1EMzB53RGk8tPv4R5YpH5o3dt92z0+qEFABQAUAFAHB+N+mmfW8/la1cevyJl0N/wz/wAgOx+lx/6VT1Mt3/XQa2Ru0hhQAUAFABQAUAfAP7Wf7F+kfF/7f8Rfh5bWGi/FVbaMalERHaab46t7ZBHHBqUoCpa6/DbqsNhrEgKXEcUOnakywC2vtO/NuN+BKWfxlmOWqFDN4RXNF2hRx8Y/Zqu1oYhR0p1npJKNKraPLUp/pXBPHlXIXDLcyc6+USk3Tmk51svnJ356S3nhnLWpQWsW3VpJy5qdX8Y9E8H614X8a6zoniDSb/Rda0lktdS07ULaS2vbO5jLF45oJFV8MGWRG27ZomSWNnR1Y/z3i8LiMJUq4TF0atCvQm4VKNWDjOE1a6cWrpNapv3Wmmm00z+g8NjcNiaVPF4WtTxNCvBTpVaU4ypzh3jJb63TW8WnFq6aX0RpB+zywRLnP8Kj5AFcqegGMqSVPJxkdOlea1ytcrer1S7dV5f16l1purBSTaSdntbZfp5eh9DaDbmew81vL2CM9TiQEfwr0BztOeM4xntX1WCoOrS53a1uXpzX5V0vt5v57I+QzCqqVaMVe99NHyOPdu9lbpp+ej18PiW4ZidhHzAkHLDbkDHUHI9Tmp/s/mm7rl5U2mle7bVt3o9P66xPMOWkopc32dOiejd7/lsrmzYCYqNsbKwYjawMchZT3BGRnHAzjnjgk1vhufmUeXpomrap+dn8+vWxw4pxldykrSirtNOy9TdtrCQpsmYhVO5UVyQNx3EMxJJyxO7LYwcdMV69OjJL321f3knrq3du+mj/ADueZVxEG7wS5mpRva23Kr20svlfy3NKcCOMKF4GBgdcD0+nX37VvK1tEtL7JXs9zkhedTo29b9pN9H0/S55z4gkcO/yKYRGeit53mKRt5PATbuLEDduOOmTXj4pv2r91cqi0rfFzX0e2q1sfT4Hl9jG825tpNaONrO/W99mna2/XU+b/Fenm6ediQVRJSEPIwd21vbHfAJx7DB8+p9ptXjZ3TV3rordF18j38HUlZOb91Wim9L+jfW/e/l3PB/D/wAIvE3xM8YTeHPB+iza34gv5ovs9rbKCLKFkFs17dmRlt7SzUKZZL28lhtreNt8jgHnnwOW43NcVHB4DD1MRiKrtGlBK6jdXnUk7Qp043XPUnKMYrVtI7cwzHAZVhJ4zHYmnhsNSjdzm21JtN+zpw1lUqzafLTgnOT+GMtbfut+yP8AsraL+zL4Ov7FtQ/t7xf4mvItW8RamEAsrKcWVvarpOih0SdrG2ELGS9uQt1qE0kkzxWsHkWVv/THCPDa4by36vUre3xWImq2KnG6pRqcij7Kimk3ThZrnklKo7yairQj/M/GHE8uJ8yWIhRdDCYaEqGEhKzqyp87k6tZq8VUndP2cG400lFSm05y+ua+qPkgoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/66DWyN2kMKACgAoAKACgAoA8S+LXwB+H/wAXo0u9c09dP8T2sPkaf4s0yOKLV4YhylpetgJq2nK2Stle7/I3zNYTWUs0krfM8Q8KZVxHSX1qn7LFwjajjqMYqvBdIVLrlr0r/wDLup8N5ezlTlJyf0vD/FWa8O1H9Vqe1wk5XrYGs5OhN9Z07e9Qq/8ATynbmsvaRqRion5n/FT9nvx/8LLqTUrnS5dd8OwsdniLRY5bmzghY5D6hCEa50plOBJ9sjFp5jBIb2fqf574o4Kzrh+Uq8sPLF4BO/13CQlOjCO168UnUw7ta7qx9nze7CrPRn7/AML8ZZLxBGOGjiFg8ZNa4PFypwqTn1VCTtTxC3cVBuo0rzpwOh8IQibSYMBS7ohKtwF4YEDAOWOR7E9T6mVQcsPHW90nbTqovfv8zizmcKOLlFu0FzJaLX3rJPstb+h28dsoGHUH0yOw4ABx09c9c16qpcr1SV++7Vr20676/ifPVKrfwy7K6v1d29UlsrK2hJHbxq2Qiglic4/AHnOPbB9u/JGEVLZNrrvddPRrTTyXkZyqSlZc0rJLS+nXp/wHcmZ9mBnnbuJCk9CfTk+uPSteqXlf8bW9dNhKLactLc3LdtaO3f08vIqS5IB3dM5PTJHXjIOPpwOlZT3Wt99Oi369fu17lQs38MLSvyvR8u+613tp5nBa2S6PIoyxZ1U8qMDJG0AcljkknHHrxXBiI6czWt7cx72D0ko3WkVdJdVo2320/wA0aXw7/Zk8f/Eq5a/1K3l8I+FrgqDq+rQOl9eWpPzNpGlMYrm4EkWGiubn7JZMH3RXMpBSvoMl4IzfOpRq1oSy7AtpvEYiLVSpC939Xw94zneL92c/Z0ne6nKzR52b8cZTk9J0KMvr+OhKTVChNOlCatZV665owtJe9CHPUTTUoR0P0W+FPwQ+HPwasby38E6Db2mpautp/wAJB4iuFSfX9feyjMVsdS1Aorm3tw0jWun26wafavNPJBapLPPJL+0ZJw9lfD9B0cvw6hOpy/WMTO08TiJRVk6tS1+VbxpQUaUG24wTbb/HM84jzXiGtGrmOIlOnSc/q2FheGGwym7yVKldrmlop1ZuVWaUVKbUYpet17h4QUAFABQAUAFABQBwfjfppn1vP5WtXHr8iZdDf8M/8gOx+lx/6VT1Mt3/AF0GtkbtIYUAFABQAUAFABQAUAIQCCCAQRgg8gg9QR3BoA8v1z4OeANbeSf+xItHu5WLyXWhbNNZ3bO6SS3jjaxlkYks0klo0jMSWckmvm8bwnkeMcp/U44SrNtyqYK2Hcm93KnGLoyk93KVJyb+0e/huJs5w8FTeKliqSVlTxl8Ryra0akn7aKS0UVUUUtkeX6n+zrLuZtH8SxsuSY4dTsWRlGeFe6tZXD9slbOPkZ284HzOI4AldvCZjFr7MMRQaa7Xq05u/qqUfQ9uhxjHRYnBST+1KhVTT9KdSKt86kjk5fgH43jJVJ9CuV5+ZL64TPp8stjHj8zg9z28uXAucRm7TwU0/tRr1F6aToxPQjxZlT15MXDRaSpQeq841Zb/wBdRbb4AeNnYedc6DbryCz3t1KRnPIWKxfOOONw9M1VPgbOHJc9TA011brVZP7oUX+aJnxbliVowxc/SnBXfnzVV99tjr9N/ZygLI+t+I3dBnfb6VZLExzjO28u5JgB1BBsT2IIr1sN4fwunjMwckr3hhqKi+m1WrKf/pk8+txnJX+q4JJ9J16nMvL93TUf/Tp6x4a+FHgTwrJHcadoVtcX8TeZHqWphdQvo5MY82CSdTHaSY432cVucFh0Zs/U5fw3k+WuM6GDhOtDWOIxH7+tF6e9CU040pab0o0+q2Z4GNz/ADXHKUKuLnClNWlQoN0aUo/yzUGpVI+VWU19yPRa908YKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv8Ahn/kB2P0uP8A0qnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf+QHY/S4/9Kp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/AIZ/5Adj9Lj/ANKp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/4Z/5Adj9Lj/0qnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv8Ahn/kB2P0uP8A0qnqZbv+ug1sjdpDCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA4Pxv00z63n8rWrj1+RMuhv+Gf+QHY/S4/9Kp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/AIZ/5Adj9Lj/ANKp6mW7/roNbI3aQwoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOD8b9NM+t5/K1q49fkTLob/hn/kB2P0uP/Sqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G/wCGf+QHY/S4/wDSqeplu/66DWyN2kMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDg/G/TTPrefytauPX5Ey6G5oTi1+2aLKQtxYXNzLCjEBp9NvLmW5s7mJR1ijErWLkfdntZNwUMgMvWz72+9LX/P5jXVdvy6f5HQUhhQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAcvdW9vr2rNA2ZLPSLeaG4dDhW1K8e1kWBHGQXs7a3ZrlcZU3sC53LIq1ey83+Wv5/oTu/T83b+vma9/plvfmGR2mt7q2Ja1vbWTybu2Lbd4RyrpJFJtUTW1xHNazhQJoZAAAk7enZlWPE9V+JviLSb6axji0y7SBionu7afz32sy7n+y3drBk7cnZAgyTgAYA1VOLSeqv2/4NzHnktNDO/wCFv+Jf+fHQ/wDwGv8A/wCWdP2ce7/D/IPaS7L8f8w/4W/4l/58dD/8Br//AOWdHs493+H+Qe0l2X4/5h/wt/xL/wA+Oh/+A1//APLOj2ce7/D/ACD2kuy/H/MP+Fv+Jf8Anx0P/wABr/8A+WdHs493+H+Qe0l2X4/5h/wt/wAS/wDPjof/AIDX/wD8s6PZx7v8P8g9pLsvx/zD/hb/AIl/58dD/wDAa/8A/lnR7OPd/h/kHtJdl+P+Yf8AC3/Ev/Pjof8A4DX/AP8ALOj2ce7/AA/yD2kuy/H/ADD/AIW/4l/58dD/APAa/wD/AJZ0ezj3f4f5B7SXZfj/AJh/wt/xL/z46H/4DX//AMs6PZx7v8P8g9pLsvx/zD/hb/iX/nx0P/wGv/8A5Z0ezj3f4f5B7SXZfj/mH/C3/Ev/AD46H/4DX/8A8s6PZx7v8P8AIPaS7L8f8w/4W/4l/wCfHQ//AAGv/wD5Z0ezj3f4f5B7SXZfj/mH/C3/ABL/AM+Oh/8AgNf/APyzo9nHu/w/yD2kuy/H/MP+Fv8AiX/nx0P/AMBr/wD+WdHs493+H+Qe0l2X4/5h/wALf8S/8+Oh/wDgNf8A/wAs6PZx7v8AD/IPaS7L8f8AMP8Ahb/iX/nx0P8A8Br/AP8AlnR7OPd/h/kHtJdl+P8AmH/C3/Ev/Pjof/gNf/8Ayzo9nHu/w/yD2kuy/H/MP+Fv+Jf+fHQ//Aa//wDlnR7OPd/h/kHtJdl+P+Yf8Lf8S/8APjof/gNf/wDyzo9nHu/w/wAg9pLsvx/zD/hb/iX/AJ8dD/8AAa//APlnR7OPd/h/kHtJdl+P+Yf8Lf8AEv8Az46H/wCA1/8A/LOj2ce7/D/IPaS7L8f8w/4W/wCJf+fHQ/8AwGv/AP5Z0ezj3f4f5B7SXZfj/mdd4U8Waz4yupLK9mTTYViLs2jobeaQAtlDNdtfSRKwXBe3aCZQSUlRsETKKgk1r6/0vxKjJy029P8Ag3PWLS0trGCO1tIlhgiB2IuTyzFndmYs8kkjlnkkkZpJHZndmdiTluaJW2D/2Q==';
|
|
77
|
+
const LIVENESS_GUIDE_IMG = '<svg width="327" height="275" viewBox="0 0 327 275" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="327" height="275" fill="#F8F8F8"/><path d="M94.4575 88.8376L67.3527 70.2703C65.5273 68.6387 63.2943 67.4476 60.8821 67.0724C57.5409 66.5502 53.5151 67.3987 52.7491 74.186C52.1297 79.7008 54.0204 85.1992 57.5735 89.4413L94.4575 138.03V88.8376Z" fill="#F8CCC7"/><path opacity="0.3" d="M116.709 27H231.892C244.165 27 254.139 36.9853 254.139 49.2711V274.462H94.4609V49.2711C94.4609 36.9853 104.436 27 116.709 27Z" fill="#43A2C2"/><path d="M117.245 45.9929H231.352C237.644 45.9929 242.761 51.0997 242.761 57.4139V274.463H105.836V57.3976C105.836 51.0997 110.937 45.9766 117.245 45.9766V45.9929Z" fill="white"/><path d="M120.359 259.957H227.832C229.592 259.957 231.027 261.393 231.027 263.155V274.478H117.164V263.155C117.164 261.393 118.598 259.957 120.359 259.957Z" fill="#00C1B6"/><path d="M271.819 274.46L271.51 243.639C271.51 243.639 275.405 162.223 255.26 153.723C255.26 153.723 238.651 150.688 238.407 185.604L236.956 226.508C236.956 226.508 209.917 235.073 206.07 274.46" fill="#F8CCC7"/><path d="M79.5461 242.401C79.5461 242.401 65.3336 221.892 67.9251 202.134C68.5445 197.369 70.7611 192.866 74.5424 189.913C76.1071 188.689 78.014 187.629 80.2795 187.074L94.4431 207.175V216.753C96.4152 222.039 99.3164 227.537 100.62 233.036C101.696 237.588 102.56 242.205 102.886 246.888C103.098 249.923 103.945 254.817 102.283 257.558C101.256 259.239 98.8927 259.484 97.0509 259.304C88.2659 258.488 83.8652 248.65 79.5461 242.417V242.401Z" fill="#F8CCC7"/><path d="M94.4587 207.175V216.752C96.4309 222.038 99.332 227.537 100.636 233.035C101.712 237.587 102.575 242.205 102.901 246.887C103.113 249.922 103.961 254.817 102.298 257.558C101.272 259.238 98.9083 259.483 97.0665 259.304C88.2815 258.488 83.8809 248.649 79.5617 242.417C79.5617 242.417 65.3492 221.908 67.9407 202.149C68.5601 197.385 70.7767 192.882 74.558 189.929C76.1227 188.705 78.0296 187.645 80.2951 187.09" stroke="#F2B1AC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M88.2668 42.532C85.7568 40.7372 84.2084 39.7093 81.7962 39.3341C78.455 38.812 74.4292 39.6604 73.6631 46.4478C73.0438 51.9625 74.9344 57.4609 78.4876 61.703L94.4929 82.783V46.8067L88.2668 42.5483V42.532Z" fill="#F8CCC7"/><path d="M87.3713 202.868C87.3713 202.868 71.5941 182.701 66.9001 157.493C66.297 154.247 66.2481 150.902 67.0305 147.704C68.7418 140.705 74.6257 131.519 94.4612 137.213V163.269C94.4612 163.269 105.3 184.969 103.621 200.094C103.621 200.094 101.665 218.808 87.3876 202.868H87.3713Z" fill="#F8CCC7"/><path d="M94.4605 163.269C94.4605 163.269 105.299 184.969 103.62 200.094C103.62 200.094 101.665 218.808 87.3869 202.868C87.3869 202.868 71.6097 182.701 66.9157 157.493C66.3127 154.247 66.2638 150.902 67.0461 147.704C68.7575 140.705 74.6413 131.519 94.4768 137.213" stroke="#F2B1AC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M217.398 119.43H224.081" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/><path d="M222.668 117.195L224.64 119.398L222.391 121.65" stroke="white" stroke-linecap="round" stroke-linejoin="round"/><mask id="mask0_10140_795428" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="120" y="75" width="108" height="135"><path d="M174.096 209.362C203.558 209.362 227.441 179.485 227.441 142.63C227.441 105.775 203.558 75.8984 174.096 75.8984C144.634 75.8984 120.75 105.775 120.75 142.63C120.75 179.485 144.634 209.362 174.096 209.362Z" fill="white"/></mask><g mask="url(#mask0_10140_795428)"><path d="M206.662 179.129C206.662 179.129 274.058 185.362 233.946 232.498H126.864C126.864 232.498 89.5074 199.263 139.381 179.129H206.679H206.662Z" fill="#25608A"/><path d="M156.591 185.804L149.859 249.011L197.875 246.172L189.726 175.312H157.275L156.591 185.804Z" fill="#F8CCC7"/><path d="M128.234 137.375C128.234 137.375 116.075 137.897 117.297 150.264C117.297 150.264 118.943 158.227 133.27 159.401L128.217 137.375H128.234Z" fill="#F8CCC7"/><path d="M126.21 130.867L134.229 165.897C134.229 165.897 138.532 187.972 171.553 189.588C204.59 191.203 209.92 171.085 209.92 171.085L223.562 119.691C223.562 119.691 226.398 79.7823 178.415 75.9807C178.415 75.9807 116.854 71.5591 126.21 130.867Z" fill="#F8CCC7"/><path d="M207.705 208.105L171.326 230.393L147.562 209.737" stroke="#231815" stroke-linecap="round" stroke-linejoin="round"/><path d="M216.927 135.402C216.927 135.402 229.086 135.924 227.863 148.292C227.863 148.292 226.217 156.254 211.891 157.429L216.943 135.402H216.927Z" fill="#F8CCC7"/><path d="M192.27 146.123C194.727 146.123 196.719 144.129 196.719 141.669C196.719 139.209 194.727 137.215 192.27 137.215C189.812 137.215 187.82 139.209 187.82 141.669C187.82 144.129 189.812 146.123 192.27 146.123Z" fill="#231815"/><path d="M159.848 146.123C162.305 146.123 164.298 144.129 164.298 141.669C164.298 139.209 162.305 137.215 159.848 137.215C157.391 137.215 155.398 139.209 155.398 141.669C155.398 144.129 157.391 146.123 159.848 146.123Z" fill="#231815"/><path d="M176.07 143.887V157.755" stroke="#231815" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M171.75 168.492C171.75 168.492 175.01 170.499 180.388 168.492" stroke="#231815" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M156.459 186.992C156.459 186.992 167.607 194.449 191.126 187.661L192.088 195.835C192.088 195.835 178.136 204.695 155.562 195.427L156.459 186.992Z" fill="#272828"/><path d="M191.275 132.76L202.163 131.993L200.989 111.549L213.621 136.447H223.596C223.596 136.447 247.424 79.1627 202.098 80.3537C202.098 80.3537 164.627 46.319 125.233 86.6353C125.233 86.6353 101.176 117.586 126.195 139.743L138.011 138.585L141.255 112.545L191.275 132.76Z" fill="#272828"/></g><path d="M174.096 209.362C203.558 209.362 227.441 179.485 227.441 142.63C227.441 105.775 203.558 75.8984 174.096 75.8984C144.634 75.8984 120.75 105.775 120.75 142.63C120.75 179.485 144.634 209.362 174.096 209.362Z" stroke="#00C1B6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M174.1 195.685C198.128 195.685 217.607 171.427 217.607 141.504C217.607 111.582 198.128 87.3242 174.1 87.3242C150.072 87.3242 130.594 111.582 130.594 141.504C130.594 171.427 150.072 195.685 174.1 195.685Z" stroke="#00C1B6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/></svg>';
|
|
77
78
|
const DEFAULT_ICON_URI = 'data:image/png;base64,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';
|
|
78
79
|
|
|
79
80
|
const defaultIdentityVerificationConfig = {
|
|
@@ -90,6 +91,7 @@ const defaultExtraDocumentConfig = {
|
|
|
90
91
|
requestInfoHandler: () => ({}),
|
|
91
92
|
showCloseButton: true,
|
|
92
93
|
continue: true,
|
|
94
|
+
border: undefined,
|
|
93
95
|
extraText: {
|
|
94
96
|
title: 'extra.title"',
|
|
95
97
|
frontSide: 'extra.frontSide"',
|
|
@@ -103,7 +105,9 @@ const defaultLivenessConfig = {
|
|
|
103
105
|
headerMode: 1,
|
|
104
106
|
showCloseButton: true,
|
|
105
107
|
subtitle: null,
|
|
106
|
-
uploadFullFrame: false
|
|
108
|
+
uploadFullFrame: false,
|
|
109
|
+
passive: false,
|
|
110
|
+
compareCustomerClientId: null
|
|
107
111
|
};
|
|
108
112
|
const defaultIdRecognitionConfig = {
|
|
109
113
|
icon: DEFAULT_ICON_URI,
|
|
@@ -122,7 +126,8 @@ const defaultIdRecognitionConfig = {
|
|
|
122
126
|
uploadFullFrame: true,
|
|
123
127
|
disablePassportConfirm: false,
|
|
124
128
|
antiFraudIMetalTagValidCountTh: false,
|
|
125
|
-
cardTypes: []
|
|
129
|
+
cardTypes: [],
|
|
130
|
+
cardTypeConfigs: []
|
|
126
131
|
};
|
|
127
132
|
|
|
128
133
|
function setCorrectViewHeight() {
|
|
@@ -7081,9 +7086,11 @@ const card_ud = () => ({
|
|
|
7081
7086
|
markers: []
|
|
7082
7087
|
});
|
|
7083
7088
|
|
|
7084
|
-
const success =
|
|
7085
|
-
|
|
7089
|
+
const success = params => {
|
|
7090
|
+
var _a;
|
|
7091
|
+
const authmeScannerSuccess = (_a = params === null || params === void 0 ? void 0 : params.color) !== null && _a !== void 0 ? _a : util.getCssVariable('--authme__upload_success', 'authme-container');
|
|
7086
7092
|
const lottieColor = authmeScannerSuccess ? util.RGBToLottieColor(util.colorToRGB(authmeScannerSuccess)) : [];
|
|
7093
|
+
const opacity = (params === null || params === void 0 ? void 0 : params.opacity) ? params.opacity * 100 : 100;
|
|
7087
7094
|
return {
|
|
7088
7095
|
v: '5.7.4',
|
|
7089
7096
|
fr: 29.9700012207031,
|
|
@@ -7823,7 +7830,7 @@ const success = () => {
|
|
|
7823
7830
|
ks: {
|
|
7824
7831
|
o: {
|
|
7825
7832
|
a: 0,
|
|
7826
|
-
k:
|
|
7833
|
+
k: opacity,
|
|
7827
7834
|
ix: 11
|
|
7828
7835
|
},
|
|
7829
7836
|
r: {
|
|
@@ -8626,11 +8633,16 @@ const arrow_down = () => {
|
|
|
8626
8633
|
};
|
|
8627
8634
|
};
|
|
8628
8635
|
|
|
8629
|
-
const scan =
|
|
8630
|
-
|
|
8636
|
+
const scan = params => {
|
|
8637
|
+
var _a, _b;
|
|
8638
|
+
const authmeScannning = (_a = params === null || params === void 0 ? void 0 : params.color) !== null && _a !== void 0 ? _a : util.getCssVariable('--authme__scanning', 'authme-container');
|
|
8639
|
+
const authmeScannningGradient = (_b = params === null || params === void 0 ? void 0 : params.gradient) !== null && _b !== void 0 ? _b : util.getCssVariable('--authme__scanning', 'authme-container');
|
|
8631
8640
|
const lottieColor = authmeScannning ? util.RGBToLottieColor(util.colorToRGB(authmeScannning)) : [];
|
|
8632
8641
|
const [r, g, b] = lottieColor.map(c => parseFloat(c.toFixed(3)));
|
|
8633
|
-
const
|
|
8642
|
+
const lottieColorGradient = authmeScannningGradient ? util.RGBToLottieColor(util.colorToRGB(authmeScannningGradient)) : [];
|
|
8643
|
+
const [rGradient, gGradient, bGradient] = lottieColorGradient.map(c => parseFloat(c.toFixed(3)));
|
|
8644
|
+
const opacity = (params === null || params === void 0 ? void 0 : params.opacity) ? params.opacity * 100 : 40;
|
|
8645
|
+
const lottieGradient = [0, rGradient, gGradient, bGradient, 0.5, r, g, b, 1, r, g, b, 0, 0.03, 0.5, 0.515, 1, 1];
|
|
8634
8646
|
return {
|
|
8635
8647
|
v: '5.9.2',
|
|
8636
8648
|
fr: 29.9700012207031,
|
|
@@ -8653,7 +8665,7 @@ const scan = () => {
|
|
|
8653
8665
|
ks: {
|
|
8654
8666
|
o: {
|
|
8655
8667
|
a: 0,
|
|
8656
|
-
k:
|
|
8668
|
+
k: opacity,
|
|
8657
8669
|
ix: 11
|
|
8658
8670
|
},
|
|
8659
8671
|
r: {
|
|
@@ -8811,7 +8823,7 @@ const scan = () => {
|
|
|
8811
8823
|
ks: {
|
|
8812
8824
|
o: {
|
|
8813
8825
|
a: 0,
|
|
8814
|
-
k:
|
|
8826
|
+
k: opacity,
|
|
8815
8827
|
ix: 11
|
|
8816
8828
|
},
|
|
8817
8829
|
r: {
|
|
@@ -23504,8 +23516,8 @@ const renderLivenessUI = config => {
|
|
|
23504
23516
|
config.videoContainer.appendChild(titleTextPanel);
|
|
23505
23517
|
config.videoContainer.appendChild(statusTextPanel);
|
|
23506
23518
|
// Set init text
|
|
23507
|
-
titleText.textContent = translateService.translate('liveness.
|
|
23508
|
-
statusText.textContent = translateService.translate('
|
|
23519
|
+
titleText.textContent = translateService.translate('sdk.liveness.detection.step');
|
|
23520
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noFace');
|
|
23509
23521
|
setStatusTextTop({
|
|
23510
23522
|
maskHeight,
|
|
23511
23523
|
statusTextPanel,
|
|
@@ -23585,17 +23597,15 @@ const renderLivenessGuideUI = ({
|
|
|
23585
23597
|
ele.classList.add('liveness-guide-header-title');
|
|
23586
23598
|
const title = document.createElement('div');
|
|
23587
23599
|
title.classList.add('liveness-guide-header-title-text');
|
|
23588
|
-
title.textContent = translateService.translate('liveness.
|
|
23600
|
+
title.textContent = translateService.translate('sdk.liveness.detection.title');
|
|
23589
23601
|
ele.appendChild(title);
|
|
23590
23602
|
return ele;
|
|
23591
23603
|
};
|
|
23592
23604
|
const createLivenessGuideImg = () => {
|
|
23593
23605
|
const ele = document.createElement('div');
|
|
23594
23606
|
ele.classList.add('liveness-guide-img-container');
|
|
23595
|
-
const
|
|
23596
|
-
|
|
23597
|
-
img.src = LIVENESS_GUIDE_IMG;
|
|
23598
|
-
ele.appendChild(img);
|
|
23607
|
+
const svg = LIVENESS_GUIDE_IMG;
|
|
23608
|
+
ele.innerHTML = svg;
|
|
23599
23609
|
return ele;
|
|
23600
23610
|
};
|
|
23601
23611
|
const createLivenessHintGroup = () => {
|
|
@@ -23605,11 +23615,12 @@ const renderLivenessGuideUI = ({
|
|
|
23605
23615
|
};
|
|
23606
23616
|
const createLivenessHints = () => {
|
|
23607
23617
|
const ul = document.createElement('ul');
|
|
23608
|
-
|
|
23618
|
+
const descList = ['sdk.liveness.detection.infopageHint.face', 'sdk.liveness.detection.infopageHint.environment'];
|
|
23619
|
+
descList.forEach(desc => {
|
|
23609
23620
|
const li = document.createElement('li');
|
|
23610
|
-
li.textContent = translateService.translate(
|
|
23621
|
+
li.textContent = translateService.translate(desc);
|
|
23611
23622
|
ul.appendChild(li);
|
|
23612
|
-
}
|
|
23623
|
+
});
|
|
23613
23624
|
return ul;
|
|
23614
23625
|
};
|
|
23615
23626
|
const createContinueButtonDivide = () => {
|
|
@@ -23620,7 +23631,7 @@ const renderLivenessGuideUI = ({
|
|
|
23620
23631
|
const createContinueButton = () => {
|
|
23621
23632
|
const ele = document.createElement('div');
|
|
23622
23633
|
ele.classList.add('liveness-guid-continue-btn');
|
|
23623
|
-
ele.textContent = translateService.translate('
|
|
23634
|
+
ele.textContent = translateService.translate('sdk.general.start');
|
|
23624
23635
|
return ele;
|
|
23625
23636
|
};
|
|
23626
23637
|
const background = createLivenessBackground();
|
|
@@ -23693,7 +23704,7 @@ const sendFrame = (canvasSizeInfo, canvas, video, frameCallback, fps, bas64Forma
|
|
|
23693
23704
|
})), rxjs.tap(() => received = true))))));
|
|
23694
23705
|
};
|
|
23695
23706
|
|
|
23696
|
-
const translateService = core.getTranslateInstance();
|
|
23707
|
+
const translateService$1 = core.getTranslateInstance();
|
|
23697
23708
|
var RESIZE_STYLE;
|
|
23698
23709
|
(function (RESIZE_STYLE) {
|
|
23699
23710
|
RESIZE_STYLE[RESIZE_STYLE["RESIZE_WIDTH_LIMIT"] = 320] = "RESIZE_WIDTH_LIMIT";
|
|
@@ -23708,15 +23719,35 @@ var RESIZE_EVENT;
|
|
|
23708
23719
|
function detectScreenResize$() {
|
|
23709
23720
|
const initWidth = window.outerWidth;
|
|
23710
23721
|
const initHeight = window.outerHeight;
|
|
23711
|
-
|
|
23712
|
-
|
|
23713
|
-
|
|
23722
|
+
let resize$;
|
|
23723
|
+
if (util.isMobile()) {
|
|
23724
|
+
if (!window.visualViewport) {
|
|
23725
|
+
return rxjs.of(RESIZE_EVENT.PASS);
|
|
23714
23726
|
}
|
|
23715
|
-
|
|
23716
|
-
|
|
23717
|
-
|
|
23718
|
-
|
|
23719
|
-
|
|
23727
|
+
resize$ = rxjs.merge(rxjs.fromEvent(window.visualViewport, 'resize'), rxjs.of(0)).pipe(rxjs.map(() => {
|
|
23728
|
+
var _a, _b, _c;
|
|
23729
|
+
const scale = ((_a = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _a === void 0 ? void 0 : _a.scale) || 1;
|
|
23730
|
+
const width = ((_b = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _b === void 0 ? void 0 : _b.width) || window.outerWidth;
|
|
23731
|
+
const height = ((_c = window === null || window === void 0 ? void 0 : window.visualViewport) === null || _c === void 0 ? void 0 : _c.height) || window.outerHeight;
|
|
23732
|
+
if (width < RESIZE_STYLE.RESIZE_WIDTH_LIMIT || height < RESIZE_STYLE.RESIZE_HEIGHT_LIMIT) {
|
|
23733
|
+
return RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW;
|
|
23734
|
+
}
|
|
23735
|
+
if (scale > 1.1) {
|
|
23736
|
+
return RESIZE_EVENT.SCREEN_SIZE_CHANGED;
|
|
23737
|
+
}
|
|
23738
|
+
return RESIZE_EVENT.PASS;
|
|
23739
|
+
}));
|
|
23740
|
+
} else {
|
|
23741
|
+
resize$ = rxjs.merge(rxjs.fromEvent(window, 'resize'), rxjs.of(0)).pipe(rxjs.map(() => {
|
|
23742
|
+
if (window.innerWidth < RESIZE_STYLE.RESIZE_WIDTH_LIMIT || window.innerHeight < RESIZE_STYLE.RESIZE_HEIGHT_LIMIT) {
|
|
23743
|
+
return RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW;
|
|
23744
|
+
}
|
|
23745
|
+
if (window.outerWidth !== initWidth || window.outerHeight !== initHeight) {
|
|
23746
|
+
return RESIZE_EVENT.SCREEN_SIZE_CHANGED;
|
|
23747
|
+
}
|
|
23748
|
+
return RESIZE_EVENT.PASS;
|
|
23749
|
+
}));
|
|
23750
|
+
}
|
|
23720
23751
|
return resize$;
|
|
23721
23752
|
}
|
|
23722
23753
|
function handleScreenResizeError$(resize$, unsubscribe$, shouldResizeTriggerError) {
|
|
@@ -23724,10 +23755,10 @@ function handleScreenResizeError$(resize$, unsubscribe$, shouldResizeTriggerErro
|
|
|
23724
23755
|
util.hidePopup();
|
|
23725
23756
|
switch (x) {
|
|
23726
23757
|
case RESIZE_EVENT.SCREEN_SIZE_CHANGED:
|
|
23727
|
-
util.showPopup(translateService.translate('error.screenSizeChange.title'), translateService.translate('error.screenSizeChange.content'), false);
|
|
23758
|
+
util.showPopup(translateService$1.translate('sdk.general.error.screenSizeChange.title'), translateService$1.translate('sdk.general.error.screenSizeChange.content'), false);
|
|
23728
23759
|
break;
|
|
23729
23760
|
case RESIZE_EVENT.SCREEN_RESOLUTION_TOO_LOW:
|
|
23730
|
-
util.showPopup(translateService.translate('
|
|
23761
|
+
util.showPopup(translateService$1.translate('sdk.general.insufficientScreen.title'), translateService$1.translate('sdk.general.insufficientScreen.content'), false);
|
|
23731
23762
|
break;
|
|
23732
23763
|
}
|
|
23733
23764
|
}), rxjs.map(x => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -23812,19 +23843,19 @@ function startLiveness(config) {
|
|
|
23812
23843
|
let errorMessage = undefined;
|
|
23813
23844
|
switch ((_f = (_e = (_d = error.cause) === null || _d === void 0 ? void 0 : _d.meta) === null || _e === void 0 ? void 0 : _e.responseContent) === null || _f === void 0 ? void 0 : _f.message) {
|
|
23814
23845
|
case INIT_RESPONSE_ERROR_MESSAGE__LivenessInavailable:
|
|
23815
|
-
errorMessage = '
|
|
23846
|
+
errorMessage = 'sdk.general.error.functionNotEnabled';
|
|
23816
23847
|
throwError = new core.AuthmeError(core.ErrorCode.EVENT_NAME_WRONG, INIT_RESPONSE_ERROR_MESSAGE__LivenessInavailable);
|
|
23817
23848
|
break;
|
|
23818
23849
|
case INIT_RESPONSE_ERROR_MESSAGE__NotAllowedNewEvent:
|
|
23819
|
-
errorMessage = '
|
|
23850
|
+
errorMessage = 'sdk.general.error.notAllowedNewEvent';
|
|
23820
23851
|
throwError = new core.AuthmeError(core.ErrorCode.EVENT_NAME_WRONG, INIT_RESPONSE_ERROR_MESSAGE__NotAllowedNewEvent);
|
|
23821
23852
|
break;
|
|
23822
23853
|
}
|
|
23823
23854
|
if (errorMessage) {
|
|
23824
|
-
yield util.asyncOnLineShowErrorMessage(translateService.translate(errorMessage), false);
|
|
23855
|
+
yield util.asyncOnLineShowErrorMessage(translateService.translate(errorMessage), translateService.translate('sdk.general.error.retry'), false);
|
|
23825
23856
|
} else {
|
|
23826
|
-
const defaultErrorMessage = `${translateService.translate('
|
|
23827
|
-
yield util.asyncOnLineShowErrorMessage(defaultErrorMessage, false);
|
|
23857
|
+
const defaultErrorMessage = `${translateService.translate('sdk.general.error.eventNameInvalid.title')} : ${translateService.translate('sdk.general.error.eventNameInvalid.content')}`;
|
|
23858
|
+
yield util.asyncOnLineShowErrorMessage(defaultErrorMessage, translateService.translate('sdk.general.error.retry'), false);
|
|
23828
23859
|
}
|
|
23829
23860
|
yield util.waitTime(SHOW_ERROR_MESSAGE_INTERVAL);
|
|
23830
23861
|
throw throwError;
|
|
@@ -23836,19 +23867,19 @@ function startLiveness(config) {
|
|
|
23836
23867
|
sendStatusDescription$2(fasRecognitionResultMapping(result.eStatus));
|
|
23837
23868
|
switch (result.eStatus) {
|
|
23838
23869
|
case liveness.FasRecognitionResult.NoFace:
|
|
23839
|
-
statusText.textContent = translateService.translate('
|
|
23870
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noFace');
|
|
23840
23871
|
setBorderStatus('error');
|
|
23841
23872
|
break;
|
|
23842
23873
|
case liveness.FasRecognitionResult.FaceNotAtCenter:
|
|
23843
|
-
statusText.textContent = translateService.translate('
|
|
23874
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.faceNotAtCenter');
|
|
23844
23875
|
setBorderStatus('error');
|
|
23845
23876
|
break;
|
|
23846
23877
|
case liveness.FasRecognitionResult.FaceTooSmall:
|
|
23847
|
-
statusText.textContent = translateService.translate('
|
|
23878
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
23848
23879
|
setBorderStatus('error');
|
|
23849
23880
|
break;
|
|
23850
23881
|
case liveness.FasRecognitionResult.FaceTooLarge:
|
|
23851
|
-
statusText.textContent = translateService.translate('
|
|
23882
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.faceTooLarge');
|
|
23852
23883
|
if (result.eStage === liveness.EAuthMeFASServiceStage.Scale) {
|
|
23853
23884
|
setBorderStatus(null);
|
|
23854
23885
|
setFrameScaleSmall();
|
|
@@ -23857,31 +23888,31 @@ function startLiveness(config) {
|
|
|
23857
23888
|
}
|
|
23858
23889
|
break;
|
|
23859
23890
|
case liveness.FasRecognitionResult.NeedFaceToCamera:
|
|
23860
|
-
statusText.textContent = translateService.translate('
|
|
23891
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needFaceToCamera');
|
|
23861
23892
|
setBorderStatus('error');
|
|
23862
23893
|
break;
|
|
23863
23894
|
case liveness.FasRecognitionResult.FaceMasked:
|
|
23864
|
-
statusText.textContent = translateService.translate('
|
|
23895
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noShelter');
|
|
23865
23896
|
setBorderStatus('error');
|
|
23866
23897
|
break;
|
|
23867
23898
|
case liveness.FasRecognitionResult.NeedOpenMouth:
|
|
23868
|
-
statusText.textContent = translateService.translate('
|
|
23899
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needOpenMouth');
|
|
23869
23900
|
setBorderStatus(null);
|
|
23870
23901
|
break;
|
|
23871
23902
|
case liveness.FasRecognitionResult.NeedCloseMouth:
|
|
23872
|
-
statusText.textContent = translateService.translate('
|
|
23903
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needCloseMouth');
|
|
23873
23904
|
setBorderStatus(null);
|
|
23874
23905
|
break;
|
|
23875
23906
|
case liveness.FasRecognitionResult.NeedSmile:
|
|
23876
|
-
statusText.textContent = translateService.translate('
|
|
23907
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needSmile');
|
|
23877
23908
|
setBorderStatus(null);
|
|
23878
23909
|
break;
|
|
23879
23910
|
case liveness.FasRecognitionResult.NeedOpenEyes:
|
|
23880
|
-
statusText.textContent = translateService.translate('
|
|
23911
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needOpenEyes');
|
|
23881
23912
|
setBorderStatus('error');
|
|
23882
23913
|
break;
|
|
23883
23914
|
case liveness.FasRecognitionResult.NeedMoreFrame:
|
|
23884
|
-
statusText.textContent = translateService.translate('
|
|
23915
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
23885
23916
|
setBorderStatus('pass');
|
|
23886
23917
|
break;
|
|
23887
23918
|
case liveness.FasRecognitionResult.Pass:
|
|
@@ -23893,13 +23924,13 @@ function startLiveness(config) {
|
|
|
23893
23924
|
}
|
|
23894
23925
|
break;
|
|
23895
23926
|
case liveness.FasRecognitionResult.Error:
|
|
23896
|
-
statusText.textContent = translateService.translate('
|
|
23897
|
-
util.showErrorMessage(translateService.translate('
|
|
23927
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
23928
|
+
util.showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
23898
23929
|
break;
|
|
23899
23930
|
}
|
|
23900
23931
|
};
|
|
23901
23932
|
// Register Event
|
|
23902
|
-
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('
|
|
23933
|
+
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
23903
23934
|
rxjs.fromEvent(window, 'resize').pipe(rxjs.throttleTime(100), rxjs.switchMap(() => util.getCanvasSize(video)), rxjs.tap(canvasSizeInfo => {
|
|
23904
23935
|
config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight);
|
|
23905
23936
|
const maskHeight = window.outerHeight * 0.48;
|
|
@@ -23917,8 +23948,8 @@ function startLiveness(config) {
|
|
|
23917
23948
|
showCloseButton: config.livenessConfig.showCloseButton
|
|
23918
23949
|
}));
|
|
23919
23950
|
const step2 = rxjs.of({}).pipe(rxjs.tap(() => {
|
|
23920
|
-
util.startSpinner(translateService.translate('general.loading'), true);
|
|
23921
|
-
headerTitle.textContent = translateService.translate('liveness.header
|
|
23951
|
+
util.startSpinner(translateService.translate('sdk.general.loading'), true);
|
|
23952
|
+
headerTitle.textContent = translateService.translate('sdk.liveness.detection.header');
|
|
23922
23953
|
if (config.livenessConfig.subtitle) {
|
|
23923
23954
|
headerSubtitle.textContent = translateService.translate(config.livenessConfig.subtitle);
|
|
23924
23955
|
}
|
|
@@ -23996,7 +24027,7 @@ function startLiveness(config) {
|
|
|
23996
24027
|
// : of(resp).pipe(
|
|
23997
24028
|
// tap(() =>
|
|
23998
24029
|
// showErrorMessage(
|
|
23999
|
-
// translateService.translate('
|
|
24030
|
+
// translateService.translate('sdk.general.error.timeout.content')
|
|
24000
24031
|
// )
|
|
24001
24032
|
// ),
|
|
24002
24033
|
// switchMap(() => waitTime(2000)),
|
|
@@ -24004,9 +24035,9 @@ function startLiveness(config) {
|
|
|
24004
24035
|
// map(() => resp)
|
|
24005
24036
|
// )
|
|
24006
24037
|
// ),
|
|
24007
|
-
rxjs.switchMap(resp => window.navigator.onLine ? rxjs.of(resp) : rxjs.from(util.asyncOnLineShowErrorMessage(translateService.translate('
|
|
24038
|
+
rxjs.switchMap(resp => window.navigator.onLine ? rxjs.of(resp) : rxjs.from(util.asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)).pipe(rxjs.map(() => resp))), rxjs.tap(() => {
|
|
24008
24039
|
sendStatusDescription$2(core.StatusDescription.UploadingStart);
|
|
24009
|
-
util.startSpinner(translateService.translate('
|
|
24040
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
24010
24041
|
}), rxjs.switchMap(() => rxjs.defer(() => config.onSuccess())))));
|
|
24011
24042
|
return rxjs.of({}).pipe(() => {
|
|
24012
24043
|
var _a;
|
|
@@ -24186,24 +24217,51 @@ var OcrRotateAnimationName;
|
|
|
24186
24217
|
OcrRotateAnimationName["Bottom"] = "slideinBottom";
|
|
24187
24218
|
OcrRotateAnimationName["BottomToDefault"] = "slideinBottomToDefault";
|
|
24188
24219
|
})(OcrRotateAnimationName || (OcrRotateAnimationName = {}));
|
|
24189
|
-
|
|
24220
|
+
var OcrFrame;
|
|
24221
|
+
(function (OcrFrame) {
|
|
24222
|
+
OcrFrame["borderType"] = "cornered";
|
|
24223
|
+
OcrFrame["borderColor"] = "#FFF";
|
|
24224
|
+
OcrFrame[OcrFrame["borderOpacity"] = 1] = "borderOpacity";
|
|
24225
|
+
OcrFrame["lineColor"] = "#00C1B6";
|
|
24226
|
+
OcrFrame["lineGradient"] = "#7CFFF9";
|
|
24227
|
+
OcrFrame[OcrFrame["lineGradientOpacity"] = 0.5] = "lineGradientOpacity";
|
|
24228
|
+
OcrFrame["successColor"] = "#7CFFF9";
|
|
24229
|
+
OcrFrame[OcrFrame["successOpacity"] = 1] = "successOpacity";
|
|
24230
|
+
OcrFrame["textColor"] = "#FFF";
|
|
24231
|
+
OcrFrame[OcrFrame["textOpacity"] = 0.7] = "textOpacity";
|
|
24232
|
+
OcrFrame["imageColor"] = "#FFF";
|
|
24233
|
+
OcrFrame[OcrFrame["imageOpacity"] = 0.4] = "imageOpacity";
|
|
24234
|
+
})(OcrFrame || (OcrFrame = {}));
|
|
24235
|
+
const initScanAnimation = params => {
|
|
24236
|
+
var _a, _b, _c;
|
|
24237
|
+
lottie__default["default"].destroy('scan');
|
|
24190
24238
|
lottie__default["default"].loadAnimation({
|
|
24191
24239
|
container: params.scanAnimationContainer,
|
|
24192
24240
|
renderer: 'svg',
|
|
24193
24241
|
loop: true,
|
|
24194
24242
|
autoplay: true,
|
|
24195
24243
|
name: 'scan',
|
|
24196
|
-
animationData: scan(
|
|
24244
|
+
animationData: scan({
|
|
24245
|
+
color: (_a = params.scanColor) !== null && _a !== void 0 ? _a : OcrFrame.lineColor,
|
|
24246
|
+
gradient: (_b = params.scanGradient) !== null && _b !== void 0 ? _b : OcrFrame.lineGradient,
|
|
24247
|
+
opacity: (_c = params.scanOpacity) !== null && _c !== void 0 ? _c : OcrFrame.lineGradientOpacity
|
|
24248
|
+
})
|
|
24197
24249
|
});
|
|
24250
|
+
lottie__default["default"].stop('scan');
|
|
24251
|
+
};
|
|
24252
|
+
const initSuccessAnimation = params => {
|
|
24253
|
+
lottie__default["default"].destroy('success');
|
|
24198
24254
|
lottie__default["default"].loadAnimation({
|
|
24199
|
-
container: params.
|
|
24255
|
+
container: params.animationContainer,
|
|
24200
24256
|
renderer: 'svg',
|
|
24201
24257
|
loop: false,
|
|
24202
24258
|
autoplay: true,
|
|
24203
24259
|
name: 'success',
|
|
24204
|
-
animationData: success(
|
|
24260
|
+
animationData: success({
|
|
24261
|
+
color: '#7CFFF9',
|
|
24262
|
+
opacity: 1
|
|
24263
|
+
})
|
|
24205
24264
|
});
|
|
24206
|
-
lottie__default["default"].stop('scan');
|
|
24207
24265
|
lottie__default["default"].stop('success');
|
|
24208
24266
|
};
|
|
24209
24267
|
const renderCameraSwitch = config => {
|
|
@@ -24251,14 +24309,17 @@ const renderOCRUI = config => {
|
|
|
24251
24309
|
//Statement
|
|
24252
24310
|
const statementContainer = document.createElement('div');
|
|
24253
24311
|
statementContainer.classList.add('statement');
|
|
24254
|
-
statementContainer.textContent = translateService.translate('
|
|
24312
|
+
statementContainer.textContent = translateService.translate('sdk.general.footer');
|
|
24255
24313
|
// Animation
|
|
24256
24314
|
const scanAnimationContainer = document.createElement('div');
|
|
24257
24315
|
scanAnimationContainer.classList.add('scan');
|
|
24258
24316
|
const successAnimationContainer = document.createElement('div');
|
|
24259
|
-
successAnimationContainer.classList.add('
|
|
24317
|
+
successAnimationContainer.classList.add('success_container');
|
|
24318
|
+
const successAnimationDom = document.createElement('div');
|
|
24319
|
+
successAnimationDom.classList.add('success');
|
|
24260
24320
|
const arrowAnimationContainer = document.createElement('div');
|
|
24261
|
-
arrowAnimationContainer.classList.add('
|
|
24321
|
+
arrowAnimationContainer.classList.add('arrow_container');
|
|
24322
|
+
successAnimationContainer.appendChild(successAnimationDom);
|
|
24262
24323
|
config.videoContainer.appendChild(titleTextPanel);
|
|
24263
24324
|
if (config.showStatement) {
|
|
24264
24325
|
config.videoContainer.appendChild(statementContainer);
|
|
@@ -24274,14 +24335,14 @@ const renderOCRUI = config => {
|
|
|
24274
24335
|
antiFraudInstructionContainer.classList.add('anti-fraud-instruction-container');
|
|
24275
24336
|
const instructionText = document.createElement('div');
|
|
24276
24337
|
instructionText.classList.add('anti-fraud-instruction-container__text');
|
|
24277
|
-
instructionText.textContent = translateService.translate('verify.fraudDescribe');
|
|
24338
|
+
instructionText.textContent = translateService.translate('sdk.guard.verify.guide.fraudDescribe');
|
|
24278
24339
|
const antiFraudInstructionAnimationContainer = document.createElement('div');
|
|
24279
24340
|
antiFraudInstructionAnimationContainer.classList.add('anti-fraud-instruction-animation-container');
|
|
24280
24341
|
const btnContainer = document.createElement('div');
|
|
24281
24342
|
btnContainer.classList.add('btn-container');
|
|
24282
24343
|
const confirmBtn = document.createElement('button');
|
|
24283
24344
|
confirmBtn.classList.add('confirm-btn');
|
|
24284
|
-
confirmBtn.textContent = translateService.translate('
|
|
24345
|
+
confirmBtn.textContent = translateService.translate('sdk.general.preparing');
|
|
24285
24346
|
confirmBtn.disabled = true;
|
|
24286
24347
|
btnContainer.appendChild(confirmBtn);
|
|
24287
24348
|
antiFraudInstructionContainer.appendChild(instructionText);
|
|
@@ -24294,7 +24355,7 @@ const renderOCRUI = config => {
|
|
|
24294
24355
|
confirmImageContainer.classList.add('confirm-image-container');
|
|
24295
24356
|
const imageTypeText = document.createElement('div');
|
|
24296
24357
|
imageTypeText.classList.add('image-type-text');
|
|
24297
|
-
imageTypeText.textContent = translateService.translate('
|
|
24358
|
+
imageTypeText.textContent = translateService.translate('sdk.general.frontSide');
|
|
24298
24359
|
const imageLine = document.createElement('div');
|
|
24299
24360
|
imageLine.classList.add('image-line');
|
|
24300
24361
|
const imageLineLineDesktop = document.createElement('div');
|
|
@@ -24307,10 +24368,10 @@ const renderOCRUI = config => {
|
|
|
24307
24368
|
imageFooter.classList.add('image-footer');
|
|
24308
24369
|
const retryBtn = document.createElement('button');
|
|
24309
24370
|
retryBtn.classList.add('btn-retry');
|
|
24310
|
-
retryBtn.textContent = translateService.translate('verify.
|
|
24371
|
+
retryBtn.textContent = translateService.translate('sdk.ocr.verify.retry');
|
|
24311
24372
|
const completeBtn = document.createElement('button');
|
|
24312
24373
|
completeBtn.classList.add('btn-complete');
|
|
24313
|
-
completeBtn.textContent = translateService.translate('verify.
|
|
24374
|
+
completeBtn.textContent = translateService.translate('sdk.ocr.verify.clear');
|
|
24314
24375
|
imageFooter.appendChild(completeBtn);
|
|
24315
24376
|
imageFooter.appendChild(retryBtn);
|
|
24316
24377
|
confirmImageContainer.appendChild(imageTypeText);
|
|
@@ -24319,10 +24380,6 @@ const renderOCRUI = config => {
|
|
|
24319
24380
|
confirmImageContainer.appendChild(imageLineLineDesktop);
|
|
24320
24381
|
confirmImageContainer.appendChild(imageFooter);
|
|
24321
24382
|
config.container.appendChild(confirmImageContainer);
|
|
24322
|
-
initAnimation({
|
|
24323
|
-
scanAnimationContainer,
|
|
24324
|
-
successAnimationContainer
|
|
24325
|
-
});
|
|
24326
24383
|
return {
|
|
24327
24384
|
antiFraudInstructionContainer,
|
|
24328
24385
|
titleTextPanel,
|
|
@@ -24333,6 +24390,7 @@ const renderOCRUI = config => {
|
|
|
24333
24390
|
lottieMask,
|
|
24334
24391
|
arrowAnimationContainer,
|
|
24335
24392
|
successAnimationContainer,
|
|
24393
|
+
successAnimationDom,
|
|
24336
24394
|
scanAnimationContainer,
|
|
24337
24395
|
antiFraudInstructionAnimationContainer,
|
|
24338
24396
|
confirmImageContainer,
|
|
@@ -24373,19 +24431,23 @@ function renderConfirmUI({
|
|
|
24373
24431
|
const keyMapping = {
|
|
24374
24432
|
[idRecognition.IdRecognitionCardType.IDCard]: 'idCard',
|
|
24375
24433
|
[idRecognition.IdRecognitionCardType.DriverLicense]: 'driverLicense',
|
|
24376
|
-
[idRecognition.IdRecognitionCardType.HealthCard]: '
|
|
24434
|
+
[idRecognition.IdRecognitionCardType.HealthCard]: 'HealthCard',
|
|
24377
24435
|
[idRecognition.IdRecognitionCardType.ResidentCard]: 'residentCard',
|
|
24378
24436
|
[idRecognition.IdRecognitionCardType.Passport]: 'passport'
|
|
24379
24437
|
};
|
|
24380
24438
|
elem.classList.add('data-type');
|
|
24381
|
-
elem.textContent = translate(cardType ? `
|
|
24439
|
+
elem.textContent = translate(cardType ? `sdk.ocr.verify.result.title.${keyMapping[cardType]}` : '');
|
|
24382
24440
|
}), _render('div', elem => {
|
|
24383
24441
|
elem.classList.add('data');
|
|
24384
24442
|
}, items.columns.map(column => _render('div', elem => {
|
|
24385
24443
|
elem.classList.add('data-column');
|
|
24386
24444
|
}, [_render('div', elem => {
|
|
24387
24445
|
elem.classList.add('title');
|
|
24388
|
-
|
|
24446
|
+
if (column === 'issueReason') {
|
|
24447
|
+
elem.textContent = translate('sdk.ocr.verify.result.issueType');
|
|
24448
|
+
} else {
|
|
24449
|
+
elem.textContent = translate('sdk.ocr.verify.result.' + column);
|
|
24450
|
+
}
|
|
24389
24451
|
}), column === 'address' ? _render('textarea', elem => {
|
|
24390
24452
|
var _a;
|
|
24391
24453
|
elem.name = column;
|
|
@@ -24393,7 +24455,7 @@ function renderConfirmUI({
|
|
|
24393
24455
|
elem.classList.add('content');
|
|
24394
24456
|
elem.classList.add('textarea');
|
|
24395
24457
|
elem.textContent = (_a = items.details[column]) !== null && _a !== void 0 ? _a : '';
|
|
24396
|
-
elem.placeholder = translate('
|
|
24458
|
+
elem.placeholder = translate('sdk.ocr.verify.result.placeHolder');
|
|
24397
24459
|
}) : _render('input', elem => {
|
|
24398
24460
|
var _a;
|
|
24399
24461
|
elem.value;
|
|
@@ -24401,7 +24463,7 @@ function renderConfirmUI({
|
|
|
24401
24463
|
elem.type = 'text';
|
|
24402
24464
|
elem.classList.add('content');
|
|
24403
24465
|
elem.value = (_a = items.details[column]) !== null && _a !== void 0 ? _a : '';
|
|
24404
|
-
elem.placeholder = translate('
|
|
24466
|
+
elem.placeholder = translate('sdk.ocr.verify.result.placeHolder');
|
|
24405
24467
|
})]))), _render('div', elem => {
|
|
24406
24468
|
elem.classList.add('d-flex');
|
|
24407
24469
|
elem.classList.add('justify-content-center');
|
|
@@ -24411,7 +24473,7 @@ function renderConfirmUI({
|
|
|
24411
24473
|
elem.classList.add('btn-success');
|
|
24412
24474
|
elem.classList.add('text-light');
|
|
24413
24475
|
elem.classList.add('confirm-btn');
|
|
24414
|
-
elem.textContent = translate('
|
|
24476
|
+
elem.textContent = translate('sdk.general.accept');
|
|
24415
24477
|
})])])]);
|
|
24416
24478
|
document.body.appendChild(confirmContainerElem);
|
|
24417
24479
|
return new Promise((resolve, reject) => {
|
|
@@ -24475,15 +24537,23 @@ function mirrorPoints(points) {
|
|
|
24475
24537
|
}));
|
|
24476
24538
|
}
|
|
24477
24539
|
const renderOCRMask = params => {
|
|
24540
|
+
let newCardPoints;
|
|
24541
|
+
let borderColor = '';
|
|
24542
|
+
let borderOpacity = OcrFrame.borderOpacity;
|
|
24543
|
+
let borderColorSuccess = '';
|
|
24544
|
+
let borderOpacitySuccess = OcrFrame.successOpacity;
|
|
24478
24545
|
const {
|
|
24479
24546
|
cardPoints,
|
|
24480
|
-
container
|
|
24481
|
-
cardFrameColor
|
|
24547
|
+
container
|
|
24482
24548
|
} = params;
|
|
24483
24549
|
const _cardPoints = params.mirrored ? mirrorPoints(cardPoints) : cardPoints;
|
|
24550
|
+
const windowWidth = container.offsetWidth;
|
|
24551
|
+
const windowHeight = container.offsetHeight;
|
|
24552
|
+
const radius = 10;
|
|
24553
|
+
let borderType = OcrFrame.borderType;
|
|
24484
24554
|
// 創建SVG元素
|
|
24485
24555
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
24486
|
-
svg.setAttribute('id', '
|
|
24556
|
+
svg.setAttribute('id', 'authme_frame_border');
|
|
24487
24557
|
svg.setAttribute('width', '100%');
|
|
24488
24558
|
svg.setAttribute('height', '100%');
|
|
24489
24559
|
svg.style.position = 'absolute';
|
|
@@ -24505,10 +24575,78 @@ const renderOCRMask = params => {
|
|
|
24505
24575
|
mask.appendChild(path);
|
|
24506
24576
|
defs.appendChild(mask);
|
|
24507
24577
|
svg.appendChild(defs);
|
|
24578
|
+
const rectOfFrame = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
|
|
24579
|
+
rectOfFrame.setAttribute('rx', '10');
|
|
24580
|
+
rectOfFrame.setAttribute('ry', '10');
|
|
24581
|
+
rectOfFrame.setAttribute('stroke', OcrFrame.borderColor);
|
|
24582
|
+
rectOfFrame.setAttribute('stroke-width', '3');
|
|
24583
|
+
rectOfFrame.setAttribute('fill', 'none');
|
|
24508
24584
|
const pathOfFrame = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
|
24509
24585
|
pathOfFrame.setAttribute('fill', 'none');
|
|
24510
|
-
pathOfFrame.setAttribute('stroke',
|
|
24586
|
+
pathOfFrame.setAttribute('stroke', OcrFrame.borderColor);
|
|
24511
24587
|
pathOfFrame.setAttribute('stroke-width', '3');
|
|
24588
|
+
const setBorderType = params => {
|
|
24589
|
+
var _a;
|
|
24590
|
+
const _mirrored = (_a = params.mirrored) !== null && _a !== void 0 ? _a : false;
|
|
24591
|
+
borderType = params.type;
|
|
24592
|
+
if (params.color) {
|
|
24593
|
+
borderColor = params.color;
|
|
24594
|
+
}
|
|
24595
|
+
if (params.strokeOpacity !== undefined) {
|
|
24596
|
+
borderOpacity = params.strokeOpacity;
|
|
24597
|
+
}
|
|
24598
|
+
if (params.type === 'bordered') {
|
|
24599
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24600
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24601
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24602
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24603
|
+
pathOfFrame.setAttribute('visibility', 'hidden');
|
|
24604
|
+
rectOfFrame.setAttribute('visibility', 'visible');
|
|
24605
|
+
rectOfFrame.setAttribute('x', rectX.toString());
|
|
24606
|
+
rectOfFrame.setAttribute('y', rectY.toString());
|
|
24607
|
+
rectOfFrame.setAttribute('width', rectWidth.toString());
|
|
24608
|
+
rectOfFrame.setAttribute('height', rectHeight.toString());
|
|
24609
|
+
rectOfFrame.setAttribute('stroke-opacity', borderOpacity.toString());
|
|
24610
|
+
svg.appendChild(rectOfFrame);
|
|
24611
|
+
} else {
|
|
24612
|
+
rectOfFrame.setAttribute('visibility', 'hidden');
|
|
24613
|
+
pathOfFrame.setAttribute('visibility', 'visible');
|
|
24614
|
+
// 掃描框的樣式,四個圓角
|
|
24615
|
+
const dFrame = newCardPoints.reduce((acc, {
|
|
24616
|
+
x,
|
|
24617
|
+
y
|
|
24618
|
+
}, index) => {
|
|
24619
|
+
var _a, _b;
|
|
24620
|
+
const lineRotio = 2;
|
|
24621
|
+
const previosPoint = (_a = newCardPoints[index - 1]) !== null && _a !== void 0 ? _a : newCardPoints[newCardPoints.length - 1];
|
|
24622
|
+
const nextPoint = (_b = newCardPoints[index + 1]) !== null && _b !== void 0 ? _b : newCardPoints[0];
|
|
24623
|
+
const _x1 = windowWidth * previosPoint.x;
|
|
24624
|
+
const _y1 = windowHeight * previosPoint.y;
|
|
24625
|
+
const _x2 = windowWidth * x;
|
|
24626
|
+
const _y2 = windowHeight * y;
|
|
24627
|
+
const _x3 = windowWidth * nextPoint.x;
|
|
24628
|
+
const _y3 = windowHeight * nextPoint.y;
|
|
24629
|
+
const v = new Vector({
|
|
24630
|
+
x: _x1,
|
|
24631
|
+
y: _y1
|
|
24632
|
+
}, {
|
|
24633
|
+
x: _x2,
|
|
24634
|
+
y: _y2
|
|
24635
|
+
});
|
|
24636
|
+
const vNext = new Vector({
|
|
24637
|
+
x: _x2,
|
|
24638
|
+
y: _y2
|
|
24639
|
+
}, {
|
|
24640
|
+
x: _x3,
|
|
24641
|
+
y: _y3
|
|
24642
|
+
});
|
|
24643
|
+
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y} L ${_x2 + lineRotio * radius * vNext.unitVector.x},${_y2 + lineRotio * radius * vNext.unitVector.y} `;
|
|
24644
|
+
}, '');
|
|
24645
|
+
pathOfFrame.setAttribute('d', dFrame);
|
|
24646
|
+
pathOfFrame.setAttribute('stroke-opacity', borderOpacity.toString());
|
|
24647
|
+
svg.appendChild(pathOfFrame);
|
|
24648
|
+
}
|
|
24649
|
+
};
|
|
24512
24650
|
// 創建帶有遮罩的長方形
|
|
24513
24651
|
const maskedRect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
|
|
24514
24652
|
maskedRect.setAttribute('width', '100%');
|
|
@@ -24516,12 +24654,10 @@ const renderOCRMask = params => {
|
|
|
24516
24654
|
maskedRect.setAttribute('fill', 'rgba(0, 0, 0, 0.65)');
|
|
24517
24655
|
maskedRect.setAttribute('mask', 'url(#hole)');
|
|
24518
24656
|
svg.appendChild(maskedRect);
|
|
24519
|
-
svg.appendChild(pathOfFrame);
|
|
24520
24657
|
// 添加SVG到容器
|
|
24521
24658
|
container.appendChild(svg);
|
|
24522
|
-
const
|
|
24523
|
-
|
|
24524
|
-
const newCardPoints = mirrored ? mirrorPoints(_newCardPoints) : _newCardPoints;
|
|
24659
|
+
const setCardPoints = (_newCardPoints, antiFraud = false, _mirrored = false) => {
|
|
24660
|
+
newCardPoints = _mirrored ? mirrorPoints(_newCardPoints) : _newCardPoints;
|
|
24525
24661
|
const d = newCardPoints.reduce((acc, {
|
|
24526
24662
|
x,
|
|
24527
24663
|
y
|
|
@@ -24552,9 +24688,9 @@ const renderOCRMask = params => {
|
|
|
24552
24688
|
x: _x3,
|
|
24553
24689
|
y: _y3
|
|
24554
24690
|
});
|
|
24555
|
-
return `${acc} ${command} ${_x2 - radius * v.unitVector.x},${_y2 - radius * v.unitVector.y} A 10,10 0 0, ${
|
|
24691
|
+
return `${acc} ${command} ${_x2 - radius * v.unitVector.x},${_y2 - radius * v.unitVector.y} A 10,10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y}`;
|
|
24556
24692
|
}, '') + ' Z'; // 結尾加上'Z'來關閉路徑
|
|
24557
|
-
|
|
24693
|
+
newCardPoints.reduce((acc, {
|
|
24558
24694
|
x,
|
|
24559
24695
|
y
|
|
24560
24696
|
}, index) => {
|
|
@@ -24584,31 +24720,126 @@ const renderOCRMask = params => {
|
|
|
24584
24720
|
x: _x3,
|
|
24585
24721
|
y: _y3
|
|
24586
24722
|
});
|
|
24587
|
-
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${
|
|
24723
|
+
return `${acc} M ${_x2 - lineRotio * radius * v.unitVector.x},${_y2 - lineRotio * radius * v.unitVector.y} L ${_x2 - radius * v.unitVector.x}, ${_y2 - radius * v.unitVector.y} A 10, 10 0 0, ${_mirrored ? '0' : '1'} ${_x2 + radius * vNext.unitVector.x},${_y2 + radius * vNext.unitVector.y} L ${_x2 + lineRotio * radius * vNext.unitVector.x},${_y2 + lineRotio * radius * vNext.unitVector.y} `;
|
|
24588
24724
|
}, '');
|
|
24589
24725
|
path.setAttribute('d', d);
|
|
24590
|
-
|
|
24726
|
+
if (antiFraud) {
|
|
24727
|
+
setBorderType({
|
|
24728
|
+
type: borderType,
|
|
24729
|
+
mirrored: _mirrored
|
|
24730
|
+
});
|
|
24731
|
+
}
|
|
24591
24732
|
};
|
|
24592
|
-
|
|
24593
|
-
|
|
24733
|
+
function setBorderSuccess(color, opacity) {
|
|
24734
|
+
borderColorSuccess = color;
|
|
24735
|
+
borderOpacitySuccess = opacity;
|
|
24736
|
+
}
|
|
24737
|
+
function setCardBorderColor(status) {
|
|
24738
|
+
let color = borderColor;
|
|
24739
|
+
let opacity = borderOpacity;
|
|
24594
24740
|
switch (status) {
|
|
24595
24741
|
case 'error':
|
|
24596
|
-
color = 'var(--authme-scanner-error-color)';
|
|
24742
|
+
color = borderColor || 'var(--authme-scanner-error-color)';
|
|
24743
|
+
opacity = borderOpacity;
|
|
24597
24744
|
break;
|
|
24598
24745
|
case 'pass':
|
|
24599
|
-
color = 'var(--authme-scanning_color)';
|
|
24600
|
-
|
|
24601
|
-
default:
|
|
24602
|
-
color = '#fff';
|
|
24746
|
+
color = borderColorSuccess || 'var(--authme-scanning_color)';
|
|
24747
|
+
opacity = borderOpacitySuccess;
|
|
24603
24748
|
break;
|
|
24604
24749
|
}
|
|
24605
|
-
|
|
24606
|
-
|
|
24750
|
+
if (borderType === 'bordered') {
|
|
24751
|
+
rectOfFrame.setAttribute('stroke', color);
|
|
24752
|
+
rectOfFrame.setAttribute('stroke-opacity', opacity.toString());
|
|
24753
|
+
} else {
|
|
24754
|
+
pathOfFrame.setAttribute('stroke', color);
|
|
24755
|
+
pathOfFrame.setAttribute('stroke-opacity', opacity.toString());
|
|
24756
|
+
}
|
|
24757
|
+
}
|
|
24758
|
+
function frameImage(faceMode, zIndex, base64, color, opacity) {
|
|
24759
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.imageColor;
|
|
24760
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.imageOpacity;
|
|
24761
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24762
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24763
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24764
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24765
|
+
let domContainer = document.querySelector('#authme_frame_image');
|
|
24766
|
+
let domImage = document.querySelector('#authme_frame_image_svg');
|
|
24767
|
+
const domImageStyle = `
|
|
24768
|
+
width: 100%;
|
|
24769
|
+
height: 100%;
|
|
24770
|
+
background-color: ${color};
|
|
24771
|
+
opacity: ${opacity};
|
|
24772
|
+
-webkit-mask-image: url(data:image/svg+xml;base64,${base64});
|
|
24773
|
+
mask-image: url(data:image/svg+xml;base64,${base64});
|
|
24774
|
+
-webkit-mask-size: contain;
|
|
24775
|
+
mask-size: contain;
|
|
24776
|
+
mask-repeat: no-repeat no-repeat;
|
|
24777
|
+
mask-position: center center;
|
|
24778
|
+
`;
|
|
24779
|
+
if (!domContainer) {
|
|
24780
|
+
domContainer = document.createElement('div');
|
|
24781
|
+
domContainer.setAttribute('id', 'authme_frame_image');
|
|
24782
|
+
container.appendChild(domContainer);
|
|
24783
|
+
}
|
|
24784
|
+
if (!domImage) {
|
|
24785
|
+
domImage = document.createElement('div');
|
|
24786
|
+
domImage.setAttribute('id', 'authme_frame_image_svg');
|
|
24787
|
+
domContainer.appendChild(domImage);
|
|
24788
|
+
}
|
|
24789
|
+
if (faceMode === 'front') {
|
|
24790
|
+
domImage.classList.add('front');
|
|
24791
|
+
}
|
|
24792
|
+
domImage.setAttribute('style', domImageStyle);
|
|
24793
|
+
domImage.setAttribute('preserveAspectRatio', 'none');
|
|
24794
|
+
domContainer.setAttribute('style', `
|
|
24795
|
+
z-index: ${zIndex};
|
|
24796
|
+
position: absolute;
|
|
24797
|
+
left: ${rectX}px;
|
|
24798
|
+
top: ${rectY}px;
|
|
24799
|
+
width: ${rectWidth}px;
|
|
24800
|
+
height: ${rectHeight}px;
|
|
24801
|
+
opacity: ${opacity};
|
|
24802
|
+
`);
|
|
24803
|
+
}
|
|
24804
|
+
function frameText(zIndex, text, color, opacity) {
|
|
24805
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.textColor;
|
|
24806
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.textOpacity;
|
|
24807
|
+
const rectX = newCardPoints[0].x * windowWidth;
|
|
24808
|
+
const rectY = newCardPoints[0].y * windowHeight;
|
|
24809
|
+
const rectWidth = newCardPoints[1].x * windowWidth - rectX;
|
|
24810
|
+
const rectHeight = newCardPoints[3].y * windowHeight - rectY;
|
|
24811
|
+
let dom = document.querySelector('#authme_frame_text');
|
|
24812
|
+
if (!dom) {
|
|
24813
|
+
dom = document.createElement('div');
|
|
24814
|
+
dom.setAttribute('id', 'authme_frame_text');
|
|
24815
|
+
container.appendChild(dom);
|
|
24816
|
+
}
|
|
24817
|
+
dom.setAttribute('style', `
|
|
24818
|
+
z-index: ${zIndex};
|
|
24819
|
+
position: absolute;
|
|
24820
|
+
left: ${rectX}px;
|
|
24821
|
+
top: ${rectY}px;
|
|
24822
|
+
width: ${rectWidth}px;
|
|
24823
|
+
height: ${rectHeight}px;
|
|
24824
|
+
opacity: ${opacity};
|
|
24825
|
+
color: ${color};
|
|
24826
|
+
display: flex;
|
|
24827
|
+
align-items: center;
|
|
24828
|
+
justify-content: center;
|
|
24829
|
+
font-size: 60px;
|
|
24830
|
+
font-weight: 500;
|
|
24831
|
+
`);
|
|
24832
|
+
dom.textContent = text;
|
|
24833
|
+
}
|
|
24607
24834
|
// 初始化位置
|
|
24608
24835
|
setCardPoints(_cardPoints);
|
|
24609
24836
|
return {
|
|
24610
24837
|
setCardPoints,
|
|
24611
|
-
setCardBorderColor
|
|
24838
|
+
setCardBorderColor,
|
|
24839
|
+
setBorderType,
|
|
24840
|
+
frameImage,
|
|
24841
|
+
frameText,
|
|
24842
|
+
setBorderSuccess
|
|
24612
24843
|
};
|
|
24613
24844
|
};
|
|
24614
24845
|
|
|
@@ -24620,7 +24851,8 @@ const cardSvgStyle = `.d{fill:#f7f7f7;}.e{fill:#f2f2f2;}.f{fill:#ed5454;}.g{fill
|
|
|
24620
24851
|
function makeSvgTag(viewBox, styleSetting = '') {
|
|
24621
24852
|
const newSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
24622
24853
|
const style = makeStyleTag(styleSetting);
|
|
24623
|
-
newSvg.style['position'] = '
|
|
24854
|
+
newSvg.style['position'] = 'relative';
|
|
24855
|
+
newSvg.style['width'] = '100%';
|
|
24624
24856
|
newSvg.setAttribute('version', '1.1');
|
|
24625
24857
|
newSvg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
|
24626
24858
|
newSvg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
|
|
@@ -24664,16 +24896,19 @@ function renderCardRotateAnimate(container) {
|
|
|
24664
24896
|
const {
|
|
24665
24897
|
cardMainGroup
|
|
24666
24898
|
} = createSvgCard();
|
|
24667
|
-
|
|
24668
|
-
|
|
24899
|
+
const div = document.createElement('div');
|
|
24900
|
+
div.setAttribute('class', 'arrow');
|
|
24901
|
+
div.style.transition = `opacity ${fadeDuration}ms`;
|
|
24902
|
+
div.style.opacity = '0';
|
|
24669
24903
|
cardSvg.style.transition = `transform ${aimateDuration}ms `;
|
|
24670
24904
|
cardSvg.style.zIndex = `var(--authme-layers-1-z-index)`;
|
|
24671
24905
|
frontArrowSvg.style.zIndex = `var(--authme-layers-2-z-index)`;
|
|
24672
24906
|
cardSvg.appendChild(cardMainGroup);
|
|
24673
|
-
|
|
24907
|
+
div.appendChild(cardSvg);
|
|
24674
24908
|
cardSvg.style.display = 'none';
|
|
24675
24909
|
frontArrowSvg.style.display = 'none';
|
|
24676
24910
|
backArrowSvg.style.display = 'none';
|
|
24911
|
+
container.appendChild(div);
|
|
24677
24912
|
return {
|
|
24678
24913
|
stopAnimate: () => {
|
|
24679
24914
|
if (rotateTimeout.length > 0) {
|
|
@@ -25007,7 +25242,7 @@ function renderCardRotateAnimate(container) {
|
|
|
25007
25242
|
});
|
|
25008
25243
|
}
|
|
25009
25244
|
function fadeAnimate(inOrOut) {
|
|
25010
|
-
|
|
25245
|
+
div.style.opacity = inOrOut === 'in' ? '0.8' : '0';
|
|
25011
25246
|
return new Promise(resolve => {
|
|
25012
25247
|
setTimeout(() => {
|
|
25013
25248
|
resolve(true);
|
|
@@ -25063,10 +25298,442 @@ function renderCardRotateAnimate(container) {
|
|
|
25063
25298
|
cardSvg.style.display = 'none';
|
|
25064
25299
|
frontArrowSvg.style.display = 'none';
|
|
25065
25300
|
backArrowSvg.style.display = 'none';
|
|
25066
|
-
//
|
|
25301
|
+
// div.removeChild(svg);
|
|
25067
25302
|
}
|
|
25068
25303
|
}
|
|
25069
25304
|
|
|
25305
|
+
const captureButton = () => {
|
|
25306
|
+
let dom = document.querySelector('#btn_capture');
|
|
25307
|
+
if (dom) {
|
|
25308
|
+
return dom;
|
|
25309
|
+
}
|
|
25310
|
+
const videoContainer = document.querySelector('.video-container');
|
|
25311
|
+
if (!videoContainer) {
|
|
25312
|
+
console.error('captureButton: videoContainer not found');
|
|
25313
|
+
return null;
|
|
25314
|
+
}
|
|
25315
|
+
dom = document.createElement('div');
|
|
25316
|
+
dom.id = 'btn_capture';
|
|
25317
|
+
const pictureInner = document.createElement('div');
|
|
25318
|
+
pictureInner.classList.add('inner');
|
|
25319
|
+
dom.appendChild(pictureInner);
|
|
25320
|
+
videoContainer.appendChild(dom);
|
|
25321
|
+
return dom;
|
|
25322
|
+
};
|
|
25323
|
+
|
|
25324
|
+
const modal = arg => {
|
|
25325
|
+
const authmeContainer = document.querySelector('.authme-container');
|
|
25326
|
+
if (!authmeContainer) {
|
|
25327
|
+
console.error('modal: authmeContainer not found');
|
|
25328
|
+
return;
|
|
25329
|
+
}
|
|
25330
|
+
function removeModal() {
|
|
25331
|
+
var _a;
|
|
25332
|
+
(_a = document.querySelector('.video-container__modal')) === null || _a === void 0 ? void 0 : _a.remove();
|
|
25333
|
+
}
|
|
25334
|
+
const domModal = document.createElement('div');
|
|
25335
|
+
const domHeaderContainer = document.createElement('div');
|
|
25336
|
+
const domHeader = document.createElement('div');
|
|
25337
|
+
const domContainer = document.createElement('div');
|
|
25338
|
+
const domTitle = document.createElement('div');
|
|
25339
|
+
const domSubtitle = document.createElement('div');
|
|
25340
|
+
const domImage = document.createElement('img');
|
|
25341
|
+
const domContent = document.createElement('div');
|
|
25342
|
+
const domFooter = document.createElement('div');
|
|
25343
|
+
const domClose = document.createElement('div');
|
|
25344
|
+
const domConfirm = document.createElement('div');
|
|
25345
|
+
const domCopyRight = document.createElement('div');
|
|
25346
|
+
domModal.classList.add('video-container__modal');
|
|
25347
|
+
domHeaderContainer.classList.add('video-container__modal-header-container');
|
|
25348
|
+
domHeader.classList.add('video-container__modal-header');
|
|
25349
|
+
domContainer.classList.add('video-container__modal-container');
|
|
25350
|
+
domTitle.classList.add('video-container__modal-title');
|
|
25351
|
+
domSubtitle.classList.add('video-container__modal-subtitle');
|
|
25352
|
+
domImage.classList.add('video-container__modal-image');
|
|
25353
|
+
domContent.classList.add('video-container__modal-content');
|
|
25354
|
+
domFooter.classList.add('video-container__modal-footer');
|
|
25355
|
+
domClose.classList.add('video-container__modal-close');
|
|
25356
|
+
domConfirm.classList.add('video-container__modal-confirm');
|
|
25357
|
+
domCopyRight.classList.add('video-container__modal-copy-right');
|
|
25358
|
+
domHeader.innerText = arg.header;
|
|
25359
|
+
domTitle.innerText = arg.title;
|
|
25360
|
+
domSubtitle.innerText = arg.subtitle;
|
|
25361
|
+
domImage.src = arg.image;
|
|
25362
|
+
domContent.innerHTML = arg.content;
|
|
25363
|
+
domClose.innerHTML = '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.1943 6.41714C19.6393 5.97216 19.6393 5.2507 19.1943 4.80571C18.7493 4.36073 18.0278 4.36073 17.5829 4.80571L12 10.3886L6.41714 4.80572C5.97216 4.36073 5.2507 4.36073 4.80571 4.80571C4.36073 5.2507 4.36073 5.97216 4.80571 6.41714L10.3886 12L4.80571 17.5829C4.36073 18.0278 4.36073 18.7493 4.80571 19.1943C5.2507 19.6393 5.97216 19.6393 6.41714 19.1943L12 13.6114L17.5829 19.1943C18.0278 19.6393 18.7493 19.6393 19.1943 19.1943C19.6393 18.7493 19.6393 18.0278 19.1943 17.5829L13.6114 12L19.1943 6.41714Z" fill="#545454"/></svg>';
|
|
25364
|
+
domConfirm.innerText = arg.confirm;
|
|
25365
|
+
domClose.addEventListener('click', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25366
|
+
if (arg.onClose) {
|
|
25367
|
+
yield arg.onClose();
|
|
25368
|
+
}
|
|
25369
|
+
removeModal();
|
|
25370
|
+
}));
|
|
25371
|
+
domConfirm.addEventListener('click', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25372
|
+
if (arg.onConfirm) {
|
|
25373
|
+
yield arg.onConfirm();
|
|
25374
|
+
}
|
|
25375
|
+
removeModal();
|
|
25376
|
+
}));
|
|
25377
|
+
domHeaderContainer.appendChild(domHeader);
|
|
25378
|
+
domHeaderContainer.appendChild(domClose);
|
|
25379
|
+
domModal.appendChild(domHeaderContainer);
|
|
25380
|
+
domContainer.appendChild(domTitle);
|
|
25381
|
+
domContainer.appendChild(domSubtitle);
|
|
25382
|
+
domContainer.appendChild(domImage);
|
|
25383
|
+
domContainer.appendChild(domContent);
|
|
25384
|
+
domModal.appendChild(domContainer);
|
|
25385
|
+
domFooter.appendChild(domConfirm);
|
|
25386
|
+
domModal.appendChild(domFooter);
|
|
25387
|
+
if (arg.copyRight) {
|
|
25388
|
+
domCopyRight.innerText = arg.copyRight;
|
|
25389
|
+
domFooter.appendChild(domCopyRight);
|
|
25390
|
+
}
|
|
25391
|
+
authmeContainer.appendChild(domModal);
|
|
25392
|
+
};
|
|
25393
|
+
|
|
25394
|
+
const tiltFrame = isTilt => {
|
|
25395
|
+
var _a, _b, _c, _d;
|
|
25396
|
+
document.querySelector('.video-container');
|
|
25397
|
+
if (isTilt) {
|
|
25398
|
+
(_a = document.querySelector('#authme_frame_image')) === null || _a === void 0 ? void 0 : _a.classList.add('svg-tilt');
|
|
25399
|
+
(_b = document.querySelector('#authme_frame_image_svg')) === null || _b === void 0 ? void 0 : _b.classList.add('svg-tilt');
|
|
25400
|
+
} else {
|
|
25401
|
+
(_c = document.querySelector('#authme_frame_image')) === null || _c === void 0 ? void 0 : _c.classList.remove('svg-tilt');
|
|
25402
|
+
(_d = document.querySelector('#authme_frame_image_svg')) === null || _d === void 0 ? void 0 : _d.classList.remove('svg-tilt');
|
|
25403
|
+
}
|
|
25404
|
+
};
|
|
25405
|
+
const resetFrame = () => {
|
|
25406
|
+
const domContainer = document.querySelector('#authme_frame_image');
|
|
25407
|
+
const domImage = document.querySelector('#authme_frame_image_svg');
|
|
25408
|
+
if (domContainer) {
|
|
25409
|
+
domContainer.setAttribute('style', 'display: none');
|
|
25410
|
+
}
|
|
25411
|
+
if (domImage) {
|
|
25412
|
+
domImage.setAttribute('style', 'display: none');
|
|
25413
|
+
}
|
|
25414
|
+
};
|
|
25415
|
+
const countdownTimer = (time, doSomething) => {
|
|
25416
|
+
let end = false;
|
|
25417
|
+
const init = () => {
|
|
25418
|
+
const endTime = new Date().getTime() + time * 1000;
|
|
25419
|
+
const timer = setInterval(function () {
|
|
25420
|
+
const currentTime = new Date().getTime();
|
|
25421
|
+
const remainingTime = endTime - currentTime;
|
|
25422
|
+
if (remainingTime <= 0) {
|
|
25423
|
+
clearInterval(timer);
|
|
25424
|
+
end = true;
|
|
25425
|
+
if (doSomething) {
|
|
25426
|
+
doSomething();
|
|
25427
|
+
}
|
|
25428
|
+
}
|
|
25429
|
+
}, 300);
|
|
25430
|
+
};
|
|
25431
|
+
const getStatus = () => {
|
|
25432
|
+
return end;
|
|
25433
|
+
};
|
|
25434
|
+
return {
|
|
25435
|
+
init: init,
|
|
25436
|
+
end: getStatus
|
|
25437
|
+
};
|
|
25438
|
+
};
|
|
25439
|
+
|
|
25440
|
+
const translateService = core.getTranslateInstance();
|
|
25441
|
+
// TODO 處理參數
|
|
25442
|
+
const startThickness = (type, cardType, cardTypeConfig, setHintTextLocale, setCardPoints, setCardBorderColor, statusText, canvasSizeInfo$, showVideoElement, config, cardRotateByStage, getCardBorderPoint, setBorderType, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, facingMode, ocrEngineConfig, sdkFlowTimeout = undefined, makeSDKFlowTimeout, image, video, retryBtn, completeBtn, confirmImageContainer) => {
|
|
25443
|
+
const videoToCanvas = (sizeInfo, data) => {
|
|
25444
|
+
const ctx2 = image.getContext('2d');
|
|
25445
|
+
image.width = sizeInfo.canvasWidth;
|
|
25446
|
+
image.height = sizeInfo.canvasHeight;
|
|
25447
|
+
if (data) {
|
|
25448
|
+
const imgData = ctx2.createImageData(image.width, image.height);
|
|
25449
|
+
imgData.data.set(data);
|
|
25450
|
+
ctx2.putImageData(imgData, 0, 0);
|
|
25451
|
+
} else {
|
|
25452
|
+
ctx2.drawImage(video, sizeInfo.startX, sizeInfo.startY, sizeInfo.width, sizeInfo.height, 0, 0, sizeInfo.canvasWidth, sizeInfo.canvasHeight);
|
|
25453
|
+
}
|
|
25454
|
+
};
|
|
25455
|
+
const checkConfirmImageManual = (sizeInfo, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25456
|
+
videoToCanvas(sizeInfo, data);
|
|
25457
|
+
showVideoElement(false);
|
|
25458
|
+
util.showElement(confirmImageContainer);
|
|
25459
|
+
const retryEvents = rxjs.fromEvent(retryBtn, 'click').pipe(rxjs.mapTo(true));
|
|
25460
|
+
const confirmEvents = rxjs.fromEvent(completeBtn, 'click').pipe(rxjs.mapTo(false));
|
|
25461
|
+
const allEvents$ = rxjs.merge(retryEvents, confirmEvents);
|
|
25462
|
+
return yield rxjs.firstValueFrom(allEvents$.pipe());
|
|
25463
|
+
});
|
|
25464
|
+
const generateImage = canvasSizeInfo => {
|
|
25465
|
+
return util.dataURItoBlob(image.toDataURL('image/jpeg', 0.85));
|
|
25466
|
+
// const ocrOriginImg = UintArrayToBlob(
|
|
25467
|
+
// canvasSizeInfo.width,
|
|
25468
|
+
// canvasSizeInfo.height,
|
|
25469
|
+
// data.data,
|
|
25470
|
+
// virtualCanvas
|
|
25471
|
+
// );
|
|
25472
|
+
//
|
|
25473
|
+
// return ocrOriginImg;
|
|
25474
|
+
};
|
|
25475
|
+
|
|
25476
|
+
const initThicknessFrame = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25477
|
+
const cardMatchROI = config.getCardMatchROI ? yield config.getCardMatchROI() : undefined;
|
|
25478
|
+
yield cardRotateByStage(idRecognition.EAuthMeIDCardAntiFraudStage.Down, false, cardMatchROI);
|
|
25479
|
+
});
|
|
25480
|
+
const applyTextByResult = result => {
|
|
25481
|
+
if (!setCardBorderColor) return;
|
|
25482
|
+
statusText.classList.add('non-empty');
|
|
25483
|
+
switch (result.eStatus) {
|
|
25484
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.PositionNotMatch:
|
|
25485
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25486
|
+
sendStatusDescription$1(core.StatusDescription.PositionNotMatch);
|
|
25487
|
+
setCardBorderColor('error');
|
|
25488
|
+
break;
|
|
25489
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedMoreFrame:
|
|
25490
|
+
statusText.textContent = '';
|
|
25491
|
+
statusText.classList.remove('non-empty');
|
|
25492
|
+
sendStatusDescription$1(core.StatusDescription.NeedMoreFrame);
|
|
25493
|
+
setCardBorderColor('pass');
|
|
25494
|
+
break;
|
|
25495
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Detect:
|
|
25496
|
+
statusText.textContent = '';
|
|
25497
|
+
statusText.classList.remove('non-empty');
|
|
25498
|
+
sendStatusDescription$1(core.StatusDescription.NeedMoreFrame);
|
|
25499
|
+
setCardBorderColor('pass');
|
|
25500
|
+
break;
|
|
25501
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NoCard:
|
|
25502
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25503
|
+
sendStatusDescription$1(core.StatusDescription.NoCard);
|
|
25504
|
+
setCardBorderColor('error');
|
|
25505
|
+
break;
|
|
25506
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.WrongCardType:
|
|
25507
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25508
|
+
sendStatusDescription$1(core.StatusDescription.WrongCardType);
|
|
25509
|
+
setCardBorderColor('error');
|
|
25510
|
+
break;
|
|
25511
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardThicknessFailed:
|
|
25512
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.CardThicknessFailed');
|
|
25513
|
+
sendStatusDescription$1(core.StatusDescription.CardThicknessFailed);
|
|
25514
|
+
setCardBorderColor('error');
|
|
25515
|
+
break;
|
|
25516
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Reflective:
|
|
25517
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25518
|
+
sendStatusDescription$1(core.StatusDescription.Reflective);
|
|
25519
|
+
setCardBorderColor('error');
|
|
25520
|
+
break;
|
|
25521
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Blur:
|
|
25522
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25523
|
+
sendStatusDescription$1(core.StatusDescription.Blur);
|
|
25524
|
+
setCardBorderColor('error');
|
|
25525
|
+
break;
|
|
25526
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Gray:
|
|
25527
|
+
statusText.classList.remove('non-empty');
|
|
25528
|
+
statusText.textContent = '';
|
|
25529
|
+
sendStatusDescription$1(core.StatusDescription.Gray);
|
|
25530
|
+
setCardBorderColor('error');
|
|
25531
|
+
break;
|
|
25532
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Error:
|
|
25533
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
25534
|
+
util.showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
25535
|
+
sendStatusDescription$1(core.StatusDescription.Error);
|
|
25536
|
+
break;
|
|
25537
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationFrontal:
|
|
25538
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25539
|
+
break;
|
|
25540
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationLeft:
|
|
25541
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25542
|
+
break;
|
|
25543
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationRight:
|
|
25544
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25545
|
+
break;
|
|
25546
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationUp:
|
|
25547
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25548
|
+
break;
|
|
25549
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationDown:
|
|
25550
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25551
|
+
break;
|
|
25552
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardCutByCamera:
|
|
25553
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.cardCutByCamera');
|
|
25554
|
+
break;
|
|
25555
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardNotInROI:
|
|
25556
|
+
statusText.textContent = translateService.translate('verify.error.CardNotInROI');
|
|
25557
|
+
break;
|
|
25558
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardTooSmall:
|
|
25559
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
25560
|
+
break;
|
|
25561
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedHoldCard:
|
|
25562
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needHoldCard');
|
|
25563
|
+
break;
|
|
25564
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.StagePass:
|
|
25565
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.stagePass');
|
|
25566
|
+
setCardBorderColor('pass');
|
|
25567
|
+
break;
|
|
25568
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Pass:
|
|
25569
|
+
setCardBorderColor('pass');
|
|
25570
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25571
|
+
break;
|
|
25572
|
+
case idRecognition.EAuthMeIDCardAntiFraudStatus.Failed:
|
|
25573
|
+
setCardBorderColor('error');
|
|
25574
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25575
|
+
break;
|
|
25576
|
+
default:
|
|
25577
|
+
emptyStatusText();
|
|
25578
|
+
break;
|
|
25579
|
+
}
|
|
25580
|
+
function emptyStatusText() {
|
|
25581
|
+
setCardBorderColor(null);
|
|
25582
|
+
statusText.textContent = '';
|
|
25583
|
+
statusText.classList.remove('non-empty');
|
|
25584
|
+
}
|
|
25585
|
+
};
|
|
25586
|
+
const init = retry => canvasSizeInfo$.pipe(rxjs.take(1), rxjs.switchMap(canvasSizeInfo => rxjs.from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(rxjs.switchMap(() => util.checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), rxjs.tap(() => {
|
|
25587
|
+
if (!retry) {
|
|
25588
|
+
util.startSpinner(translateService.translate('sdk.general.loading'), true);
|
|
25589
|
+
}
|
|
25590
|
+
}), rxjs.switchMap(() => config.thicknessStart ? config.thicknessStart(getCardBorderPoint(), type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, facingMode, cardType, cardTypeConfig, retry) : rxjs.of(idRecognition.thicknessDefaultConfig)), rxjs.switchMap(result => {
|
|
25591
|
+
tiltFrame(true);
|
|
25592
|
+
if (result && result.thicknessWelcomeSetting && result.thicknessWelcomeSetting.welcome && !retry) {
|
|
25593
|
+
thicknessMode = cardTypeConfig.mode;
|
|
25594
|
+
return new rxjs.Observable(observer => {
|
|
25595
|
+
const pageInfo = result.thicknessWelcomeSetting;
|
|
25596
|
+
modal({
|
|
25597
|
+
header: translateService.translate('sdk.thickness.detection.guide.title'),
|
|
25598
|
+
title: pageInfo.title.enable ? pageInfo.title.text : translateService.translate(idRecognition.thicknessDefaultConfig.thicknessWelcomeSetting.title.text),
|
|
25599
|
+
subtitle: pageInfo.subtitle ? pageInfo.subtitle.text : translateService.translate(idRecognition.thicknessDefaultConfig.thicknessWelcomeSetting.subtitle.text),
|
|
25600
|
+
image: pageInfo.imageShow.enable ? pageInfo.imageShow.src : translateService.translate(idRecognition.thicknessDefaultConfig.thicknessWelcomeSetting.imageShow.src),
|
|
25601
|
+
content: pageInfo.content.enable ? pageInfo.content.text : translateService.translate(idRecognition.thicknessDefaultConfig.thicknessWelcomeSetting.content.text),
|
|
25602
|
+
confirm: translateService.translate('sdk.general.continue'),
|
|
25603
|
+
onClose: () => {
|
|
25604
|
+
return observer.error({
|
|
25605
|
+
isSuccess: false,
|
|
25606
|
+
code: `${core.ErrorCode.USER_CANCEL}`,
|
|
25607
|
+
message: new core.AuthmeError(core.ErrorCode.USER_CANCEL).message,
|
|
25608
|
+
data: {}
|
|
25609
|
+
});
|
|
25610
|
+
},
|
|
25611
|
+
onConfirm: () => {
|
|
25612
|
+
observer.next(canvasSizeInfo);
|
|
25613
|
+
observer.complete();
|
|
25614
|
+
}
|
|
25615
|
+
});
|
|
25616
|
+
});
|
|
25617
|
+
} else {
|
|
25618
|
+
return rxjs.of(canvasSizeInfo);
|
|
25619
|
+
}
|
|
25620
|
+
}), rxjs.tap(() => {
|
|
25621
|
+
util.stopSpinner();
|
|
25622
|
+
if (!retry) {
|
|
25623
|
+
thicknessTimer.init();
|
|
25624
|
+
}
|
|
25625
|
+
}), rxjs.map(() => canvasSizeInfo))));
|
|
25626
|
+
const autoDetectProcess = retry => init(retry).pipe(rxjs.tap(() => {
|
|
25627
|
+
setStatusView(core.StatusView.Running);
|
|
25628
|
+
if (ocrEngineConfig.expiredIn && !sdkFlowTimeout) {
|
|
25629
|
+
sdkFlowTimeout = makeSDKFlowTimeout(ocrEngineConfig.expiredIn);
|
|
25630
|
+
}
|
|
25631
|
+
}), rxjs.switchMap(canvasSizeInfo => {
|
|
25632
|
+
// 不用使用 await 等待 initThicknessFrame 完成, 因為這段是非同步的, 單純出 UI 而已
|
|
25633
|
+
initThicknessFrame();
|
|
25634
|
+
if (!config.onThicknessFrame) {
|
|
25635
|
+
return rxjs.of(canvasSizeInfo);
|
|
25636
|
+
}
|
|
25637
|
+
return rxjs.of(true).pipe(sendFrame(canvasSizeInfo, image, video, config.onThicknessFrame, ocrEngineConfig.fraudMaxFps, false, 'jpg', cardType, undefined, type), rxjs.tap(x => applyTextByResult(x.result)), rxjs.filter(({
|
|
25638
|
+
result
|
|
25639
|
+
}) => {
|
|
25640
|
+
if (result.eStatus === idRecognition.EAuthMeIDCardAntiFraudStatus.Pass) {
|
|
25641
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
25642
|
+
}
|
|
25643
|
+
return result.eStatus === idRecognition.EAuthMeIDCardAntiFraudStatus.Pass || thicknessTimer.end();
|
|
25644
|
+
}), rxjs.take(1),
|
|
25645
|
+
// tap(() => {
|
|
25646
|
+
// statusText.textContent = translateService.translate(
|
|
25647
|
+
// 'sdk.general.verify.success'
|
|
25648
|
+
// );
|
|
25649
|
+
// }),
|
|
25650
|
+
rxjs.switchMap(({
|
|
25651
|
+
result
|
|
25652
|
+
}) => {
|
|
25653
|
+
if (thicknessTimer.end()) {
|
|
25654
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25655
|
+
videoToCanvas(canvasSizeInfo, result.imageData);
|
|
25656
|
+
return config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : rxjs.of(false);
|
|
25657
|
+
}
|
|
25658
|
+
return rxjs.from(checkConfirmImageManual(canvasSizeInfo, result.imageData)).pipe(rxjs.tap(() => applyTextByResult('')), rxjs.switchMap(needRetry => {
|
|
25659
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25660
|
+
return needRetry ? rxjs.of(true) : rxjs.from(config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : rxjs.of(false)).pipe(rxjs.tap(() => sendStatusAction$1(core.StatusAction.Uploading)), rxjs.map(confirmResp => !confirmResp));
|
|
25661
|
+
}), rxjs.switchMap(confirmResp => {
|
|
25662
|
+
showVideoElement(true);
|
|
25663
|
+
util.hideElement(confirmImageContainer);
|
|
25664
|
+
util.stopSpinner();
|
|
25665
|
+
if (confirmResp) {
|
|
25666
|
+
return autoDetectProcess(true);
|
|
25667
|
+
} else {
|
|
25668
|
+
return rxjs.of(confirmResp);
|
|
25669
|
+
}
|
|
25670
|
+
}));
|
|
25671
|
+
}));
|
|
25672
|
+
}));
|
|
25673
|
+
const manualProcess = () => init(false).pipe(rxjs.tap(() => {
|
|
25674
|
+
setStatusView(core.StatusView.Running);
|
|
25675
|
+
if (ocrEngineConfig.expiredIn && !sdkFlowTimeout) {
|
|
25676
|
+
sdkFlowTimeout = makeSDKFlowTimeout(ocrEngineConfig.expiredIn);
|
|
25677
|
+
}
|
|
25678
|
+
}), rxjs.switchMap(() => {
|
|
25679
|
+
return new rxjs.Observable(observer => {
|
|
25680
|
+
const captureBtn = captureButton();
|
|
25681
|
+
if (captureBtn) {
|
|
25682
|
+
util.showElement(captureBtn);
|
|
25683
|
+
}
|
|
25684
|
+
const interval$ = rxjs.interval(400);
|
|
25685
|
+
const checkTimeout = interval$.pipe(operators.takeWhile(() => !thicknessTimer.end()),
|
|
25686
|
+
// 當 end() 函數返回 false 時繼續
|
|
25687
|
+
operators.finalize(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
25688
|
+
if (thicknessTimer.end()) {
|
|
25689
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25690
|
+
const sizeInfo = yield util.getCanvasSize(video);
|
|
25691
|
+
videoToCanvas(sizeInfo);
|
|
25692
|
+
if (config.confirmThickness) {
|
|
25693
|
+
yield config.confirmThickness(generateImage(), cardType);
|
|
25694
|
+
}
|
|
25695
|
+
util.hideElement(captureBtn);
|
|
25696
|
+
checkTimeout.unsubscribe();
|
|
25697
|
+
observer.next(sizeInfo);
|
|
25698
|
+
}
|
|
25699
|
+
}))).subscribe(() => {
|
|
25700
|
+
// 在每次 interval 發出值時執行的操作
|
|
25701
|
+
});
|
|
25702
|
+
rxjs.fromEvent(captureBtn, 'click').pipe(rxjs.switchMap(() => util.getCanvasSize(video)), rxjs.switchMap(canvasSizeInfo => {
|
|
25703
|
+
return rxjs.from(checkConfirmImageManual(canvasSizeInfo)).pipe(rxjs.switchMap(needRetry => {
|
|
25704
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'), true);
|
|
25705
|
+
return needRetry ? rxjs.of(true) : rxjs.from(config.confirmThickness ? config.confirmThickness(generateImage(), cardType) : rxjs.of(false)).pipe(rxjs.tap(() => sendStatusAction$1(core.StatusAction.Uploading)), rxjs.map(confirmResp => !confirmResp));
|
|
25706
|
+
}), rxjs.tap(confirmResp => {
|
|
25707
|
+
util.hideElement(confirmImageContainer);
|
|
25708
|
+
util.stopSpinner();
|
|
25709
|
+
showVideoElement(true);
|
|
25710
|
+
if (!confirmResp) {
|
|
25711
|
+
checkTimeout.unsubscribe(); // 取消 interval$ 的訂閱
|
|
25712
|
+
util.hideElement(captureBtn);
|
|
25713
|
+
observer.next(canvasSizeInfo);
|
|
25714
|
+
}
|
|
25715
|
+
}));
|
|
25716
|
+
}), rxjs.map(confirmResp => {
|
|
25717
|
+
rxjs.of(confirmResp);
|
|
25718
|
+
})).subscribe();
|
|
25719
|
+
});
|
|
25720
|
+
}));
|
|
25721
|
+
const thicknessTimer = countdownTimer(60); // TODO default 60 need get from server
|
|
25722
|
+
let thicknessMode = cardTypeConfig.mode;
|
|
25723
|
+
const point = getCardBorderPoint();
|
|
25724
|
+
setCardPoints(point.map(([x, y]) => ({
|
|
25725
|
+
x,
|
|
25726
|
+
y
|
|
25727
|
+
})), false);
|
|
25728
|
+
setCardBorderColor(null);
|
|
25729
|
+
setHintTextLocale();
|
|
25730
|
+
if (thicknessMode === 'auto') {
|
|
25731
|
+
return autoDetectProcess(false);
|
|
25732
|
+
} else {
|
|
25733
|
+
return manualProcess();
|
|
25734
|
+
}
|
|
25735
|
+
};
|
|
25736
|
+
|
|
25070
25737
|
const initEvenTrackingStatus = ocrConfig => {
|
|
25071
25738
|
setFeature$1(ocrConfig.needAntiFraud ? core.Feature.OCRFraud : core.Feature.OCR);
|
|
25072
25739
|
};
|
|
@@ -25131,6 +25798,7 @@ function startOCR(config) {
|
|
|
25131
25798
|
lottieMask,
|
|
25132
25799
|
arrowAnimationContainer,
|
|
25133
25800
|
scanAnimationContainer,
|
|
25801
|
+
successAnimationDom,
|
|
25134
25802
|
antiFraudInstructionAnimationContainer,
|
|
25135
25803
|
confirmImageContainer,
|
|
25136
25804
|
imageTypeText,
|
|
@@ -25146,7 +25814,11 @@ function startOCR(config) {
|
|
|
25146
25814
|
const cardPoints = getCardBorderPoint();
|
|
25147
25815
|
const {
|
|
25148
25816
|
setCardPoints,
|
|
25149
|
-
setCardBorderColor
|
|
25817
|
+
setCardBorderColor,
|
|
25818
|
+
setBorderType,
|
|
25819
|
+
frameImage,
|
|
25820
|
+
frameText,
|
|
25821
|
+
setBorderSuccess
|
|
25150
25822
|
} = renderOCRMask({
|
|
25151
25823
|
cardPoints: cardPoints.map(point => ({
|
|
25152
25824
|
x: point[0],
|
|
@@ -25175,9 +25847,18 @@ function startOCR(config) {
|
|
|
25175
25847
|
// fromEvent(window, 'resize').pipe(switchMapTo(getCanvasSize(video)))
|
|
25176
25848
|
);
|
|
25177
25849
|
|
|
25850
|
+
const currentType = (() => {
|
|
25851
|
+
const data = {};
|
|
25852
|
+
return (method, obj) => {
|
|
25853
|
+
if (method === 'set') {
|
|
25854
|
+
Object.assign(data, obj);
|
|
25855
|
+
}
|
|
25856
|
+
return data;
|
|
25857
|
+
};
|
|
25858
|
+
})();
|
|
25178
25859
|
function makeSDKFlowTimeout(expiredIn) {
|
|
25179
25860
|
return setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
25180
|
-
util.asyncShowErrorMessage(translateService.translate('
|
|
25861
|
+
util.asyncShowErrorMessage(translateService.translate('sdk.general.error.timeout.content'), false);
|
|
25181
25862
|
yield util.waitTime(3 * util.TIME_UNIT.SECOND);
|
|
25182
25863
|
timeout$.next({
|
|
25183
25864
|
isSuccess: false,
|
|
@@ -25201,7 +25882,7 @@ function startOCR(config) {
|
|
|
25201
25882
|
statusText.classList.add('non-empty');
|
|
25202
25883
|
switch (result.eStatus) {
|
|
25203
25884
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.PositionNotMatch:
|
|
25204
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25885
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25205
25886
|
sendStatusDescription$1(core.StatusDescription.PositionNotMatch);
|
|
25206
25887
|
setCardBorderColor('error');
|
|
25207
25888
|
break;
|
|
@@ -25218,22 +25899,22 @@ function startOCR(config) {
|
|
|
25218
25899
|
setCardBorderColor('pass');
|
|
25219
25900
|
break;
|
|
25220
25901
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NoCard:
|
|
25221
|
-
statusText.textContent = translateService.translate('verify.error.noCard');
|
|
25902
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25222
25903
|
sendStatusDescription$1(core.StatusDescription.NoCard);
|
|
25223
25904
|
setCardBorderColor('error');
|
|
25224
25905
|
break;
|
|
25225
25906
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.WrongCardType:
|
|
25226
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
25907
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25227
25908
|
sendStatusDescription$1(core.StatusDescription.WrongCardType);
|
|
25228
25909
|
setCardBorderColor('error');
|
|
25229
25910
|
break;
|
|
25230
25911
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.Reflective:
|
|
25231
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
25912
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25232
25913
|
sendStatusDescription$1(core.StatusDescription.Reflective);
|
|
25233
25914
|
setCardBorderColor('error');
|
|
25234
25915
|
break;
|
|
25235
25916
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.Blur:
|
|
25236
|
-
statusText.textContent = translateService.translate('verify.error.blur');
|
|
25917
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25237
25918
|
blurCount++;
|
|
25238
25919
|
sendStatusDescription$1(core.StatusDescription.Blur);
|
|
25239
25920
|
setCardBorderColor('error');
|
|
@@ -25245,55 +25926,55 @@ function startOCR(config) {
|
|
|
25245
25926
|
setCardBorderColor('error');
|
|
25246
25927
|
break;
|
|
25247
25928
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.Error:
|
|
25248
|
-
statusText.textContent = translateService.translate('
|
|
25249
|
-
util.showErrorMessage(translateService.translate('
|
|
25929
|
+
statusText.textContent = translateService.translate('sdk.general.error.alert.serverError');
|
|
25930
|
+
util.showErrorMessage(translateService.translate('sdk.general.error.alert.serverError'), true);
|
|
25250
25931
|
sendStatusDescription$1(core.StatusDescription.Error);
|
|
25251
25932
|
break;
|
|
25252
25933
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationFrontal:
|
|
25253
25934
|
needDeformationCount++;
|
|
25254
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25935
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25255
25936
|
break;
|
|
25256
25937
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationLeft:
|
|
25257
25938
|
needDeformationCount++;
|
|
25258
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25939
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25259
25940
|
break;
|
|
25260
25941
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationRight:
|
|
25261
25942
|
needDeformationCount++;
|
|
25262
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25943
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25263
25944
|
break;
|
|
25264
25945
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationUp:
|
|
25265
25946
|
needDeformationCount++;
|
|
25266
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25947
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25267
25948
|
break;
|
|
25268
25949
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedDeformationDown:
|
|
25269
25950
|
needDeformationCount++;
|
|
25270
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25951
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needDeformationFrontal');
|
|
25271
25952
|
break;
|
|
25272
25953
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardCutByCamera:
|
|
25273
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25954
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.cardCutByCamera');
|
|
25274
25955
|
break;
|
|
25275
25956
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardNotInROI:
|
|
25276
25957
|
statusText.textContent = translateService.translate('verify.error.CardNotInROI');
|
|
25277
25958
|
break;
|
|
25278
25959
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.CardTooSmall:
|
|
25279
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25960
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.getCloser');
|
|
25280
25961
|
break;
|
|
25281
25962
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.NeedHoldCard:
|
|
25282
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25963
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.needHoldCard');
|
|
25283
25964
|
break;
|
|
25284
25965
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.StagePass:
|
|
25285
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25966
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.stagePass');
|
|
25286
25967
|
stopAnimate();
|
|
25287
25968
|
previosAntiFraudAnimateTime = Date.now();
|
|
25288
25969
|
setCardBorderColor('pass');
|
|
25289
25970
|
break;
|
|
25290
25971
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.Pass:
|
|
25291
25972
|
setCardBorderColor('pass');
|
|
25292
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25973
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25293
25974
|
break;
|
|
25294
25975
|
case idRecognition.EAuthMeIDCardAntiFraudStatus.Failed:
|
|
25295
25976
|
setCardBorderColor('pass');
|
|
25296
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
25977
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.pass');
|
|
25297
25978
|
break;
|
|
25298
25979
|
default:
|
|
25299
25980
|
emptyStatusText();
|
|
@@ -25314,7 +25995,7 @@ function startOCR(config) {
|
|
|
25314
25995
|
statusText.classList.remove('non-empty');
|
|
25315
25996
|
}
|
|
25316
25997
|
};
|
|
25317
|
-
const antiFraudStart$ = rxjs.of(true).pipe(rxjs.switchMap(() => util.checkOnlineStatus(translateService.translate('
|
|
25998
|
+
const antiFraudStart$ = rxjs.of(true).pipe(rxjs.switchMap(() => util.checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), rxjs.switchMap(() => canvasSizeInfo$), rxjs.switchMap(canvasSizeInfo => rxjs.from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(rxjs.switchMap(() => config.antiFraudStart(getCardBorderPoint(), setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode)), rxjs.tap(() => __awaiter(this, void 0, void 0, function* () {
|
|
25318
25999
|
setStatusView(core.StatusView.Aligning);
|
|
25319
26000
|
if (buttonDisable$) {
|
|
25320
26001
|
const cardMatchROI = config.getCardMatchROI ? yield config.getCardMatchROI() : undefined;
|
|
@@ -25375,57 +26056,57 @@ function startOCR(config) {
|
|
|
25375
26056
|
if (!config.ocrConfig.needOCR && type === idRecognition.EAuthMeCardClass.TWN_IDCard_Front) {
|
|
25376
26057
|
return rxjs.of(true);
|
|
25377
26058
|
}
|
|
25378
|
-
if (config.ocrConfig.needAntiFraud) {
|
|
25379
|
-
|
|
25380
|
-
|
|
25381
|
-
|
|
25382
|
-
|
|
25383
|
-
|
|
25384
|
-
|
|
25385
|
-
}
|
|
26059
|
+
// if (config.ocrConfig.needAntiFraud) {
|
|
26060
|
+
const point = getCardBorderPoint();
|
|
26061
|
+
setCardPoints(point.map(([x, y]) => ({
|
|
26062
|
+
x,
|
|
26063
|
+
y
|
|
26064
|
+
})), config.ocrConfig.needAntiFraud);
|
|
26065
|
+
setHintTextLocale();
|
|
26066
|
+
// }
|
|
25386
26067
|
const applyTextByResult = result => {
|
|
25387
26068
|
statusText.classList.add('non-empty');
|
|
25388
26069
|
switch (result.eStatus) {
|
|
25389
26070
|
case idRecognition.EAuthMeCardOCRStatus.NoCard:
|
|
25390
26071
|
case idRecognition.EAuthMeMRZServiceStatus.NotFound:
|
|
25391
|
-
statusText.textContent = translateService.translate('verify.error.noCard');
|
|
26072
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.noCard');
|
|
25392
26073
|
sendStatusDescription$1(core.StatusDescription.NoCard);
|
|
25393
26074
|
setCardBorderColor('error');
|
|
25394
26075
|
break;
|
|
25395
26076
|
case idRecognition.EAuthMeCardOCRStatus.WrongCardType:
|
|
25396
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
26077
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25397
26078
|
sendStatusDescription$1(core.StatusDescription.WrongCardType);
|
|
25398
26079
|
setCardBorderColor('error');
|
|
25399
26080
|
break;
|
|
25400
26081
|
case idRecognition.EAuthMeCardOCRStatus.PositionNotMatch:
|
|
25401
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
26082
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25402
26083
|
sendStatusDescription$1(core.StatusDescription.PositionNotMatch);
|
|
25403
26084
|
setCardBorderColor('error');
|
|
25404
26085
|
break;
|
|
25405
26086
|
case idRecognition.EAuthMeCardOCRStatus.Reflective:
|
|
25406
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
26087
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25407
26088
|
sendStatusDescription$1(core.StatusDescription.Reflective);
|
|
25408
26089
|
setCardBorderColor('error');
|
|
25409
26090
|
break;
|
|
25410
26091
|
case idRecognition.EAuthMeCardOCRStatus.Blur:
|
|
25411
|
-
statusText.textContent = translateService.translate('verify.error.blur');
|
|
26092
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.blur');
|
|
25412
26093
|
sendStatusDescription$1(core.StatusDescription.Blur);
|
|
25413
26094
|
setCardBorderColor('error');
|
|
25414
26095
|
blurCount++;
|
|
25415
26096
|
break;
|
|
25416
26097
|
case idRecognition.EAuthMeMRZServiceStatus.RecogFailed:
|
|
25417
26098
|
case idRecognition.EAuthMeMRZServiceStatus.WrongCardType:
|
|
25418
|
-
statusText.textContent = translateService.translate('verify.error.wrongCardType');
|
|
26099
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.wrongCardType');
|
|
25419
26100
|
sendStatusDescription$1(core.StatusDescription.WrongCardType);
|
|
25420
26101
|
setCardBorderColor('error');
|
|
25421
26102
|
break;
|
|
25422
26103
|
case idRecognition.EAuthMeMRZServiceStatus.NotAligned:
|
|
25423
|
-
statusText.textContent = translateService.translate('verify.error.
|
|
26104
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.missmatch');
|
|
25424
26105
|
sendStatusDescription$1(core.StatusDescription.NotAligned);
|
|
25425
26106
|
setCardBorderColor('error');
|
|
25426
26107
|
break;
|
|
25427
26108
|
case idRecognition.EAuthMeMRZServiceStatus.Reflective:
|
|
25428
|
-
statusText.textContent = translateService.translate('verify.error.reflective');
|
|
26109
|
+
statusText.textContent = translateService.translate('sdk.general.verify.error.reflective');
|
|
25429
26110
|
sendStatusDescription$1(core.StatusDescription.Reflective);
|
|
25430
26111
|
setCardBorderColor('error');
|
|
25431
26112
|
break;
|
|
@@ -25434,7 +26115,8 @@ function startOCR(config) {
|
|
|
25434
26115
|
showCameraSwitchButton(deviceMetas);
|
|
25435
26116
|
}
|
|
25436
26117
|
};
|
|
25437
|
-
const init = retry => canvasSizeInfo$.pipe(rxjs.take(1), rxjs.switchMap(canvasSizeInfo => rxjs.from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(rxjs.switchMap(() => util.checkOnlineStatus(translateService.translate('
|
|
26118
|
+
const init = retry => canvasSizeInfo$.pipe(rxjs.take(1), rxjs.switchMap(canvasSizeInfo => rxjs.from(config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(rxjs.switchMap(() => util.checkOnlineStatus(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'))), rxjs.switchMap(() => config.ocrStart(getCardBorderPoint(), type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode, cardType, retry)), rxjs.tap(() => {
|
|
26119
|
+
tiltFrame(false);
|
|
25438
26120
|
util.stopSpinner();
|
|
25439
26121
|
util.showElement(scanAnimationContainer);
|
|
25440
26122
|
scanAnimationContainer.style.width = `${cardSizeInfo.width + scanPadding}px`;
|
|
@@ -25462,7 +26144,7 @@ function startOCR(config) {
|
|
|
25462
26144
|
// }),
|
|
25463
26145
|
rxjs.take(1), rxjs.tap(() => {
|
|
25464
26146
|
setCardBorderColor('pass');
|
|
25465
|
-
statusText.textContent = translateService.translate('verify.
|
|
26147
|
+
statusText.textContent = translateService.translate('sdk.general.verify.success');
|
|
25466
26148
|
lottie__default["default"].stop('scan');
|
|
25467
26149
|
util.hideElement(scanAnimationContainer);
|
|
25468
26150
|
}), rxjs.switchMap(resp => rxjs.of(true).pipe(rxjs.tap(() => {
|
|
@@ -25470,23 +26152,60 @@ function startOCR(config) {
|
|
|
25470
26152
|
}), rxjs.map(() => resp))), rxjs.switchMap(({
|
|
25471
26153
|
result
|
|
25472
26154
|
}) => rxjs.from(type === idRecognition.EAuthMeCardClass.Passport && config.ocrConfig.disablePassportConfirm ? rxjs.of(false) : checkConfirmImage(result.imageData, result.iWidth, result.iHeight)).pipe(rxjs.switchMap(needRetry => {
|
|
25473
|
-
util.startSpinner(translateService.translate('
|
|
26155
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'));
|
|
25474
26156
|
return needRetry ? rxjs.of(true) : rxjs.from(config.confirmImage(type, cardType)).pipe(rxjs.tap(() => sendStatusAction$1(core.StatusAction.Uploading)), rxjs.map(confirmResp => !confirmResp));
|
|
25475
26157
|
}), rxjs.tap(() => {
|
|
25476
26158
|
util.hideElement(confirmImageContainer);
|
|
26159
|
+
util.stopSpinner();
|
|
25477
26160
|
showVideoElement();
|
|
25478
26161
|
}), rxjs.switchMap(needRetry => needRetry ? recognition(true) : rxjs.of(true)))))));
|
|
25479
26162
|
return recognition(false);
|
|
25480
26163
|
}
|
|
25481
|
-
function createFlowByType(type, cardType) {
|
|
26164
|
+
function createFlowByType(type, cardType, cardTypeConfig) {
|
|
25482
26165
|
return rxjs.of(true).pipe(rxjs.tap(() => {
|
|
26166
|
+
currentType('set', {
|
|
26167
|
+
type,
|
|
26168
|
+
cardType
|
|
26169
|
+
});
|
|
25483
26170
|
setStatusEvent$1(cardClassMapping(type));
|
|
25484
26171
|
setUIByType(type, cardType);
|
|
25485
|
-
}), rxjs.switchMap(() =>
|
|
25486
|
-
|
|
25487
|
-
|
|
25488
|
-
|
|
26172
|
+
}), rxjs.switchMap(() => {
|
|
26173
|
+
if (type === idRecognition.EAuthMeCardClass.TWN_IDCard_Front && config.ocrConfig.needAntiFraud) {
|
|
26174
|
+
return rxjs.from(startAntiFraud(type)).pipe(rxjs.switchMap(() => {
|
|
26175
|
+
hideFrameUI(false);
|
|
26176
|
+
return startOCR(type, cardType);
|
|
26177
|
+
}));
|
|
26178
|
+
} else if (cardType.toLocaleLowerCase().includes('thickness')) {
|
|
26179
|
+
hideCameraSwitchButton();
|
|
26180
|
+
return startThickness(type, cardType, cardTypeConfig, setHintTextLocale, setCardPoints, setCardBorderColor, statusText, canvasSizeInfo$, showVideoElement, {
|
|
26181
|
+
getCardMatchROI: config.getCardMatchROI,
|
|
26182
|
+
setFrameSize: config.setFrameSize,
|
|
26183
|
+
thicknessStart: config.thicknessStart,
|
|
26184
|
+
onThicknessFrame: config.onThicknessFrame,
|
|
26185
|
+
confirmThickness: config.confirmThickness
|
|
26186
|
+
}, cardRotateByStage, getCardBorderPoint, setBorderType, setBorderSuccess, scanAnimationContainer, successAnimationDom, frameImage, frameText, facingMode, ocrEngineConfig, sdkFlowTimeout, makeSDKFlowTimeout, image, video, retryBtn, completeBtn, confirmImageContainer);
|
|
26187
|
+
} else if (cardType.toLocaleLowerCase().includes('front')) {
|
|
26188
|
+
hideFrameUI(false);
|
|
26189
|
+
return startOCR(type, cardType);
|
|
26190
|
+
} else if (cardType.toLocaleLowerCase().includes('back')) {
|
|
26191
|
+
hideFrameUI(false);
|
|
26192
|
+
return startOCR(type, cardType);
|
|
26193
|
+
} else if (cardType.toLocaleLowerCase().includes('passport')) {
|
|
26194
|
+
hideFrameUI(false);
|
|
26195
|
+
return startOCR(type, cardType);
|
|
26196
|
+
} else {
|
|
26197
|
+
console.error('unknow flow');
|
|
26198
|
+
return rxjs.of(false);
|
|
26199
|
+
}
|
|
26200
|
+
})
|
|
26201
|
+
// tap(() => {
|
|
26202
|
+
// setStatusEvent(cardClassMapping(type));
|
|
26203
|
+
// setUIByType(type, cardType);
|
|
26204
|
+
// }),
|
|
26205
|
+
// switchMap(() => startOCR(type, cardType)),
|
|
26206
|
+
);
|
|
25489
26207
|
}
|
|
26208
|
+
|
|
25490
26209
|
function main() {
|
|
25491
26210
|
const flags = {
|
|
25492
26211
|
onConfirm: false
|
|
@@ -25498,9 +26217,9 @@ function startOCR(config) {
|
|
|
25498
26217
|
} = showAntiFraudLottie();
|
|
25499
26218
|
buttonDisable$ = buttonDisable;
|
|
25500
26219
|
} else {
|
|
25501
|
-
util.startSpinner(translateService.translate('general.loading'));
|
|
26220
|
+
util.startSpinner(translateService.translate('sdk.general.loading'));
|
|
25502
26221
|
}
|
|
25503
|
-
const flow$ = config.cardTypes.map(x => createFlowByType(idRecognition.mapCardtypeToAuthmeClass(x), x)).reduce((prev, cur) => prev.pipe(rxjs.switchMap(() => cur)), canvasSizeInfo$.pipe(rxjs.take(1), rxjs.tap(() => {
|
|
26222
|
+
const flow$ = config.cardTypes.map((x, index) => createFlowByType(idRecognition.mapCardtypeToAuthmeClass(x), x, config.cardTypeConfigs[index])).reduce((prev, cur) => prev.pipe(rxjs.switchMap(() => cur)), canvasSizeInfo$.pipe(rxjs.take(1), rxjs.tap(() => {
|
|
25504
26223
|
setUIByType(idRecognition.mapCardtypeToAuthmeClass(config.cardTypes[0]), config.cardTypes[0]);
|
|
25505
26224
|
}), rxjs.switchMap(canvasSizeInfo => rxjs.from(config.init(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight)).pipe(rxjs.tap(x => ocrEngineConfig = x), rxjs.tap(() => __awaiter(this, void 0, void 0, function* () {
|
|
25506
26225
|
if (config.ocrConfig.needAntiFraud) return;
|
|
@@ -25508,7 +26227,7 @@ function startOCR(config) {
|
|
|
25508
26227
|
})), rxjs.tap(() => eventListenerService$1.start()))))).pipe(rxjs.tap(() => {
|
|
25509
26228
|
sendStatusAction$1(core.StatusAction.Uploading);
|
|
25510
26229
|
util.hideElement(videoContainer);
|
|
25511
|
-
util.startSpinner(translateService.translate('
|
|
26230
|
+
util.startSpinner(translateService.translate('sdk.general.uploading'));
|
|
25512
26231
|
}), rxjs.switchMap(() => config.onSuccess()), rxjs.tap(() => {
|
|
25513
26232
|
setStatusEvent$1(cardClassResultMapping(config.acceptTypes[config.acceptTypes.length - 1]));
|
|
25514
26233
|
util.stopSpinner();
|
|
@@ -25548,20 +26267,28 @@ function startOCR(config) {
|
|
|
25548
26267
|
util.stopSpinner();
|
|
25549
26268
|
reset();
|
|
25550
26269
|
}));
|
|
25551
|
-
const cancel$ = rxjs.fromEvent(closeIcon, 'click').pipe(rxjs.
|
|
25552
|
-
|
|
25553
|
-
|
|
25554
|
-
|
|
26270
|
+
const cancel$ = rxjs.fromEvent(closeIcon, 'click').pipe(rxjs.switchMap(() => util.getCanvasSize(video)), rxjs.concatMap(canvasSizeInfo => {
|
|
26271
|
+
const type = currentType('get', null).type;
|
|
26272
|
+
const cardType = currentType('get', null).cardType;
|
|
26273
|
+
const ctx = image.getContext('2d');
|
|
26274
|
+
const imageData = util.getImageData(image, ctx, video, canvasSizeInfo, false, 'jpg');
|
|
26275
|
+
const imageBlob = util.UintArrayToBlob(canvasSizeInfo.width, canvasSizeInfo.height, imageData.data);
|
|
26276
|
+
const cancelResultObj = {
|
|
25555
26277
|
isSuccess: false,
|
|
25556
26278
|
code: `${core.ErrorCode.USER_CANCEL}`,
|
|
25557
26279
|
message: new core.AuthmeError(core.ErrorCode.USER_CANCEL).message,
|
|
25558
26280
|
data: {}
|
|
25559
26281
|
};
|
|
25560
|
-
|
|
26282
|
+
const cancelResult = config.ocrCancel ? rxjs.from(config.ocrCancel(type, cardType, imageBlob)).pipe(rxjs.map(() => cancelResultObj)) : rxjs.of(cancelResultObj);
|
|
26283
|
+
return cancelResult;
|
|
26284
|
+
}), rxjs.takeUntil(unsubscribe$), rxjs.finalize(() => {
|
|
26285
|
+
document.body.removeChild(container);
|
|
26286
|
+
sendStatusAction$1(core.StatusAction.BtnClose);
|
|
26287
|
+
}));
|
|
25561
26288
|
const detectScreenResizeError$ = handleScreenResizeError$(detectScreenResize$(), unsubscribe$, () => !flags.onConfirm);
|
|
25562
26289
|
return rxjs.merge(flow$, cancel$, detectScreenResizeError$, timeout$).pipe(rxjs.take(1));
|
|
25563
26290
|
}
|
|
25564
|
-
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('
|
|
26291
|
+
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
25565
26292
|
// resize
|
|
25566
26293
|
rxjs.fromEvent(window, 'resize').pipe(rxjs.switchMapTo(util.getCanvasSize(video)), rxjs.switchMap(canvasSizeInfo => config.setFrameSize(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight, getCardBorderPoint())), rxjs.tap(() => {
|
|
25567
26294
|
scanAnimationContainer.style.width = `${cardSizeInfo.width + scanPadding}px`;
|
|
@@ -25573,7 +26300,7 @@ function startOCR(config) {
|
|
|
25573
26300
|
showVideoElement(false);
|
|
25574
26301
|
util.showElement(antiFraudInstructionContainer);
|
|
25575
26302
|
util.showElement(lottieMask);
|
|
25576
|
-
setHeaderText(translateService.translate('verify.idCard'), translateService.translate('verify.header.
|
|
26303
|
+
setHeaderText(translateService.translate('verify.idCard'), translateService.translate('sdk.verify.header.stepper', {
|
|
25577
26304
|
current: 1,
|
|
25578
26305
|
total: 3
|
|
25579
26306
|
}));
|
|
@@ -25610,11 +26337,11 @@ function startOCR(config) {
|
|
|
25610
26337
|
function countdownTimer(countdown) {
|
|
25611
26338
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25612
26339
|
if (countdown <= 0 && !isTutorialFinish) {
|
|
25613
|
-
confirmBtn.innerText = translateService.translate('verify.
|
|
26340
|
+
confirmBtn.innerText = translateService.translate('sdk.guard.verify.guide.start');
|
|
25614
26341
|
yield finishTutorial(point);
|
|
25615
26342
|
return;
|
|
25616
26343
|
}
|
|
25617
|
-
confirmBtn.innerText = `${translateService.translate('verify.
|
|
26344
|
+
confirmBtn.innerText = `${translateService.translate('sdk.guard.verify.guide.start')} (${countdown})`;
|
|
25618
26345
|
setTimeout(() => {
|
|
25619
26346
|
countdownTimer(countdown - 1);
|
|
25620
26347
|
}, util.TIME_UNIT.SECOND);
|
|
@@ -25643,6 +26370,35 @@ function startOCR(config) {
|
|
|
25643
26370
|
return yield rxjs.firstValueFrom(allEvents$.pipe());
|
|
25644
26371
|
});
|
|
25645
26372
|
}
|
|
26373
|
+
function hideFrameUI(flag) {
|
|
26374
|
+
const frameImageDom = document.querySelector('#authme_frame_image');
|
|
26375
|
+
const frameTextDom = document.querySelector('#authme_frame_text');
|
|
26376
|
+
if (frameImageDom) {
|
|
26377
|
+
if (flag) {
|
|
26378
|
+
util.hideElement(frameImageDom);
|
|
26379
|
+
} else {
|
|
26380
|
+
util.showElement(frameImageDom);
|
|
26381
|
+
}
|
|
26382
|
+
}
|
|
26383
|
+
if (frameTextDom) {
|
|
26384
|
+
if (flag) {
|
|
26385
|
+
util.hideElement(frameTextDom);
|
|
26386
|
+
} else {
|
|
26387
|
+
util.showElement(frameTextDom);
|
|
26388
|
+
}
|
|
26389
|
+
}
|
|
26390
|
+
}
|
|
26391
|
+
// function tiltFrame(isTilt: boolean) {
|
|
26392
|
+
// if (isTilt) {
|
|
26393
|
+
// videoContainer.classList.add('container-tilt');
|
|
26394
|
+
// document.querySelector('#authme_frame_border')?.classList.add('svg-tilt');
|
|
26395
|
+
// document.querySelector('#authme_frame_image')?.classList.add('svg-tilt');
|
|
26396
|
+
// } else {
|
|
26397
|
+
// videoContainer.classList.remove('container-tilt');
|
|
26398
|
+
// document.querySelector('#authme_frame_border')?.classList.remove('svg-tilt');
|
|
26399
|
+
// document.querySelector('#authme_frame_image')?.classList.remove('svg-tilt');
|
|
26400
|
+
// }
|
|
26401
|
+
// }
|
|
25646
26402
|
function setTopText(title) {
|
|
25647
26403
|
titleText.textContent = title;
|
|
25648
26404
|
}
|
|
@@ -25654,16 +26410,18 @@ function startOCR(config) {
|
|
|
25654
26410
|
function setTextByType(type, cardType) {
|
|
25655
26411
|
var _a, _b, _c;
|
|
25656
26412
|
const _typeMap = {
|
|
25657
|
-
EAuthMeCardClass_Passport: 'verify.passportFrontSide',
|
|
25658
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.idCardFrontSide',
|
|
25659
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.idCardBackSide',
|
|
25660
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.
|
|
25661
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.
|
|
25662
|
-
EAuthMeCardClass_TWN_ResidentCard_Front: 'verify.residentCardFrontSide',
|
|
25663
|
-
EAuthMeCardClass_TWN_ResidentCard_Back: 'verify.residentCardBackSide',
|
|
25664
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.
|
|
26413
|
+
EAuthMeCardClass_Passport: 'sdk.ocr.verify.passportFrontSide',
|
|
26414
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.ocr.verify.idCardFrontSide',
|
|
26415
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.ocr.verify.idCardBackSide',
|
|
26416
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.ocr.verify.driverFrontSide',
|
|
26417
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.ocr.verify.driverBackSide',
|
|
26418
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.ocr.verify.residentCardFrontSide',
|
|
26419
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.ocr.verify.residentCardBackSide',
|
|
26420
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.ocr.verify.healthCardFrontSide',
|
|
25665
26421
|
EAuthMeCardClass_TWN_VehiclesLicense_Front: 'verify.vehiclesLicenseFrontSide'
|
|
26422
|
+
// EAuthMeCardClass_TWN_IDCard_Thickness: 'verify.idCardThickness',
|
|
25666
26423
|
};
|
|
26424
|
+
|
|
25667
26425
|
const typeMap = _typeMap;
|
|
25668
26426
|
let titleKey = typeMap[`${type}`];
|
|
25669
26427
|
if (typeMap[`${type}`] == null) {
|
|
@@ -25673,18 +26431,20 @@ function startOCR(config) {
|
|
|
25673
26431
|
titleText.textContent = translateService.translate(titleKey !== null && titleKey !== void 0 ? titleKey : 'verify.unexpected');
|
|
25674
26432
|
statusText.textContent = '';
|
|
25675
26433
|
statusText.classList.remove('non-empty');
|
|
25676
|
-
hintText.textContent = type.includes('Back') ? translateService.translate('
|
|
26434
|
+
hintText.textContent = type.includes('Back') ? translateService.translate('sdk.general.backSide') : translateService.translate('sdk.general.frontSide');
|
|
25677
26435
|
const _typeConfirmTextMap = {
|
|
25678
|
-
EAuthMeCardClass_Passport: 'verify.
|
|
25679
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.confirmIdCardFront',
|
|
25680
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.confirmIdCardBack',
|
|
25681
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.
|
|
25682
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.
|
|
25683
|
-
EAuthMeCardClass_TWN_ResidentCard_Front: 'verify.
|
|
25684
|
-
EAuthMeCardClass_TWN_ResidentCard_Back: 'verify.
|
|
25685
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.
|
|
26436
|
+
EAuthMeCardClass_Passport: 'sdk.ocr.verify.confirmPassportFront',
|
|
26437
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.ocr.verify.confirmIdCardFront',
|
|
26438
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.ocr.verify.confirmIdCardBack',
|
|
26439
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.ocr.verify.confirmDriverFront',
|
|
26440
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.ocr.verify.confirmDriverBack',
|
|
26441
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.ocr.verify.confirmResidentCardFront',
|
|
26442
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.ocr.verify.confirmResidentCardBack',
|
|
26443
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.ocr.verify.confirmHealthCardFront',
|
|
25686
26444
|
EAuthMeCardClass_TWN_VehiclesLicense_Front: 'verify.confirmVehiclesLicenseFrontSide'
|
|
26445
|
+
// EAuthMeCardClass_TWN_IDCard_Thickness: 'verify.confirmIdCardThickness',
|
|
25687
26446
|
};
|
|
26447
|
+
|
|
25688
26448
|
const typeConfirmTextMap = _typeConfirmTextMap;
|
|
25689
26449
|
let titleConfirmKey = typeConfirmTextMap[type];
|
|
25690
26450
|
if (titleConfirmKey == null) {
|
|
@@ -25694,33 +26454,38 @@ function startOCR(config) {
|
|
|
25694
26454
|
}
|
|
25695
26455
|
function setHeaderByType(type) {
|
|
25696
26456
|
const typeMap = {
|
|
25697
|
-
EAuthMeCardClass_Passport: 'verify.header
|
|
25698
|
-
EAuthMeCardClass_TWN_IDCard_Front: 'verify.header
|
|
25699
|
-
EAuthMeCardClass_TWN_IDCard_Back: 'verify.header
|
|
25700
|
-
EAuthMeCardClass_TWN_DriverLicense_Front: 'verify.header
|
|
25701
|
-
EAuthMeCardClass_TWN_DriverLicense_Back: 'verify.header
|
|
25702
|
-
EAuthMeCardClass_TWN_HealthCard_Front: 'verify.header
|
|
26457
|
+
EAuthMeCardClass_Passport: 'sdk.verify.passport.header',
|
|
26458
|
+
EAuthMeCardClass_TWN_IDCard_Front: 'sdk.verify.idCard.header',
|
|
26459
|
+
EAuthMeCardClass_TWN_IDCard_Back: 'sdk.verify.idCard.header',
|
|
26460
|
+
EAuthMeCardClass_TWN_DriverLicense_Front: 'sdk.verify.driverLicense.header',
|
|
26461
|
+
EAuthMeCardClass_TWN_DriverLicense_Back: 'sdk.verify.driverLicense.header',
|
|
26462
|
+
EAuthMeCardClass_TWN_HealthCard_Front: 'sdk.verify.healthCard.header',
|
|
26463
|
+
EAuthMeCardClass_JPN_IDCard_Front: 'sdk.verify.myNumberCard.header',
|
|
26464
|
+
EAuthMeCardClass_JPN_IDCard_Back: 'sdk.verify.myNumberCard.header',
|
|
26465
|
+
EAuthMeCardClass_JPN_IDCard_Thickness: 'sdk.verify.myNumberCard.header',
|
|
26466
|
+
EAuthMeCardClass_TWN_ResidentCard_Front: 'sdk.verify.residentCard.header',
|
|
26467
|
+
EAuthMeCardClass_TWN_ResidentCard_Back: 'sdk.verify.residentCard.header'
|
|
25703
26468
|
};
|
|
25704
26469
|
if (type.includes('Health') || type.includes('Passport')) {
|
|
25705
|
-
setHeaderText(translateService.translate(typeMap[type]), translateService.translate('verify.header.
|
|
26470
|
+
setHeaderText(translateService.translate(typeMap[type]), translateService.translate('sdk.verify.header.stepper', {
|
|
25706
26471
|
current: 1,
|
|
25707
26472
|
total: 1
|
|
25708
26473
|
}));
|
|
25709
26474
|
} else {
|
|
25710
26475
|
if (type.includes('Front')) {
|
|
25711
|
-
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('verify.header.
|
|
26476
|
+
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('sdk.verify.header.stepper', {
|
|
25712
26477
|
current: 2,
|
|
25713
26478
|
total: 3
|
|
25714
|
-
}) : translateService.translate('verify.header.
|
|
26479
|
+
}) : translateService.translate('sdk.verify.header.stepper', {
|
|
25715
26480
|
current: 1,
|
|
25716
26481
|
total: 2
|
|
25717
26482
|
});
|
|
25718
26483
|
setHeaderText(translateService.translate(typeMap[type]), stepNow);
|
|
25719
26484
|
} else {
|
|
25720
|
-
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('verify.header.
|
|
26485
|
+
const stepNow = type.includes('TWN_IDCard') ? translateService.translate('sdk.verify.header.stepper', {
|
|
25721
26486
|
current: 3,
|
|
25722
26487
|
total: 3
|
|
25723
|
-
}) : translateService.translate('verify.header.
|
|
26488
|
+
}) : translateService.translate('sdk.verify.header.stepper', {
|
|
25724
26489
|
current: 2,
|
|
25725
26490
|
total: 2
|
|
25726
26491
|
});
|
|
@@ -25729,6 +26494,7 @@ function startOCR(config) {
|
|
|
25729
26494
|
}
|
|
25730
26495
|
}
|
|
25731
26496
|
function setCardSize(type) {
|
|
26497
|
+
var _a, _b;
|
|
25732
26498
|
let CARD_SIZE;
|
|
25733
26499
|
(function (CARD_SIZE) {
|
|
25734
26500
|
CARD_SIZE[CARD_SIZE["MAX_WIDTH_RATE"] = 0.95] = "MAX_WIDTH_RATE";
|
|
@@ -25758,7 +26524,8 @@ function startOCR(config) {
|
|
|
25758
26524
|
width,
|
|
25759
26525
|
height
|
|
25760
26526
|
};
|
|
25761
|
-
|
|
26527
|
+
const textTopRef = ((_a = document.querySelector('.video-container')) === null || _a === void 0 ? void 0 : _a.clientHeight) || windowHeight;
|
|
26528
|
+
(_b = document.querySelector('.status')) === null || _b === void 0 ? void 0 : _b.setAttribute('style', `top: ${textTopRef / 2 + height / 2}px`);
|
|
25762
26529
|
scanAnimationContainer.style.width = `${width + scanPadding}px`;
|
|
25763
26530
|
scanAnimationContainer.style.height = `${height + scanPadding}px`;
|
|
25764
26531
|
}
|
|
@@ -25798,7 +26565,7 @@ function startOCR(config) {
|
|
|
25798
26565
|
} = renderCameraSwitch({
|
|
25799
26566
|
container: videoContainer
|
|
25800
26567
|
});
|
|
25801
|
-
cameraHint.
|
|
26568
|
+
cameraHint.innerHTML = translateService.translate('sdk.general.verify.error.switchCamera');
|
|
25802
26569
|
cameraSwitchContainer.addEventListener('click', () => __awaiter(this, void 0, void 0, function* () {
|
|
25803
26570
|
const _nextCameraNumber = parseInt(switchText.textContent) + 1;
|
|
25804
26571
|
const nextCameraNumber = _nextCameraNumber > backCameraList.length ? 1 : _nextCameraNumber;
|
|
@@ -25810,13 +26577,19 @@ function startOCR(config) {
|
|
|
25810
26577
|
switchText.textContent = '1';
|
|
25811
26578
|
cameraSwitchShow = true;
|
|
25812
26579
|
}
|
|
26580
|
+
function hideCameraSwitchButton() {
|
|
26581
|
+
var _a, _b;
|
|
26582
|
+
cameraSwitchShow = false;
|
|
26583
|
+
(_a = document.querySelector('.camera-switch-container')) === null || _a === void 0 ? void 0 : _a.remove();
|
|
26584
|
+
(_b = document.querySelector('.camera-switch__hint')) === null || _b === void 0 ? void 0 : _b.remove();
|
|
26585
|
+
}
|
|
25813
26586
|
function cardRotateByStage(stage, mandatoryRotate = false, point) {
|
|
25814
26587
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25815
26588
|
if ((stage === idRecognition.EAuthMeIDCardAntiFraudStage.Done || stage === currentAntiFraudStage) && mandatoryRotate === false) return;
|
|
25816
26589
|
const cardMatchROI = point ? point : config.getCardMatchROI ? yield config.getCardMatchROI() : null;
|
|
25817
|
-
if (!cardMatchROI) throw new core.AuthmeError(core.ErrorCode.SDK_INTERNAL_ERROR, 'getCardMatchROI is null');
|
|
26590
|
+
if (!cardMatchROI || cardMatchROI.length == 0) throw new core.AuthmeError(core.ErrorCode.SDK_INTERNAL_ERROR, 'getCardMatchROI is null');
|
|
25818
26591
|
setCardBorderColor('error');
|
|
25819
|
-
setCardPoints(cardMatchROI, facingMode === 'front');
|
|
26592
|
+
setCardPoints(cardMatchROI, config.ocrConfig.needAntiFraud, facingMode === 'front');
|
|
25820
26593
|
setHintTextLocale();
|
|
25821
26594
|
currentAntiFraudStage = stage;
|
|
25822
26595
|
if (isTutorialFinish && !getIsRotateCardAnimating() || mandatoryRotate) {
|
|
@@ -25828,16 +26601,16 @@ function startOCR(config) {
|
|
|
25828
26601
|
function cardRotateTextProcess(stage) {
|
|
25829
26602
|
switch (stage) {
|
|
25830
26603
|
case idRecognition.EAuthMeIDCardAntiFraudStage.Left:
|
|
25831
|
-
facingMode === 'front' ? setTopText(translateService.translate('verify.
|
|
26604
|
+
facingMode === 'front' ? setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip')) : setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25832
26605
|
break;
|
|
25833
26606
|
case idRecognition.EAuthMeIDCardAntiFraudStage.Right:
|
|
25834
|
-
facingMode === 'front' ? setTopText(translateService.translate('verify.
|
|
26607
|
+
facingMode === 'front' ? setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip')) : setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25835
26608
|
break;
|
|
25836
26609
|
case idRecognition.EAuthMeIDCardAntiFraudStage.Up:
|
|
25837
|
-
setTopText(translateService.translate('verify.
|
|
26610
|
+
setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25838
26611
|
break;
|
|
25839
26612
|
case idRecognition.EAuthMeIDCardAntiFraudStage.Down:
|
|
25840
|
-
setTopText(translateService.translate('verify.
|
|
26613
|
+
setTopText(translateService.translate('sdk.guard.verify.guide.idCardFlip'));
|
|
25841
26614
|
break;
|
|
25842
26615
|
}
|
|
25843
26616
|
}
|
|
@@ -25885,10 +26658,10 @@ function startOCR(config) {
|
|
|
25885
26658
|
}
|
|
25886
26659
|
function setHintTextLocale() {
|
|
25887
26660
|
var _a;
|
|
25888
|
-
const TITLE_TOP_RANGE =
|
|
26661
|
+
const TITLE_TOP_RANGE = 100;
|
|
25889
26662
|
const ORIGINAL_TITLE_CLIENT_HEIGHT = window.getComputedStyle(titleText).getPropertyValue('line-height');
|
|
25890
26663
|
const titleClientHight = parseInt(ORIGINAL_TITLE_CLIENT_HEIGHT.replace('px', ''));
|
|
25891
|
-
const maskRect = (_a = document.querySelector('#
|
|
26664
|
+
const maskRect = (_a = document.querySelector('#authme_frame_border path')) === null || _a === void 0 ? void 0 : _a.getClientRects();
|
|
25892
26665
|
if (!maskRect || (maskRect === null || maskRect === void 0 ? void 0 : maskRect.length) <= 0) return;
|
|
25893
26666
|
titleTextPanel.style.top = `${maskRect[0].top - TITLE_TOP_RANGE - titleClientHight}px`;
|
|
25894
26667
|
}
|
|
@@ -25918,7 +26691,7 @@ const renderExtraUI = config => {
|
|
|
25918
26691
|
config.videoContainer.appendChild(titleTextPanel);
|
|
25919
26692
|
config.videoContainer.appendChild(cardborderContainer);
|
|
25920
26693
|
// Set init text
|
|
25921
|
-
titleText.
|
|
26694
|
+
titleText.innerHTML = translateService.translate('extra.title');
|
|
25922
26695
|
// Picture
|
|
25923
26696
|
const confirmImageContainer = document.createElement('div');
|
|
25924
26697
|
confirmImageContainer.classList.add('confirm-image-container', 'confirm-image-container-extra');
|
|
@@ -25939,10 +26712,10 @@ const renderExtraUI = config => {
|
|
|
25939
26712
|
imageFooter.classList.add('image-footer');
|
|
25940
26713
|
const retryBtn = document.createElement('button');
|
|
25941
26714
|
retryBtn.classList.add('btn-retry');
|
|
25942
|
-
retryBtn.textContent = translateService.translate('verify.
|
|
26715
|
+
retryBtn.textContent = translateService.translate('sdk.ocr.verify.retry');
|
|
25943
26716
|
const completeBtn = document.createElement('button');
|
|
25944
26717
|
completeBtn.classList.add('btn-complete');
|
|
25945
|
-
completeBtn.textContent = translateService.translate('verify.
|
|
26718
|
+
completeBtn.textContent = translateService.translate('sdk.ocr.verify.clear');
|
|
25946
26719
|
imageFooter.appendChild(completeBtn);
|
|
25947
26720
|
imageFooter.appendChild(retryBtn);
|
|
25948
26721
|
confirmImageContainer.appendChild(confirmImageWapper);
|
|
@@ -25969,7 +26742,7 @@ const renderExtraUI = config => {
|
|
|
25969
26742
|
endBtn.textContent = translateService.translate('verify.endBtn');
|
|
25970
26743
|
const continueBtn = document.createElement('button');
|
|
25971
26744
|
continueBtn.classList.add('btn-continue');
|
|
25972
|
-
continueBtn.textContent = translateService.translate('
|
|
26745
|
+
continueBtn.textContent = translateService.translate('sdk.general.continue');
|
|
25973
26746
|
checkOtherImageFooter.appendChild(continueBtn);
|
|
25974
26747
|
checkOtherImageFooter.appendChild(endBtn);
|
|
25975
26748
|
checkOtherImageContainer.appendChild(checkOtherImageWapper);
|
|
@@ -25987,7 +26760,8 @@ const renderExtraUI = config => {
|
|
|
25987
26760
|
endBtn,
|
|
25988
26761
|
completeBtn,
|
|
25989
26762
|
continueBtn,
|
|
25990
|
-
image
|
|
26763
|
+
image,
|
|
26764
|
+
cardborderContainer
|
|
25991
26765
|
};
|
|
25992
26766
|
};
|
|
25993
26767
|
|
|
@@ -26020,15 +26794,21 @@ function startExtra(config) {
|
|
|
26020
26794
|
completeBtn,
|
|
26021
26795
|
endBtn,
|
|
26022
26796
|
continueBtn,
|
|
26023
|
-
image
|
|
26797
|
+
image,
|
|
26798
|
+
cardborderContainer
|
|
26024
26799
|
} = renderExtraUI({
|
|
26025
26800
|
videoContainer,
|
|
26026
26801
|
container
|
|
26027
26802
|
});
|
|
26803
|
+
if (config.extraConfig.border == 'none') {
|
|
26804
|
+
util.hideElement(cardborderContainer);
|
|
26805
|
+
} else {
|
|
26806
|
+
util.showElement(cardborderContainer);
|
|
26807
|
+
}
|
|
26028
26808
|
const canvas = document.createElement('canvas');
|
|
26029
26809
|
// Register Event
|
|
26030
26810
|
const requestCamera$ = rxjs.of(true).pipe(rxjs.tap(() => {
|
|
26031
|
-
util.startSpinner(translateService.translate('general.loading'));
|
|
26811
|
+
util.startSpinner(translateService.translate('sdk.general.loading'));
|
|
26032
26812
|
}), rxjs.switchMap(() => rxjs.from(util.requestCamera({
|
|
26033
26813
|
video,
|
|
26034
26814
|
facingMode: 'back',
|
|
@@ -26041,20 +26821,30 @@ function startExtra(config) {
|
|
|
26041
26821
|
util.stopSpinner();
|
|
26042
26822
|
util.showElement(videoContainer);
|
|
26043
26823
|
}));
|
|
26044
|
-
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('
|
|
26824
|
+
rxjs.fromEvent(window, 'offline').pipe(rxjs.switchMap(() => util.asyncOnLineShowErrorMessage(translateService.translate('sdk.general.error.alert.offline'), translateService.translate('sdk.general.error.retry'), true)), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
26045
26825
|
rxjs.fromEvent(window, 'resize').pipe(rxjs.throttleTime(100), rxjs.switchMap(() => util.getCanvasSize(video)), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
26046
26826
|
rxjs.fromEvent(closeIcon, 'click').pipe(rxjs.switchMap(() => reset()), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
26047
26827
|
rxjs.fromEvent(pictureIcon, 'click').pipe(rxjs.switchMap(() => util.getCanvasSize(video)), rxjs.switchMap(canvasSizeInfo => rxjs.from(checkConfirmImage(canvasSizeInfo)).pipe(rxjs.switchMap(needRetry => needRetry ? rxjs.of(true) : rxjs.from(config.confirmImage(canvasSizeInfo.canvasWidth, canvasSizeInfo.canvasHeight, imageData, canvas)).pipe(rxjs.map(confirmResp => !confirmResp))), rxjs.tap(() => {
|
|
26828
|
+
if (config.extraConfig.border == 'none') {
|
|
26829
|
+
util.hideElement(cardborderContainer);
|
|
26830
|
+
} else {
|
|
26831
|
+
util.showElement(cardborderContainer);
|
|
26832
|
+
}
|
|
26048
26833
|
showVideoElement();
|
|
26049
26834
|
util.hideElement(confirmImageContainer);
|
|
26050
26835
|
}))), rxjs.switchMap(needRetry => needRetry ? rxjs.of(true) : config.extraConfig.continue === false ? reset() : rxjs.from(takeOtherImage()).pipe(rxjs.switchMap(needContinue => needContinue ? rxjs.of(true) : rxjs.of(false)), rxjs.tap(() => {
|
|
26836
|
+
if (config.extraConfig.border == 'none') {
|
|
26837
|
+
util.hideElement(cardborderContainer);
|
|
26838
|
+
} else {
|
|
26839
|
+
util.showElement(cardborderContainer);
|
|
26840
|
+
}
|
|
26051
26841
|
showVideoElement();
|
|
26052
26842
|
util.hideElement(checkOtherImageContainer);
|
|
26053
26843
|
}), rxjs.switchMap(needContinue => needContinue ? rxjs.of(true) : reset()))), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
26054
|
-
rxjs.merge(rxjs.fromEvent(window, 'resize'), rxjs.of(0)).pipe(rxjs.map(() => window.innerWidth >= 320 && window.innerHeight >= 500), rxjs.filter(x => x !== isValidScreenSize), rxjs.tap(x => isValidScreenSize = x), rxjs.tap(x => x ? util.hidePopup() : util.showPopup(translateService.translate('
|
|
26844
|
+
rxjs.merge(rxjs.fromEvent(window, 'resize'), rxjs.of(0)).pipe(rxjs.map(() => window.innerWidth >= 320 && window.innerHeight >= 500), rxjs.filter(x => x !== isValidScreenSize), rxjs.tap(x => isValidScreenSize = x), rxjs.tap(x => x ? util.hidePopup() : util.showPopup(translateService.translate('sdk.general.insufficientScreen.title'), translateService.translate('sdk.general.insufficientScreen.content'), false)), rxjs.takeUntil(unsubscribe$)).subscribe();
|
|
26055
26845
|
// Start
|
|
26056
26846
|
// headerTitle.textContent = translateService.translate(
|
|
26057
|
-
// 'liveness.header
|
|
26847
|
+
// 'sdk.liveness.detection.header'
|
|
26058
26848
|
// );
|
|
26059
26849
|
util.showElement(pictureIcon);
|
|
26060
26850
|
function main() {
|
|
@@ -26123,7 +26913,7 @@ function startExtra(config) {
|
|
|
26123
26913
|
|
|
26124
26914
|
function SendRequestWithRetry$4(promiseFactory) {
|
|
26125
26915
|
return util.retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26126
|
-
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('
|
|
26916
|
+
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26127
26917
|
}));
|
|
26128
26918
|
}
|
|
26129
26919
|
class ExtraModule {
|
|
@@ -26147,7 +26937,7 @@ class ExtraModule {
|
|
|
26147
26937
|
})
|
|
26148
26938
|
}));
|
|
26149
26939
|
if (resp.retry) {
|
|
26150
|
-
yield util.asyncShowPopup(translateService.translate('verify.error.
|
|
26940
|
+
yield util.asyncShowPopup(translateService.translate('sdk.verify.error.blurRetake.title'), translateService.translate('sdk.verify.error.blurRetake.content'), true);
|
|
26151
26941
|
throw 'recognition failed';
|
|
26152
26942
|
}
|
|
26153
26943
|
result.push(resp);
|
|
@@ -26185,7 +26975,7 @@ class ExtraModule {
|
|
|
26185
26975
|
|
|
26186
26976
|
function SendRequestWithRetry$3(promiseFactory) {
|
|
26187
26977
|
return util.retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26188
|
-
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('
|
|
26978
|
+
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26189
26979
|
}));
|
|
26190
26980
|
}
|
|
26191
26981
|
class LivenessVerifyModule {
|
|
@@ -26233,22 +27023,22 @@ class LivenessVerifyModule {
|
|
|
26233
27023
|
return resp.parameters;
|
|
26234
27024
|
} catch (e) {
|
|
26235
27025
|
let error = e;
|
|
26236
|
-
let message = core.getTranslateInstance().translate('
|
|
27026
|
+
let message = core.getTranslateInstance().translate('sdk.general.error.alert.serverError');
|
|
26237
27027
|
while (error instanceof core.AuthmeError) {
|
|
26238
27028
|
error = error.cause;
|
|
26239
27029
|
}
|
|
26240
27030
|
switch ((_b = (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.code) {
|
|
26241
27031
|
case 'AuthMe.CustomerManagementService:000111':
|
|
26242
|
-
message = core.getTranslateInstance().translate('
|
|
27032
|
+
message = core.getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.notFound');
|
|
26243
27033
|
break;
|
|
26244
27034
|
case 'AuthMe.CustomerManagementService:000131':
|
|
26245
|
-
message = core.getTranslateInstance().translate('
|
|
27035
|
+
message = core.getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.deactivate');
|
|
26246
27036
|
break;
|
|
26247
27037
|
case 'AuthMe.CustomerManagementService:000132':
|
|
26248
|
-
message = core.getTranslateInstance().translate('
|
|
27038
|
+
message = core.getTranslateInstance().translate('sdk.general.verify.error.clientCustomerId.inProgress');
|
|
26249
27039
|
break;
|
|
26250
27040
|
case 'AuthMe.CustomerManagementService:000202':
|
|
26251
|
-
message = core.getTranslateInstance().translate('
|
|
27041
|
+
message = core.getTranslateInstance().translate('sdk.general.error.unexpectedError');
|
|
26252
27042
|
break;
|
|
26253
27043
|
default:
|
|
26254
27044
|
break;
|
|
@@ -26413,7 +27203,7 @@ class LivenessVerifyModule {
|
|
|
26413
27203
|
|
|
26414
27204
|
function SendRequestWithRetry$2(promiseFactory) {
|
|
26415
27205
|
return util.retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26416
|
-
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('
|
|
27206
|
+
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26417
27207
|
}));
|
|
26418
27208
|
}
|
|
26419
27209
|
class LivenessModule {
|
|
@@ -26441,7 +27231,7 @@ class LivenessModule {
|
|
|
26441
27231
|
try {
|
|
26442
27232
|
const result = yield rxjs.firstValueFrom(startLiveness({
|
|
26443
27233
|
init: () => __awaiter(this, void 0, void 0, function* () {
|
|
26444
|
-
const resp = yield liveness.LivenessAPI.IdentityVerification.init(true);
|
|
27234
|
+
const resp = yield liveness.LivenessAPI.IdentityVerification.init(true, config.passive, config.compareCustomerClientId);
|
|
26445
27235
|
id = resp.id;
|
|
26446
27236
|
if (resp.parameters.pubKey) {
|
|
26447
27237
|
yield this.fasService.setPublicKeyForJson(resp.parameters.pubKey);
|
|
@@ -26615,9 +27405,188 @@ class LivenessModule {
|
|
|
26615
27405
|
}
|
|
26616
27406
|
}
|
|
26617
27407
|
|
|
27408
|
+
function initFrameView(cardPoints, scanId, faceMode, scanView, cardType, cardTypeConfig, setBorderType, setCardBorderColor, setBorderSuccess) {
|
|
27409
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27410
|
+
const scanAnimationContainer = document.querySelector('.scan');
|
|
27411
|
+
const successAnimationDom = document.querySelector('.success');
|
|
27412
|
+
document.querySelector('#authme_frame_border');
|
|
27413
|
+
const videoContainer = document.querySelector('.video-container');
|
|
27414
|
+
const windowWidth = videoContainer.offsetWidth;
|
|
27415
|
+
const windowHeight = videoContainer.offsetHeight;
|
|
27416
|
+
const lottieScanSetting = {
|
|
27417
|
+
scanAnimationContainer: scanAnimationContainer
|
|
27418
|
+
};
|
|
27419
|
+
const lottieSuccessSetting = {
|
|
27420
|
+
animationContainer: successAnimationDom
|
|
27421
|
+
};
|
|
27422
|
+
function frameImage(faceMode, zIndex, base64, color, opacity) {
|
|
27423
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.imageColor;
|
|
27424
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.imageOpacity;
|
|
27425
|
+
const rectX = cardPoints[0][0] * windowWidth;
|
|
27426
|
+
const rectY = cardPoints[0][1] * windowHeight;
|
|
27427
|
+
const rectWidth = cardPoints[1][0] * windowWidth - rectX;
|
|
27428
|
+
const rectHeight = cardPoints[3][1] * windowHeight - rectY;
|
|
27429
|
+
let domContainer = document.querySelector('#authme_frame_image');
|
|
27430
|
+
let domImage = document.querySelector('#authme_frame_image_svg');
|
|
27431
|
+
const domImageStyle = `
|
|
27432
|
+
width: 100%;
|
|
27433
|
+
height: 100%;
|
|
27434
|
+
background-color: ${color};
|
|
27435
|
+
opacity: ${opacity};
|
|
27436
|
+
-webkit-mask-image: url(data:image/svg+xml;base64,${base64});
|
|
27437
|
+
mask-image: url(data:image/svg+xml;base64,${base64});
|
|
27438
|
+
-webkit-mask-size: contain;
|
|
27439
|
+
mask-size: contain;
|
|
27440
|
+
mask-repeat: no-repeat no-repeat;
|
|
27441
|
+
mask-position: center center;
|
|
27442
|
+
`;
|
|
27443
|
+
if (!domContainer) {
|
|
27444
|
+
domContainer = document.createElement('div');
|
|
27445
|
+
domContainer.setAttribute('id', 'authme_frame_image');
|
|
27446
|
+
videoContainer.appendChild(domContainer);
|
|
27447
|
+
}
|
|
27448
|
+
if (!domImage) {
|
|
27449
|
+
domImage = document.createElement('div');
|
|
27450
|
+
domImage.setAttribute('id', 'authme_frame_image_svg');
|
|
27451
|
+
domContainer.appendChild(domImage);
|
|
27452
|
+
}
|
|
27453
|
+
if (faceMode === 'front') {
|
|
27454
|
+
domImage.classList.add('front');
|
|
27455
|
+
}
|
|
27456
|
+
domImage.setAttribute('style', domImageStyle);
|
|
27457
|
+
domImage.setAttribute('preserveAspectRatio', 'none');
|
|
27458
|
+
domContainer.setAttribute('style', `
|
|
27459
|
+
z-index: ${zIndex};
|
|
27460
|
+
position: absolute;
|
|
27461
|
+
left: ${rectX}px;
|
|
27462
|
+
top: ${rectY}px;
|
|
27463
|
+
width: ${rectWidth}px;
|
|
27464
|
+
height: ${rectHeight}px;
|
|
27465
|
+
opacity: ${opacity};
|
|
27466
|
+
`);
|
|
27467
|
+
}
|
|
27468
|
+
function frameText(zIndex, text, color, opacity) {
|
|
27469
|
+
color = color !== null && color !== void 0 ? color : OcrFrame.textColor;
|
|
27470
|
+
opacity = opacity !== null && opacity !== void 0 ? opacity : OcrFrame.textOpacity;
|
|
27471
|
+
const rectX = cardPoints[0][0] * windowWidth;
|
|
27472
|
+
const rectY = cardPoints[0][1] * windowHeight;
|
|
27473
|
+
const rectWidth = cardPoints[1][0] * windowWidth - rectX;
|
|
27474
|
+
const rectHeight = cardPoints[3][1] * windowHeight - rectY;
|
|
27475
|
+
let dom = document.querySelector('#authme_frame_text');
|
|
27476
|
+
if (!dom) {
|
|
27477
|
+
dom = document.createElement('div');
|
|
27478
|
+
dom.setAttribute('id', 'authme_frame_text');
|
|
27479
|
+
videoContainer.appendChild(dom);
|
|
27480
|
+
}
|
|
27481
|
+
dom.setAttribute('style', `
|
|
27482
|
+
z-index: ${zIndex};
|
|
27483
|
+
position: absolute;
|
|
27484
|
+
left: ${rectX}px;
|
|
27485
|
+
top: ${rectY}px;
|
|
27486
|
+
width: ${rectWidth}px;
|
|
27487
|
+
height: ${rectHeight}px;
|
|
27488
|
+
opacity: ${opacity};
|
|
27489
|
+
color: ${color};
|
|
27490
|
+
display: flex;
|
|
27491
|
+
align-items: center;
|
|
27492
|
+
justify-content: center;
|
|
27493
|
+
font-size: 60px;
|
|
27494
|
+
font-weight: 500;
|
|
27495
|
+
`);
|
|
27496
|
+
dom.textContent = text;
|
|
27497
|
+
}
|
|
27498
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
27499
|
+
const scanViewSetting = {
|
|
27500
|
+
document_type: '',
|
|
27501
|
+
border: {
|
|
27502
|
+
enable: true,
|
|
27503
|
+
type: OcrFrame.borderType,
|
|
27504
|
+
color: OcrFrame.borderColor,
|
|
27505
|
+
opacity: OcrFrame.borderOpacity
|
|
27506
|
+
},
|
|
27507
|
+
success: {
|
|
27508
|
+
enable: false,
|
|
27509
|
+
color: OcrFrame.successColor,
|
|
27510
|
+
opacity: 1
|
|
27511
|
+
},
|
|
27512
|
+
content: [],
|
|
27513
|
+
line: {
|
|
27514
|
+
enable: false,
|
|
27515
|
+
color: OcrFrame.lineColor,
|
|
27516
|
+
gradient: {
|
|
27517
|
+
enable: false,
|
|
27518
|
+
color: OcrFrame.lineGradient,
|
|
27519
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
27520
|
+
}
|
|
27521
|
+
}
|
|
27522
|
+
};
|
|
27523
|
+
if (scanView) {
|
|
27524
|
+
Object.assign(scanViewSetting, scanView);
|
|
27525
|
+
}
|
|
27526
|
+
if (cardType.includes('Thickness')) {
|
|
27527
|
+
if (cardTypeConfig.mode === 'manual') {
|
|
27528
|
+
setBorderType({
|
|
27529
|
+
type: scanViewSetting.border.type,
|
|
27530
|
+
strokeOpacity: 0,
|
|
27531
|
+
color: scanViewSetting.border.color
|
|
27532
|
+
});
|
|
27533
|
+
setCardBorderColor(null);
|
|
27534
|
+
// success setting
|
|
27535
|
+
// TODO need to check the success style
|
|
27536
|
+
if (scanViewSetting.success.enable) {
|
|
27537
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
27538
|
+
}
|
|
27539
|
+
} else {
|
|
27540
|
+
setBorderType({
|
|
27541
|
+
type: scanViewSetting.border.type,
|
|
27542
|
+
strokeOpacity: 0,
|
|
27543
|
+
color: scanViewSetting.border.color
|
|
27544
|
+
});
|
|
27545
|
+
if (scanViewSetting.success.enable) {
|
|
27546
|
+
setBorderSuccess(scanViewSetting.success.color, 0);
|
|
27547
|
+
}
|
|
27548
|
+
}
|
|
27549
|
+
} else {
|
|
27550
|
+
if (scanViewSetting.border.enable) {
|
|
27551
|
+
setBorderType({
|
|
27552
|
+
type: scanViewSetting.border.type,
|
|
27553
|
+
strokeOpacity: scanViewSetting.border.opacity,
|
|
27554
|
+
color: scanViewSetting.border.color
|
|
27555
|
+
});
|
|
27556
|
+
setCardBorderColor(null);
|
|
27557
|
+
// success setting
|
|
27558
|
+
if (scanViewSetting.success.enable) {
|
|
27559
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
27560
|
+
}
|
|
27561
|
+
}
|
|
27562
|
+
}
|
|
27563
|
+
// scan setting
|
|
27564
|
+
if (scanViewSetting.line.enable) {
|
|
27565
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
27566
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
27567
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
27568
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
27569
|
+
}
|
|
27570
|
+
initScanAnimation(lottieScanSetting);
|
|
27571
|
+
}
|
|
27572
|
+
// content setting
|
|
27573
|
+
resetFrame();
|
|
27574
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
27575
|
+
const contentSetting = scanViewSetting.content[i];
|
|
27576
|
+
if (contentSetting.type === 'svg') {
|
|
27577
|
+
const imageData = yield idRecognition.initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
27578
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
27579
|
+
}
|
|
27580
|
+
if (contentSetting.type === 'text') {
|
|
27581
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
27582
|
+
}
|
|
27583
|
+
}
|
|
27584
|
+
});
|
|
27585
|
+
}
|
|
27586
|
+
|
|
26618
27587
|
function SendRequestWithRetry$1(promiseFactory) {
|
|
26619
27588
|
return util.retryPromiseWithCondition(promiseFactory, () => __awaiter(this, void 0, void 0, function* () {
|
|
26620
|
-
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('
|
|
27589
|
+
return util.asyncShowErrorMessage(core.getTranslateInstance().translate('sdk.general.error.alert.serverError'), true);
|
|
26621
27590
|
}));
|
|
26622
27591
|
}
|
|
26623
27592
|
class MRZModule {
|
|
@@ -26684,7 +27653,7 @@ class MRZModule {
|
|
|
26684
27653
|
expiredIn: resp.expiredIn
|
|
26685
27654
|
});
|
|
26686
27655
|
}),
|
|
26687
|
-
ocrStart: (points, type, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
27656
|
+
ocrStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
26688
27657
|
yield this.mrzService.init();
|
|
26689
27658
|
yield this.mrzService.setFrameSize(frameWidth, frameHeight);
|
|
26690
27659
|
yield this.mrzService.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -26693,7 +27662,7 @@ class MRZModule {
|
|
|
26693
27662
|
docInfos[type].ocrImg = null;
|
|
26694
27663
|
docInfos[type].ocrOriginImg = null;
|
|
26695
27664
|
} else {
|
|
26696
|
-
const resp = yield SendRequestWithRetry$1(() => idRecognition.initScanDocument(scanId,
|
|
27665
|
+
const resp = yield SendRequestWithRetry$1(() => idRecognition.initScanDocument(scanId, cardType));
|
|
26697
27666
|
if (docInfos[type]) {
|
|
26698
27667
|
docInfos[type].docId = resp.scanDocumentId;
|
|
26699
27668
|
} else {
|
|
@@ -26705,6 +27674,9 @@ class MRZModule {
|
|
|
26705
27674
|
fraudResult: null
|
|
26706
27675
|
};
|
|
26707
27676
|
}
|
|
27677
|
+
if (resp.scanView) {
|
|
27678
|
+
initFrameView(points, scanId, faceMode, resp.scanView, cardType, '', setBorderType, setCardBorderColor, setBorderSuccess);
|
|
27679
|
+
}
|
|
26708
27680
|
}
|
|
26709
27681
|
return true;
|
|
26710
27682
|
}),
|
|
@@ -26758,6 +27730,7 @@ class MRZModule {
|
|
|
26758
27730
|
}
|
|
26759
27731
|
}),
|
|
26760
27732
|
cardTypes: config.cardTypes,
|
|
27733
|
+
cardTypeConfigs: config.cardTypeConfigs,
|
|
26761
27734
|
antiFraudStart: () => __awaiter(this, void 0, void 0, function* () {
|
|
26762
27735
|
throw 'MRZ Fraud Not Supported.';
|
|
26763
27736
|
}),
|
|
@@ -26816,9 +27789,9 @@ function SendRequestWithRetry(promiseFactory, options = {}) {
|
|
|
26816
27789
|
return util.retryPromiseWithCondition(promiseFactory, e => __awaiter(this, void 0, void 0, function* () {
|
|
26817
27790
|
var _a, _b, _c;
|
|
26818
27791
|
const errorParams = (options === null || options === void 0 ? void 0 : options.onErrorHandler) ? options === null || options === void 0 ? void 0 : options.onErrorHandler(e) : {};
|
|
26819
|
-
return util.asyncShowErrorMessage(core.getTranslateInstance().translate((_a = errorParams === null || errorParams === void 0 ? void 0 : errorParams.errorText) !== null && _a !== void 0 ? _a : '
|
|
27792
|
+
return util.asyncShowErrorMessage(core.getTranslateInstance().translate((_a = errorParams === null || errorParams === void 0 ? void 0 : errorParams.errorText) !== null && _a !== void 0 ? _a : 'sdk.general.error.alert.serverError'), errorParams.showRetryButton, {
|
|
26820
27793
|
callback: errorParams === null || errorParams === void 0 ? void 0 : errorParams.onButtonClick,
|
|
26821
|
-
buttonText: core.getTranslateInstance().translate((_b = errorParams === null || errorParams === void 0 ? void 0 : errorParams.buttonText) !== null && _b !== void 0 ? _b : '
|
|
27794
|
+
buttonText: core.getTranslateInstance().translate((_b = errorParams === null || errorParams === void 0 ? void 0 : errorParams.buttonText) !== null && _b !== void 0 ? _b : 'sdk.general.error.retry'),
|
|
26822
27795
|
titleText: core.getTranslateInstance().translate((_c = errorParams === null || errorParams === void 0 ? void 0 : errorParams.titleText) !== null && _c !== void 0 ? _c : ''),
|
|
26823
27796
|
showErrorMessageHandler: errorParams === null || errorParams === void 0 ? void 0 : errorParams.showErrorMessageHandler
|
|
26824
27797
|
});
|
|
@@ -26979,7 +27952,7 @@ class OCRModule {
|
|
|
26979
27952
|
yield this.antiFraudInstance.destroy();
|
|
26980
27953
|
});
|
|
26981
27954
|
}
|
|
26982
|
-
run(config, cardTypes) {
|
|
27955
|
+
run(config, cardTypes, cardTypeConfigs) {
|
|
26983
27956
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26984
27957
|
let scanId = '';
|
|
26985
27958
|
let frameHeight = 0;
|
|
@@ -27025,6 +27998,7 @@ class OCRModule {
|
|
|
27025
27998
|
const translateService = core.getTranslateInstance();
|
|
27026
27999
|
const eventNameWrong$ = new rxjs.Subject();
|
|
27027
28000
|
return yield rxjs.firstValueFrom(rxjs.race(startOCR({
|
|
28001
|
+
cardTypeConfigs: cardTypeConfigs,
|
|
27028
28002
|
ocrConfig: config,
|
|
27029
28003
|
init: (width, height) => __awaiter(this, void 0, void 0, function* () {
|
|
27030
28004
|
var _a, _b, _c, _d;
|
|
@@ -27038,9 +28012,9 @@ class OCRModule {
|
|
|
27038
28012
|
const _error = e;
|
|
27039
28013
|
if (((_c = (_b = (_a = _error === null || _error === void 0 ? void 0 : _error.cause) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.responseContent) === null || _c === void 0 ? void 0 : _c.code) === 7) {
|
|
27040
28014
|
return {
|
|
27041
|
-
buttonText: '
|
|
27042
|
-
titleText: '
|
|
27043
|
-
errorText: '
|
|
28015
|
+
buttonText: 'sdk.general.confirm',
|
|
28016
|
+
titleText: 'sdk.general.error.eventNameInvalid.title',
|
|
28017
|
+
errorText: 'sdk.general.error.eventNameInvalid.content',
|
|
27044
28018
|
onButtonClick: () => {
|
|
27045
28019
|
eventNameWrong$.next({
|
|
27046
28020
|
isSuccess: false,
|
|
@@ -27077,9 +28051,8 @@ class OCRModule {
|
|
|
27077
28051
|
expiredIn: resp.expiredIn
|
|
27078
28052
|
});
|
|
27079
28053
|
}),
|
|
27080
|
-
ocrStart: (points, type, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
27081
|
-
const _service =
|
|
27082
|
-
? this.residentCardMrzService : this.ocrService;
|
|
28054
|
+
ocrStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
28055
|
+
const _service = this.ocrService;
|
|
27083
28056
|
yield _service.init();
|
|
27084
28057
|
yield _service.setFrameSize(frameWidth, frameHeight);
|
|
27085
28058
|
yield _service.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -27088,6 +28061,7 @@ class OCRModule {
|
|
|
27088
28061
|
const oldParams = yield this.ocrService.getParams();
|
|
27089
28062
|
newParams[F_IMAGE_BLUE_TH] = 750;
|
|
27090
28063
|
newParams['fCardMatchTh'] = 0.5;
|
|
28064
|
+
newParams['fImageReflectiveTriggerTh'] = 0.15;
|
|
27091
28065
|
yield this.ocrService.setParams(Object.assign(Object.assign({}, oldParams), newParams));
|
|
27092
28066
|
if (cardTypes.map(idRecognition.mapCardtypeToAuthmeClass).filter(n => n == engine.EAuthMeCardClass.Unknown).length > 0) {
|
|
27093
28067
|
this.ocrService.setOption({
|
|
@@ -27117,16 +28091,320 @@ class OCRModule {
|
|
|
27117
28091
|
fraudResult: null
|
|
27118
28092
|
};
|
|
27119
28093
|
}
|
|
28094
|
+
const scanView = resp.scanView ? true : false;
|
|
28095
|
+
const lottieScanSetting = {
|
|
28096
|
+
scanAnimationContainer: scanAnimationContainer
|
|
28097
|
+
};
|
|
28098
|
+
const lottieSuccessSetting = {
|
|
28099
|
+
animationContainer: successAnimationContainer
|
|
28100
|
+
};
|
|
28101
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28102
|
+
const scanViewSetting = {
|
|
28103
|
+
document_type: '',
|
|
28104
|
+
border: {
|
|
28105
|
+
enable: true,
|
|
28106
|
+
type: OcrFrame.borderType,
|
|
28107
|
+
color: OcrFrame.borderColor,
|
|
28108
|
+
opacity: OcrFrame.borderOpacity
|
|
28109
|
+
},
|
|
28110
|
+
success: {
|
|
28111
|
+
enable: true,
|
|
28112
|
+
color: OcrFrame.successColor,
|
|
28113
|
+
opacity: 1
|
|
28114
|
+
},
|
|
28115
|
+
content: [],
|
|
28116
|
+
line: {
|
|
28117
|
+
enable: true,
|
|
28118
|
+
color: OcrFrame.lineColor,
|
|
28119
|
+
gradient: {
|
|
28120
|
+
enable: true,
|
|
28121
|
+
color: OcrFrame.lineGradient,
|
|
28122
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
28123
|
+
}
|
|
28124
|
+
}
|
|
28125
|
+
};
|
|
28126
|
+
if (scanView) {
|
|
28127
|
+
Object.assign(scanViewSetting, resp.scanView);
|
|
28128
|
+
}
|
|
28129
|
+
// border setting
|
|
28130
|
+
if (scanViewSetting.border.enable) {
|
|
28131
|
+
setBorderType({
|
|
28132
|
+
type: scanViewSetting.border.type,
|
|
28133
|
+
strokeOpacity: scanViewSetting.border.opacity,
|
|
28134
|
+
color: scanViewSetting.border.color
|
|
28135
|
+
});
|
|
28136
|
+
setCardBorderColor(null);
|
|
28137
|
+
// success setting
|
|
28138
|
+
if (scanViewSetting.success.enable) {
|
|
28139
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
28140
|
+
}
|
|
28141
|
+
}
|
|
28142
|
+
// scan setting
|
|
28143
|
+
if (scanViewSetting.line.enable) {
|
|
28144
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
28145
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
28146
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
28147
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
28148
|
+
}
|
|
28149
|
+
initScanAnimation(lottieScanSetting);
|
|
28150
|
+
}
|
|
28151
|
+
// content setting
|
|
28152
|
+
resetFrame();
|
|
28153
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
28154
|
+
const contentSetting = scanViewSetting.content[i];
|
|
28155
|
+
if (contentSetting.type === 'svg') {
|
|
28156
|
+
const imageData = yield idRecognition.initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
28157
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
28158
|
+
}
|
|
28159
|
+
if (contentSetting.type === 'text') {
|
|
28160
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
28161
|
+
}
|
|
28162
|
+
}
|
|
27120
28163
|
}
|
|
27121
28164
|
return true;
|
|
27122
28165
|
}),
|
|
28166
|
+
thicknessStart: (points, type, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode, cardType, cardTypeConfig, retry = false) => __awaiter(this, void 0, void 0, function* () {
|
|
28167
|
+
const _service = this.antiFraudInstance;
|
|
28168
|
+
yield _service.init();
|
|
28169
|
+
yield _service.setFrameSize(frameWidth, frameHeight);
|
|
28170
|
+
yield _service.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
28171
|
+
const newParams = {};
|
|
28172
|
+
const oldParams = yield _service.getParams();
|
|
28173
|
+
if (config.antiFraudIMetalTagValidCountTh !== false) newParams['iMetalTagValidCountTh'] = config.antiFraudIMetalTagValidCountTh;
|
|
28174
|
+
newParams['timeoutSec'] = 1000;
|
|
28175
|
+
newParams['fCardMatchTh'] = 0.5;
|
|
28176
|
+
newParams['fImageReflectiveTriggerTh'] = 0.15;
|
|
28177
|
+
newParams['fImageThicknessTh'] = 0.3;
|
|
28178
|
+
newParams['fCardDeformationTh'] = 12;
|
|
28179
|
+
yield _service.setParams(Object.assign(Object.assign({}, oldParams), newParams));
|
|
28180
|
+
_service.setOption({
|
|
28181
|
+
key: 'thickness_detector',
|
|
28182
|
+
value: 'enable'
|
|
28183
|
+
});
|
|
28184
|
+
_service.setOption({
|
|
28185
|
+
key: 'ignore_card_type_checking',
|
|
28186
|
+
value: 'enable'
|
|
28187
|
+
});
|
|
28188
|
+
yield _service.setStage([engine.EAuthMeIDCardAntiFraudStage.Down]);
|
|
28189
|
+
yield _service.startSession();
|
|
28190
|
+
let thicknessWelcomeSetting = idRecognition.thicknessDefaultConfig.thicknessWelcomeSetting;
|
|
28191
|
+
if (retry) {
|
|
28192
|
+
docInfos[cardType].ocrImg = null;
|
|
28193
|
+
docInfos[cardType].ocrOriginImg = null;
|
|
28194
|
+
} else {
|
|
28195
|
+
const resp = yield SendRequestWithRetry(() => idRecognition.initScanDocument(scanId, cardType));
|
|
28196
|
+
if (docInfos[cardType]) {
|
|
28197
|
+
docInfos[cardType].docId = resp.scanDocumentId;
|
|
28198
|
+
} else {
|
|
28199
|
+
docInfos[cardType] = {
|
|
28200
|
+
docId: resp.scanDocumentId,
|
|
28201
|
+
ocrImg: null,
|
|
28202
|
+
ocrOriginImg: null,
|
|
28203
|
+
fraudOriginImg: null,
|
|
28204
|
+
fraudResult: null
|
|
28205
|
+
};
|
|
28206
|
+
}
|
|
28207
|
+
// TODO assign
|
|
28208
|
+
if (resp.welcome) {
|
|
28209
|
+
thicknessWelcomeSetting = resp.welcome;
|
|
28210
|
+
} else {
|
|
28211
|
+
thicknessWelcomeSetting.title.text = translateService.translate(thicknessWelcomeSetting.title.text);
|
|
28212
|
+
thicknessWelcomeSetting.subtitle.text = translateService.translate(thicknessWelcomeSetting.subtitle.text);
|
|
28213
|
+
thicknessWelcomeSetting.content.text = translateService.translate(thicknessWelcomeSetting.content.text);
|
|
28214
|
+
}
|
|
28215
|
+
const scanView = resp.scanView ? true : false;
|
|
28216
|
+
const lottieScanSetting = {
|
|
28217
|
+
scanAnimationContainer: scanAnimationContainer
|
|
28218
|
+
};
|
|
28219
|
+
const lottieSuccessSetting = {
|
|
28220
|
+
animationContainer: successAnimationContainer
|
|
28221
|
+
};
|
|
28222
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28223
|
+
const scanViewSetting = {
|
|
28224
|
+
document_type: '',
|
|
28225
|
+
border: {
|
|
28226
|
+
enable: true,
|
|
28227
|
+
type: OcrFrame.borderType,
|
|
28228
|
+
color: OcrFrame.borderColor,
|
|
28229
|
+
opacity: OcrFrame.borderOpacity
|
|
28230
|
+
},
|
|
28231
|
+
success: {
|
|
28232
|
+
enable: false,
|
|
28233
|
+
color: OcrFrame.successColor,
|
|
28234
|
+
opacity: 1
|
|
28235
|
+
},
|
|
28236
|
+
content: [],
|
|
28237
|
+
line: {
|
|
28238
|
+
enable: false,
|
|
28239
|
+
color: OcrFrame.lineColor,
|
|
28240
|
+
gradient: {
|
|
28241
|
+
enable: false,
|
|
28242
|
+
color: OcrFrame.lineGradient,
|
|
28243
|
+
opacity: OcrFrame.lineGradientOpacity
|
|
28244
|
+
}
|
|
28245
|
+
}
|
|
28246
|
+
};
|
|
28247
|
+
if (scanView) {
|
|
28248
|
+
Object.assign(scanViewSetting, resp.scanView);
|
|
28249
|
+
}
|
|
28250
|
+
// TODO for test, remove for prod
|
|
28251
|
+
// my number card
|
|
28252
|
+
//
|
|
28253
|
+
// if (cardType === 'JPN_IDCard_Thickness') {
|
|
28254
|
+
// frameImage(
|
|
28255
|
+
// faceMode,
|
|
28256
|
+
// 1,
|
|
28257
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjQ7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjI7fQoJLnN0MntmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTt9Cgkuc3Qze29wYWNpdHk6MC4yO2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDR7b3BhY2l0eTowLjU7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjIuOTIwMjt9Cjwvc3R5bGU+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTExLDE3LjVoODhjMS4xLDAsMiwwLjksMiwydjEzYzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xM0M5LDE4LjQsOS45LDE3LjUsMTEsMTcuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTEsNDIuNWgyMThjMS4xLDAsMiwwLjksMiwydjEzYzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xM0M5LDQzLjQsOS45LDQyLjUsMTEsNDIuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTIyLDc3LjVoMjA2YzEuMSwwLDIsMC45LDIsMnY5YzAsMS4xLTAuOSwyLTIsMkgxMjJjLTEuMSwwLTItMC45LTItMnYtOUMxMjAsNzguNCwxMjAuOSw3Ny41LDEyMiw3Ny41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yODMsNTkuNWg0MWMxLjEsMCwyLDAuOSwyLDJ2OWMwLDEuMS0wLjksMi0yLDJoLTQxYy0xLjEsMC0yLTAuOS0yLTJ2LTlDMjgxLDYwLjQsMjgxLjksNTkuNSwyODMsNTkuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjk5LDE1LjVoMjNjMy45LDAsNywzLjEsNyw3djI1YzAsMy45LTMuMSw3LTcsN2gtMjNjLTMuOSwwLTctMy4xLTctN3YtMjVDMjkyLDE4LjcsMjk1LjIsMTUuNSwyOTksMTUuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNMTIsOC41aDMxNWM1LjUsMCwxMCw0LjUsMTAsMTB2MTkwYzAsNS41LTQuNSwxMC0xMCwxMEgxMmMtNS41LDAtMTAtNC41LTEwLTEwdi0xOTBDMiwxMyw2LjUsOC41LDEyLDguNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEsNjkuNWg5MGMxLjEsMCwyLDAuOSwyLDJ2MTE1YzAsMS4xLTAuOSwyLTIsMkgxMWMtMS4xLDAtMi0wLjktMi0ydi0xMTVDOSw3MC40LDkuOSw2OS41LDExLDY5LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0NCIgZD0iTTEwLDE4OC41di04LjJjMCwwLDI1LjEtNS4zLDI4LjItMTNsMy4xLTcuN2MwLDAtOC4zLTcuMS04LjktMTcuN2MwLDAtMy4xLDAuOS00LTkuN3MyLjItNy43LDIuMi03LjcKCQkJcy0xLjktMTQuNywwLTE4LjljMS45LTQuMSwwLjktMTUuNiwyMi4yLTIxLjJDNzQsNzksODEuMSw5Ni43LDgxLjEsOTYuN3MzLjcsMi40LDQuMyw4LjVjMC42LDYuMiwwLjksMTkuMiwwLjksMTkuMgoJCQlzMy40LTAuOSwyLjgsNWMtMC42LDUuOS0zLjEsMTMuOC01LjUsMTNjMCwwLTEuMiwxMy4zLTgsMTUuNmMwLDAsMS41LDEzLDkuNSwxNS4zczE4LDYuMiwxOCw2LjJ2OUwxMCwxODguNUwxMCwxODguNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTEsNzAuNWg5MGMwLjYsMCwxLDAuNCwxLDF2MTE1YzAsMC42LTAuNCwxLTEsMUgxMWMtMC42LDAtMS0wLjQtMS0xdi0xMTVDMTAsNzEsMTAuNSw3MC41LDExLDcwLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTEyMSwxMTguNWMwLTAuNiwwLjQtMSwxLTFoMjA2YzAuNiwwLDEsMC40LDEsMXY1OWMwLDAuNi0wLjQsMS0xLDFIMTIyYy0wLjYsMC0xLTAuNC0xLTFWMTE4LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxMyw5OS41YzAtMC42LDAuNC0xLDEtMWgxMTRjMC42LDAsMSwwLjQsMSwxdjEyYzAsMC42LTAuNCwxLTEsMUgyMTRjLTAuNiwwLTEtMC40LTEtMVY5OS41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xMjEsMTMwLjVoMjA4Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyMSIgeTE9IjE0Ni41IiB4Mj0iMzI5IiB5Mj0iMTQ2LjUiLz4KCQk8bGluZSBjbGFzcz0ic3QxIiB4MT0iMTIxIiB5MT0iMTYyLjUiIHgyPSIzMzAiIHkyPSIxNjIuNSIvPgoJCTxsaW5lIGNsYXNzPSJzdDEiIHgxPSIyNDciIHkxPSI5OC41IiB4Mj0iMjQ3IiB5Mj0iMTEyLjUiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xMS41LDEuOWgzMTZjNS41LDAsMTAsNC40LDEwLDkuOHYxOTcuMWMwLDUuNC00LjUsOS44LTEwLDkuOGgtMzE2Yy01LjUsMC0xMC00LjQtMTAtOS44VjExLjYKCQlDMS41LDYuMyw2LDEuOSwxMS41LDEuOXoiLz4KPC9nPgo8L3N2Zz4K',
|
|
28258
|
+
// '#fff',
|
|
28259
|
+
// 1
|
|
28260
|
+
// );
|
|
28261
|
+
// }
|
|
28262
|
+
//
|
|
28263
|
+
// // driver
|
|
28264
|
+
//
|
|
28265
|
+
// if (cardType === 'JPN_DriverLicense_Thickness') {
|
|
28266
|
+
// frameImage(
|
|
28267
|
+
// faceMode,
|
|
28268
|
+
// 1,
|
|
28269
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjI7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjI7fQoJLnN0MntvcGFjaXR5OjAuNDtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Qze29wYWNpdHk6MC41O2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDR7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxLjU7fQoJLnN0NXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjIuOTIwMjt9Cjwvc3R5bGU+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzMi41LDY1LjVoOTFjMS4xLDAsMiwwLjksMiwydjExOWMwLDEuMS0wLjksMi0yLDJoLTkxYy0xLjEsMC0yLTAuOS0yLTJ2LTExOQoJCQlDMjMwLjUsNjYuNCwyMzEuNCw2NS41LDIzMi41LDY1LjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIzMi41LDY2LjVoOTFjMC42LDAsMSwwLjQsMSwxdjExOWMwLDAuNi0wLjQsMS0xLDFoLTkxYy0wLjYsMC0xLTAuNC0xLTF2LTExOUMyMzEuNSw2NywyMzIsNjYuNSwyMzIuNSw2Ni41CgkJCXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjAuNSw1MC41aDI5OGMzLjksMCw3LDMuMSw3LDd2MTQ0YzAsMy45LTMuMSw3LTcsN2gtMjk4Yy0zLjksMC03LTMuMS03LTd2LTE0NAoJCQlDMTMuNSw1My43LDE2LjcsNTAuNSwyMC41LDUwLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxLDE3LjVoMjk3YzQuMSwwLDcuNSwzLjQsNy41LDcuNWwwLDBjMCw0LjEtMy40LDcuNS03LjUsNy41SDIxYy00LjEsMC03LjUtMy40LTcuNS03LjVsMCwwCgkJCUMxMy41LDIwLjksMTYuOSwxNy41LDIxLDE3LjV6Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjM4LjUiIHkxPSIxNi41IiB4Mj0iMzguNSIgeTI9IjMyLjUiLz4KCQk8bGluZSBjbGFzcz0ic3QxIiB4MT0iMjEyLjciIHkxPSIxNy41IiB4Mj0iMjEyLjciIHkyPSIzMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyLjUiIHkxPSI2NC41IiB4Mj0iMzI2LjUiIHkyPSI2NC41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEyLjUiIHkxPSI4MC41IiB4Mj0iMjI3LjUiIHkyPSI4MC41Ii8+CgkJPHJlY3QgeD0iMTIuNSIgeT0iODEuNSIgY2xhc3M9InN0MiIgd2lkdGg9IjIwMSIgaGVpZ2h0PSIyMCIvPgoJCTxyZWN0IHg9IjEyMi41IiB5PSIxNjguNSIgY2xhc3M9InN0MSIgd2lkdGg9Ijg4IiBoZWlnaHQ9IjM2Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEzMy41IiB5MT0iMTg1LjUiIHgyPSIyMTEuNSIgeTI9IjE4NS41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjEzNC41IiB5MT0iMTY3LjUiIHgyPSIxMzQuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE0NS41IiB5MT0iMTY3LjUiIHgyPSIxNDUuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE3OC41IiB5MT0iMTY3LjUiIHgyPSIxNzguNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE4OS41IiB5MT0iMTY3LjUiIHgyPSIxODkuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjIwMC41IiB5MT0iMTY3LjUiIHgyPSIyMDAuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE1Ni41IiB5MT0iMTY3LjUiIHgyPSIxNTYuNSIgeTI9IjIwMy41Ii8+CgkJPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE2Ny41IiB5MT0iMTY3LjUiIHgyPSIxNjcuNSIgeTI9IjIwMy41Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzMS41LDE4Ny41di04LjJjMCwwLDI1LjEtNS4zLDI4LjItMTNsMy4xLTcuN2MwLDAtOC4zLTcuMS04LjktMTcuN2MwLDAtMy4xLDAuOS00LTkuNwoJCQljLTAuOS0xMC42LDIuMi03LjcsMi4yLTcuN3MtMS45LTE0LjcsMC0xOC45YzEuOS00LjEsMC45LTE1LjYsMjIuMi0yMS4yYzIxLjMtNS42LDI4LjMsMTIuMSwyOC4zLDEyLjFzMy43LDIuNCw0LjMsOC41CgkJCWMwLjYsNi4yLDAuOSwxOS4yLDAuOSwxOS4yczMuNC0wLjksMi44LDVjLTAuNiw1LjktMy4xLDEzLjgtNS41LDEzYzAsMC0xLjIsMTMuMy04LDE1LjZjMCwwLDEuNSwxMyw5LjUsMTUuM2M4LDIuNCwxOCw2LjIsMTgsNi4yCgkJCXY5TDIzMS41LDE4Ny41TDIzMS41LDE4Ny41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik0xMS41LDguNWgzMTZjNS41LDAsMTAsNC41LDEwLDEwdjE5MGMwLDUuNS00LjUsMTAtMTAsMTBoLTMxNmMtNS41LDAtMTAtNC41LTEwLTEwdi0xOTAKCQkJQzEuNSwxMyw2LDguNSwxMS41LDguNXoiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xMS41LDEuOWgzMTZjNS41LDAsMTAsNC40LDEwLDkuOHYxOTcuMWMwLDUuNC00LjUsOS44LTEwLDkuOGgtMzE2Yy01LjUsMC0xMC00LjQtMTAtOS44VjExLjYKCQlDMS41LDYuMyw2LDEuOSwxMS41LDEuOXoiLz4KPC9nPgo8L3N2Zz4K',
|
|
28270
|
+
// '#fff',
|
|
28271
|
+
// 1
|
|
28272
|
+
// );
|
|
28273
|
+
// }
|
|
28274
|
+
//
|
|
28275
|
+
// // resident
|
|
28276
|
+
//
|
|
28277
|
+
// if (cardType === 'JPN_ResidentCard_Thickness') {
|
|
28278
|
+
// frameImage(
|
|
28279
|
+
// faceMode,
|
|
28280
|
+
// 1,
|
|
28281
|
+
// 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzM5IDIyMC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMzkgMjIwLjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxLjU7fQoJLnN0MXtvcGFjaXR5OjAuNDtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Qye29wYWNpdHk6MC4yO2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDN7ZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO30KCS5zdDR7b3BhY2l0eTowLjQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtvcGFjaXR5OjAuNTtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Q2e2ZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6Mi45MjAyO30KPC9zdHlsZT4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTEuNiw5LjJoMzE2YzUuNSwwLDEwLDQuNSwxMCwxMHYxODkuN2MwLDUuNS00LjUsMTAtMTAsMTBoLTMxNmMtNS41LDAtMTAtNC41LTEwLTEwVjE5LjIKCQlDMS42LDEzLjcsNi4xLDkuMiwxMS42LDkuMnoiLz4KCTxyZWN0IHg9IjEuNiIgeT0iMTguMiIgY2xhc3M9InN0MSIgd2lkdGg9IjMzNiIgaGVpZ2h0PSIxNiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTMuNiwxOTMuOWgyNDFjMS4xLDAsMiwwLjksMiwydjEyYzAsMS4xLTAuOSwyLTIsMkgzLjZjLTEuMSwwLTItMC45LTItMnYtMTJDMS42LDE5NC44LDIuNSwxOTMuOSwzLjYsMTkzLjl6IgoJCS8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNODMuNiwxMTRoMTQ5YzEuMSwwLDIsMC45LDIsMnYyNGMwLDEuMS0wLjksMi0yLDJoLTE0OWMtMS4xLDAtMi0wLjktMi0ydi0yNEM4MS42LDExNC45LDgyLjUsMTE0LDgzLjYsMTE0eiIKCQkvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTIzOC42LDY0LjFoOTEuOGMxLjEsMCwyLDAuOSwyLDJ2MTE5YzAsMS4xLTAuOSwyLTIsMmgtOTEuOGMtMS4xLDAtMi0wLjktMi0ydi0xMTkKCQlDMjM2LjYsNjUsMjM3LjUsNjQuMSwyMzguNiw2NC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTIzOC42LDY0LjFoOTEuOGMxLjEsMCwyLDAuOSwyLDJ2MTE5YzAsMS4xLTAuOSwyLTIsMmgtOTEuOGMtMS4xLDAtMi0wLjktMi0ydi0xMTkKCQlDMjM2LjYsNjUsMjM3LjUsNjQuMSwyMzguNiw2NC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzOC42LDY1LjFoOTEuOGMwLjYsMCwxLDAuNCwxLDF2MTE5YzAsMC42LTAuNCwxLTEsMWgtOTEuOGMtMC42LDAtMS0wLjQtMS0xdi0xMTkKCQlDMjM3LjYsNjUuNSwyMzguMSw2NS4xLDIzOC42LDY1LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMTkxLjYsMTc3LjlsLTUtNmw1LTZsMCwwbDUsNkwxOTEuNiwxNzcuOUwxOTEuNiwxNzcuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik0yMjYuNiwxNzcuOWwtNS02bDUtNmwwLDBsNSw2TDIyNi42LDE3Ny45TDIyNi42LDE3Ny45eiIvPgoJPHBhdGggY2xhc3M9InN0NCIgZD0iTTIxOS42LDE3MS45bDUsNmwwLDBoLTMxbDUtNmwtNS02aDMxTDIxOS42LDE3MS45eiIvPgoJPHBhdGggY2xhc3M9InN0NSIgZD0iTTIzOC42LDE4Ny4yVjE3OWMwLDAsMjUuMS01LjMsMjguMi0xM2wzLjEtNy43YzAsMC04LjMtNy4xLTguOS0xNy43YzAsMC0zLjEsMC45LTQtOS43CgkJYy0wLjktMTAuNiwyLjItNy43LDIuMi03LjdzLTEuOS0xNC43LDAtMTguOWMxLjgtNC4xLDAuOS0xNS42LDIyLjItMjEuMmMyMS4zLTUuNiwyOC4zLDEyLjEsMjguMywxMi4xczMuNywyLjQsNC4zLDguNQoJCWMwLjYsNi4yLDAuOSwxOS4yLDAuOSwxOS4yczMuNC0wLjksMi44LDVjLTAuNiw1LjktMy4xLDEzLjgtNS41LDEzYzAsMC0xLjIsMTMuMy04LDE1LjZjMCwwLDEuNSwxMyw5LjUsMTUuM2M4LDIuNCwxOCw2LjIsMTgsNi4yCgkJdjlMMjM4LjYsMTg3LjJMMjM4LjYsMTg3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTEuNiwyLjJoMzE2YzUuNSwwLDEwLDQuNCwxMCw5Ljh2MTk3LjFjMCw1LjQtNC41LDkuOC0xMCw5LjhoLTMxNmMtNS41LDAtMTAtNC40LTEwLTkuOFYxMgoJCUMxLjYsNi42LDYuMSwyLjIsMTEuNiwyLjJ6Ii8+CjwvZz4KPC9zdmc+Cg==',
|
|
28282
|
+
// '#fff',
|
|
28283
|
+
// 1
|
|
28284
|
+
// );
|
|
28285
|
+
// }
|
|
28286
|
+
// border setting
|
|
28287
|
+
if (scanViewSetting.border.enable && cardTypeConfig.mode === 'manual') {
|
|
28288
|
+
setBorderType({
|
|
28289
|
+
type: scanViewSetting.border.type,
|
|
28290
|
+
strokeOpacity: 0,
|
|
28291
|
+
color: scanViewSetting.border.color
|
|
28292
|
+
});
|
|
28293
|
+
setCardBorderColor(null);
|
|
28294
|
+
// success setting
|
|
28295
|
+
// TODO need to check the success style
|
|
28296
|
+
if (scanViewSetting.success.enable) {
|
|
28297
|
+
setBorderSuccess(scanViewSetting.success.color, scanViewSetting.success.opacity);
|
|
28298
|
+
}
|
|
28299
|
+
} else {
|
|
28300
|
+
setBorderType({
|
|
28301
|
+
type: scanViewSetting.border.type,
|
|
28302
|
+
strokeOpacity: 0,
|
|
28303
|
+
color: scanViewSetting.border.color
|
|
28304
|
+
});
|
|
28305
|
+
if (scanViewSetting.success.enable) {
|
|
28306
|
+
setBorderSuccess(scanViewSetting.success.color, 0);
|
|
28307
|
+
}
|
|
28308
|
+
}
|
|
28309
|
+
// scan setting
|
|
28310
|
+
if (scanViewSetting.line.enable) {
|
|
28311
|
+
lottieScanSetting['scanColor'] = scanViewSetting.line.color;
|
|
28312
|
+
if (scanViewSetting.line.gradient.enable) {
|
|
28313
|
+
lottieScanSetting['scanOpacity'] = scanViewSetting.line.gradient.opacity;
|
|
28314
|
+
lottieScanSetting['scanGradient'] = scanViewSetting.line.gradient.color;
|
|
28315
|
+
}
|
|
28316
|
+
initScanAnimation(lottieScanSetting);
|
|
28317
|
+
}
|
|
28318
|
+
// content setting
|
|
28319
|
+
resetFrame();
|
|
28320
|
+
for (let i = 0; i < scanViewSetting.content.length; i++) {
|
|
28321
|
+
const contentSetting = scanViewSetting.content[i];
|
|
28322
|
+
if (contentSetting.type === 'svg') {
|
|
28323
|
+
const imageData = yield idRecognition.initScanDocumentResourceBase64(scanId, contentSetting.content);
|
|
28324
|
+
frameImage(faceMode, i, imageData.data, contentSetting.color, contentSetting.opacity);
|
|
28325
|
+
}
|
|
28326
|
+
if (contentSetting.type === 'text') {
|
|
28327
|
+
frameText(i, contentSetting.content, contentSetting.color, contentSetting.opacity);
|
|
28328
|
+
}
|
|
28329
|
+
}
|
|
28330
|
+
}
|
|
28331
|
+
return {
|
|
28332
|
+
thicknessWelcomeSetting
|
|
28333
|
+
};
|
|
28334
|
+
}),
|
|
28335
|
+
onThicknessFrame: (data, _base64, cardType, type) => __awaiter(this, void 0, void 0, function* () {
|
|
28336
|
+
var _e, _f;
|
|
28337
|
+
nextDebugRound(type);
|
|
28338
|
+
const antiFraudRecogitionResult = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
28339
|
+
var _g;
|
|
28340
|
+
return yield (_g = this.antiFraudInstance) === null || _g === void 0 ? void 0 : _g.recognition(data);
|
|
28341
|
+
}), {
|
|
28342
|
+
runFunction: util.RUN_FUNCTION_NAME.ANTI_FARUD_RECOGNITION,
|
|
28343
|
+
isAntiFraud: true
|
|
28344
|
+
});
|
|
28345
|
+
if (!cardType) {
|
|
28346
|
+
return antiFraudRecogitionResult;
|
|
28347
|
+
}
|
|
28348
|
+
if (this.canvas) {
|
|
28349
|
+
const debugData = yield (_e = this.antiFraudInstance) === null || _e === void 0 ? void 0 : _e.getDebugImageData(data);
|
|
28350
|
+
const ctx = this.canvas.getContext('2d');
|
|
28351
|
+
this.canvas.width = frameWidth;
|
|
28352
|
+
this.canvas.height = frameHeight;
|
|
28353
|
+
ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
28354
|
+
const imgData = ctx.createImageData(frameWidth, frameHeight);
|
|
28355
|
+
imgData.data.set(debugData);
|
|
28356
|
+
ctx.putImageData(imgData, 0, 0);
|
|
28357
|
+
}
|
|
28358
|
+
saveDebugImage({
|
|
28359
|
+
data,
|
|
28360
|
+
type,
|
|
28361
|
+
getDebugImageData: (_f = this.antiFraudInstance) === null || _f === void 0 ? void 0 : _f.getDebugImageData.bind(this.antiFraudInstance),
|
|
28362
|
+
result,
|
|
28363
|
+
width: frameWidth,
|
|
28364
|
+
height: frameHeight
|
|
28365
|
+
});
|
|
28366
|
+
const fraudOriginImg = util.UintArrayToBlob(frameWidth, frameHeight, data, virtualCanvas);
|
|
28367
|
+
const thicknessResult = Object.assign(Object.assign({}, antiFraudRecogitionResult), {
|
|
28368
|
+
imageData: data
|
|
28369
|
+
});
|
|
28370
|
+
if (antiFraudRecogitionResult.eStatus === idRecognition.EAuthMeIDCardAntiFraudStatus.Pass || antiFraudRecogitionResult.eStatus === idRecognition.EAuthMeIDCardAntiFraudStatus.Failed) {
|
|
28371
|
+
yield this.antiFraudInstance.stop();
|
|
28372
|
+
yield this.antiFraudInstance.destroy();
|
|
28373
|
+
} else if (uploadFullFrame) {
|
|
28374
|
+
const docId = docInfos[cardType].docId;
|
|
28375
|
+
const requestImg = yield encryptImageBase64(fraudOriginImg);
|
|
28376
|
+
pushNewDebugImage(fraudOriginImg, {
|
|
28377
|
+
result: thicknessResult,
|
|
28378
|
+
status: 'recognition',
|
|
28379
|
+
type: type,
|
|
28380
|
+
isAntiFraud: true
|
|
28381
|
+
});
|
|
28382
|
+
frameIndex++;
|
|
28383
|
+
util.backgroundRequest(() => idRecognition.uploadFrameBase64(docId, requestImg, frameIndex, idRecognition.ResourceImageType.Recognition // upload fill frame 時先使用 recognition 當成一個過渡方案, 目前後端會對這個處理存成 original image, 後續會再調整
|
|
28384
|
+
));
|
|
28385
|
+
}
|
|
28386
|
+
|
|
28387
|
+
return thicknessResult;
|
|
28388
|
+
}),
|
|
28389
|
+
confirmThickness: (imageData, cardType) => __awaiter(this, void 0, void 0, function* () {
|
|
28390
|
+
const frameIndex = 0;
|
|
28391
|
+
const docId = docInfos[cardType].docId;
|
|
28392
|
+
const requestImg = yield encryptImageBase64(imageData);
|
|
28393
|
+
try {
|
|
28394
|
+
yield SendRequestWithRetry(() => idRecognition.uploadFrameBase64(docId, requestImg, frameIndex, idRecognition.ResourceImageType.Attach, undefined));
|
|
28395
|
+
yield SendRequestWithRetry(() => idRecognition.finishScanDocument(docId, {}, null));
|
|
28396
|
+
return true;
|
|
28397
|
+
} catch (error) {
|
|
28398
|
+
console.error('confirmThickness:', error);
|
|
28399
|
+
return false;
|
|
28400
|
+
}
|
|
28401
|
+
}),
|
|
27123
28402
|
cardTypes,
|
|
27124
28403
|
acceptTypes: cardTypes.map(idRecognition.mapCardtypeToAuthmeClass),
|
|
27125
28404
|
recognition: (data, _base64, cardType, type) => __awaiter(this, void 0, void 0, function* () {
|
|
27126
28405
|
const durationTimeRecognition = setTimeDuration(`ocr_recognition_${type}`);
|
|
27127
28406
|
nextDebugRound(type);
|
|
27128
|
-
const _service =
|
|
27129
|
-
? this.residentCardMrzService : this.ocrService;
|
|
28407
|
+
const _service = this.ocrService;
|
|
27130
28408
|
const result = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
27131
28409
|
return yield _service.recognition(data);
|
|
27132
28410
|
}), {
|
|
@@ -27151,7 +28429,6 @@ class OCRModule {
|
|
|
27151
28429
|
height: frameHeight
|
|
27152
28430
|
});
|
|
27153
28431
|
const ocrOriginImg = util.UintArrayToBlob(frameWidth, frameHeight, data, virtualCanvas);
|
|
27154
|
-
// console.log("cardType:" + cardType + ":" + docInfos[cardType ?? ""]);
|
|
27155
28432
|
const eClass = cardType !== null && cardType !== void 0 ? cardType : '';
|
|
27156
28433
|
if (result.eStatus === idRecognition.EAuthMeCardOCRStatus.Pass && result.imageData && !!docInfos[eClass].docId) {
|
|
27157
28434
|
const resultOcrImg = util.UintArrayToBlob(result.iWidth, result.iHeight, result === null || result === void 0 ? void 0 : result.imageData, virtualCanvas);
|
|
@@ -27183,7 +28460,7 @@ class OCRModule {
|
|
|
27183
28460
|
durationTimeRecognition.end();
|
|
27184
28461
|
return result;
|
|
27185
28462
|
}),
|
|
27186
|
-
confirmImage: (type, cardType) => __awaiter(this, void 0, void 0, function* () {
|
|
28463
|
+
confirmImage: (type, cardType, imageData) => __awaiter(this, void 0, void 0, function* () {
|
|
27187
28464
|
// 將二進位圖片進行加密,目前不需要使用,不確定未來是否需要,先註解
|
|
27188
28465
|
// const encryptImage = async (blob: Blob): Promise<Blob> => {
|
|
27189
28466
|
// const imageArrayBuffer = await blobToArrayBuffer(blob);
|
|
@@ -27197,7 +28474,12 @@ class OCRModule {
|
|
|
27197
28474
|
const docId = docInfos[cardType].docId;
|
|
27198
28475
|
if (docId) {
|
|
27199
28476
|
const needFraudOption = config.needAntiFraud && type === engine.EAuthMeCardClass.TWN_IDCard_Front;
|
|
27200
|
-
|
|
28477
|
+
let ocrOriginImg;
|
|
28478
|
+
if (imageData) {
|
|
28479
|
+
ocrOriginImg = imageData;
|
|
28480
|
+
} else {
|
|
28481
|
+
ocrOriginImg = docInfos[cardType].ocrOriginImg;
|
|
28482
|
+
}
|
|
27201
28483
|
const requestImg = yield encryptImageBase64(ocrOriginImg);
|
|
27202
28484
|
const report = yield this.ocrService.getReport();
|
|
27203
28485
|
docInfos[cardType].docId = '';
|
|
@@ -27212,7 +28494,7 @@ class OCRModule {
|
|
|
27212
28494
|
const _requestImg = yield encryptImageBase64(ocrImg);
|
|
27213
28495
|
const resp = yield SendRequestWithRetry(() => idRecognition.recognitionEncrypt(docId, _requestImg, report, idRecognition.RecognitionFileType.FlatImage));
|
|
27214
28496
|
if (resp.retry) {
|
|
27215
|
-
yield util.asyncShowPopup(translateService.translate('verify.error.
|
|
28497
|
+
yield util.asyncShowPopup(translateService.translate('sdk.verify.error.blurRetake.title'), translateService.translate('sdk.verify.error.blurRetake.content'), true);
|
|
27216
28498
|
throw 'recognition failed';
|
|
27217
28499
|
}
|
|
27218
28500
|
result = unionMerge(result, resp && resp.details || {});
|
|
@@ -27230,7 +28512,32 @@ class OCRModule {
|
|
|
27230
28512
|
return false;
|
|
27231
28513
|
}
|
|
27232
28514
|
}),
|
|
27233
|
-
|
|
28515
|
+
ocrCancel: (type, cardType, imageData) => __awaiter(this, void 0, void 0, function* () {
|
|
28516
|
+
const docId = docInfos[cardType].docId;
|
|
28517
|
+
if (docId) {
|
|
28518
|
+
let ocrOriginImg;
|
|
28519
|
+
if (imageData) {
|
|
28520
|
+
ocrOriginImg = imageData;
|
|
28521
|
+
} else {
|
|
28522
|
+
ocrOriginImg = docInfos[cardType].ocrOriginImg;
|
|
28523
|
+
}
|
|
28524
|
+
const requestImg = yield encryptImageBase64(ocrOriginImg);
|
|
28525
|
+
yield this.ocrService.stop();
|
|
28526
|
+
const report = yield this.ocrService.getReport();
|
|
28527
|
+
docInfos[cardType].docId = '';
|
|
28528
|
+
modifyDeubgLog(getDebugLogsLength() - 1, {
|
|
28529
|
+
report: report
|
|
28530
|
+
});
|
|
28531
|
+
frameIndex++;
|
|
28532
|
+
SendRequestWithRetry(() => idRecognition.uploadFrameBase64(docId, requestImg, frameIndex, idRecognition.ResourceImageType.Recognition, report));
|
|
28533
|
+
frameIndex = 0;
|
|
28534
|
+
return true;
|
|
28535
|
+
} else {
|
|
28536
|
+
console.error('didnt find docid , retry');
|
|
28537
|
+
return false;
|
|
28538
|
+
}
|
|
28539
|
+
}),
|
|
28540
|
+
antiFraudStart: (points, setBorderType, setCardBorderColor, setBorderSuccess, scanAnimationContainer, successAnimationContainer, frameImage, frameText, faceMode) => __awaiter(this, void 0, void 0, function* () {
|
|
27234
28541
|
yield this.antiFraudInstance.init();
|
|
27235
28542
|
yield this.antiFraudInstance.setFrameSize(frameWidth, frameHeight);
|
|
27236
28543
|
yield this.antiFraudInstance.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
@@ -27261,15 +28568,30 @@ class OCRModule {
|
|
|
27261
28568
|
fraudResult: null
|
|
27262
28569
|
};
|
|
27263
28570
|
}
|
|
28571
|
+
const lottieSuccessSetting = {
|
|
28572
|
+
animationContainer: successAnimationContainer
|
|
28573
|
+
};
|
|
28574
|
+
initSuccessAnimation(lottieSuccessSetting);
|
|
28575
|
+
// TODO 等開始處理防偽的時候再處理
|
|
28576
|
+
// if (resp.scanView && resp.scanView.enable) {
|
|
28577
|
+
// setBorderType({
|
|
28578
|
+
// type: resp.scanView.type
|
|
28579
|
+
// })
|
|
28580
|
+
// setCardBorderColor(null)
|
|
28581
|
+
// } else {
|
|
28582
|
+
// setBorderType({
|
|
28583
|
+
// type: 'cornered',
|
|
28584
|
+
// })
|
|
28585
|
+
// }
|
|
27264
28586
|
return true;
|
|
27265
28587
|
}),
|
|
27266
28588
|
onAntiFraudFrame: data => __awaiter(this, void 0, void 0, function* () {
|
|
27267
|
-
var
|
|
28589
|
+
var _h, _j;
|
|
27268
28590
|
const type = engine.EAuthMeCardClass.TWN_IDCard_Front;
|
|
27269
28591
|
nextDebugRound(type);
|
|
27270
28592
|
const antiFraudRecogitionResult = yield functionLogging(() => __awaiter(this, void 0, void 0, function* () {
|
|
27271
|
-
var
|
|
27272
|
-
return yield (
|
|
28593
|
+
var _k;
|
|
28594
|
+
return yield (_k = this.antiFraudInstance) === null || _k === void 0 ? void 0 : _k.recognition(data);
|
|
27273
28595
|
}), {
|
|
27274
28596
|
runFunction: util.RUN_FUNCTION_NAME.ANTI_FARUD_RECOGNITION,
|
|
27275
28597
|
isAntiFraud: true
|
|
@@ -27278,7 +28600,7 @@ class OCRModule {
|
|
|
27278
28600
|
return antiFraudRecogitionResult;
|
|
27279
28601
|
}
|
|
27280
28602
|
if (this.canvas) {
|
|
27281
|
-
const debugData = yield (
|
|
28603
|
+
const debugData = yield (_h = this.antiFraudInstance) === null || _h === void 0 ? void 0 : _h.getDebugImageData(data);
|
|
27282
28604
|
const ctx = this.canvas.getContext('2d');
|
|
27283
28605
|
this.canvas.width = frameWidth;
|
|
27284
28606
|
this.canvas.height = frameHeight;
|
|
@@ -27290,7 +28612,7 @@ class OCRModule {
|
|
|
27290
28612
|
saveDebugImage({
|
|
27291
28613
|
data,
|
|
27292
28614
|
type,
|
|
27293
|
-
getDebugImageData: (
|
|
28615
|
+
getDebugImageData: (_j = this.antiFraudInstance) === null || _j === void 0 ? void 0 : _j.getDebugImageData.bind(this.antiFraudInstance),
|
|
27294
28616
|
result,
|
|
27295
28617
|
width: frameWidth,
|
|
27296
28618
|
height: frameHeight
|
|
@@ -27334,27 +28656,27 @@ class OCRModule {
|
|
|
27334
28656
|
return antiFraudStageList;
|
|
27335
28657
|
},
|
|
27336
28658
|
setFrameSize: (width, height, points) => __awaiter(this, void 0, void 0, function* () {
|
|
27337
|
-
var
|
|
28659
|
+
var _l, _m, _o, _p;
|
|
27338
28660
|
frameWidth = width;
|
|
27339
28661
|
frameHeight = height;
|
|
27340
|
-
yield (
|
|
27341
|
-
yield (
|
|
28662
|
+
yield (_l = this.ocrService) === null || _l === void 0 ? void 0 : _l.setFrameSize(width, height);
|
|
28663
|
+
yield (_m = this.antiFraudInstance) === null || _m === void 0 ? void 0 : _m.setFrameSize(width, height);
|
|
27342
28664
|
if (config.type === idRecognition.IdRecognitionCardType.ResidentCard) {
|
|
27343
28665
|
// workaround: resident card need MRZ, refactor later.
|
|
27344
|
-
yield (
|
|
28666
|
+
yield (_o = this.residentCardMrzService) === null || _o === void 0 ? void 0 : _o.setFrameSize(width, height);
|
|
27345
28667
|
}
|
|
27346
28668
|
if (points) {
|
|
27347
|
-
yield (
|
|
28669
|
+
yield (_p = this.ocrService) === null || _p === void 0 ? void 0 : _p.setMaskPosition(points.map(([x, y]) => [Number(x.toFixed(2)), Number(y.toFixed(2))]));
|
|
27348
28670
|
}
|
|
27349
28671
|
}),
|
|
27350
28672
|
onSuccess: () => __awaiter(this, void 0, void 0, function* () {
|
|
27351
|
-
var
|
|
28673
|
+
var _q, _r, _s;
|
|
27352
28674
|
durationTime.end();
|
|
27353
28675
|
const ocrIdcardResultFormat = util.Storage.getItem(util.STORAGE_KEY['OCR_IDCARD_RESULT_FORMAT']);
|
|
27354
|
-
(
|
|
27355
|
-
(
|
|
28676
|
+
(_q = this.antiFraudInstance) === null || _q === void 0 ? void 0 : _q.destroy();
|
|
28677
|
+
(_r = this.ocrService) === null || _r === void 0 ? void 0 : _r.destroy();
|
|
27356
28678
|
// workaround: resident card need MRZ, refactor later.
|
|
27357
|
-
(
|
|
28679
|
+
(_s = this.residentCardMrzService) === null || _s === void 0 ? void 0 : _s.destroy();
|
|
27358
28680
|
if (config.type === idRecognition.IdRecognitionCardType.IDCard && ocrIdcardResultFormat === 'splitDateAndAddress') {
|
|
27359
28681
|
result = util.splitResult(result);
|
|
27360
28682
|
}
|
|
@@ -27365,10 +28687,10 @@ class OCRModule {
|
|
|
27365
28687
|
};
|
|
27366
28688
|
}),
|
|
27367
28689
|
onDestroy: () => __awaiter(this, void 0, void 0, function* () {
|
|
27368
|
-
var
|
|
28690
|
+
var _t, _u;
|
|
27369
28691
|
durationTime.end();
|
|
27370
|
-
yield (
|
|
27371
|
-
yield (
|
|
28692
|
+
yield (_t = this.ocrService) === null || _t === void 0 ? void 0 : _t.destroy();
|
|
28693
|
+
yield (_u = this.antiFraudInstance) === null || _u === void 0 ? void 0 : _u.destroy();
|
|
27372
28694
|
}),
|
|
27373
28695
|
getCardMatchROI: () => __awaiter(this, void 0, void 0, function* () {
|
|
27374
28696
|
return yield this.antiFraudInstance.getCardMatchROI();
|
|
@@ -27410,96 +28732,20 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27410
28732
|
setStatusEvent(core.StatusEvent.SelectCardTypeAndCountry);
|
|
27411
28733
|
setStatusView$1(core.StatusView.Select);
|
|
27412
28734
|
sendStatusAction(core.StatusAction.Show);
|
|
27413
|
-
const allCardTypes = Object.values(idRecognition.IdRecognitionCardType);
|
|
27414
|
-
config.supportCardTypes(config.defaultCountry);
|
|
27415
28735
|
const translate = key => core.getTranslateInstance().translate(key);
|
|
27416
|
-
const extraInfoWeapMap = new WeakMap();
|
|
27417
|
-
const componentElem = _render('div', elem => elem.classList.add('authme-select-container'), [_render('div', elem => elem.classList.add('menu-header'), [_render('div', elem => elem.classList.add('menu-header-left'), [_render('i', elem => elem.classList.add('menu-header-back'))]), _render('div', elem => elem.classList.add('menu-header-title'), [_render('div', elem => {
|
|
27418
|
-
elem.classList.add('menu-header-title-text');
|
|
27419
|
-
})]), _render('div', elem => elem.classList.add('menu-header-right'), [_render('i', elem => elem.classList.add('menu-header-close'))])]), _render('div', elem => elem.classList.add('menu-content'), [_render('div', elem => elem.classList.add('country-select'), [_render('label', elem => {
|
|
27420
|
-
elem.classList.add('country-select-label');
|
|
27421
|
-
elem.innerText = translate('verify.menu.country');
|
|
27422
|
-
}), _render('div', elem => elem.classList.add('country-select-dropdown'), [_render('div', elem => elem.classList.add('country-select-dropdown-frame'), [_render('div', elem => {
|
|
27423
|
-
elem.classList.add('country-select-dropdown-text');
|
|
27424
|
-
elem.innerText = translate(`verify.menu.country.${idRecognition.CountryCode.TWN}`);
|
|
27425
|
-
}), _render('div', elem => elem.classList.add('country-select-dropdown-icon'))]), _render('div', elem => {
|
|
27426
|
-
elem.classList.add('dropdown-country-list');
|
|
27427
|
-
})])]), _render('div', elem => elem.classList.add('card-type-select'), [_render('label', elem => {
|
|
27428
|
-
elem.classList.add('card-type-select-label');
|
|
27429
|
-
elem.innerText = translate('verify.menu.card.type');
|
|
27430
|
-
}), ...allCardTypes.map(cardType => _render('div', elem => {
|
|
27431
|
-
elem.classList.add('card-out-frame');
|
|
27432
|
-
elem.classList.add('card-frame');
|
|
27433
|
-
elem.classList.add('card-frame-' + cardType.toLowerCase());
|
|
27434
|
-
extraInfoWeapMap.set(elem, {
|
|
27435
|
-
cardType
|
|
27436
|
-
});
|
|
27437
|
-
}, [_render('div', elem => elem.classList.add('card-in-frame'), [_render('label', elem => {
|
|
27438
|
-
elem.classList.add('card-label');
|
|
27439
|
-
elem.classList.add(cardType.toLocaleLowerCase());
|
|
27440
|
-
elem.innerText = translate(`verify.menu.card.${cardType}`);
|
|
27441
|
-
}), _render('i', elem => elem.classList.add('card-icon'))])]))]), _render('div', elem => elem.classList.add('space')), _render('div', elem => {
|
|
27442
|
-
elem.classList.add('menu-content-footer');
|
|
27443
|
-
}, [_render('div', elem => {
|
|
27444
|
-
elem.classList.add('menu-content-footer-content');
|
|
27445
|
-
}, [_render('div', elem => {
|
|
27446
|
-
elem.classList.add('footer-confirm-button');
|
|
27447
|
-
elem.classList.add('disable');
|
|
27448
|
-
elem.innerText = translate(`liveness.continue`);
|
|
27449
|
-
}), _render('div', elem => {
|
|
27450
|
-
elem.classList.add('footer-statement');
|
|
27451
|
-
elem.innerText = translate(`verify.menu.footer.content`);
|
|
27452
|
-
})])])])]);
|
|
27453
28736
|
let currentCardTypeAndCountry;
|
|
27454
|
-
const removeAllChild = element => {
|
|
27455
|
-
while (element.firstChild) {
|
|
27456
|
-
element.removeChild(element.firstChild);
|
|
27457
|
-
}
|
|
27458
|
-
};
|
|
27459
|
-
const reloadCardTypeSelect = currentCountry => {
|
|
27460
|
-
const countryList = config.supportCountries;
|
|
27461
|
-
const dropdownCountryList = componentElem.querySelector('.authme-select-container .dropdown-country-list');
|
|
27462
|
-
removeAllChild(dropdownCountryList);
|
|
27463
|
-
const frames = document.querySelectorAll('.card-frame');
|
|
27464
|
-
for (let i = 0; i < frames.length; i++) {
|
|
27465
|
-
frames[i].style.display = 'none';
|
|
27466
|
-
}
|
|
27467
|
-
const cardtypes = config.supportCardTypes(currentCountry);
|
|
27468
|
-
cardtypes.forEach(cardType => {
|
|
27469
|
-
const node = componentElem.querySelector('.card-frame-' + cardType.toLowerCase());
|
|
27470
|
-
node.style.display = '';
|
|
27471
|
-
});
|
|
27472
|
-
countryList.filter(country => country !== currentCountry).forEach(country => {
|
|
27473
|
-
const countryElem = _render('div', elem => {
|
|
27474
|
-
elem.classList.add('dropdown-country-list-item');
|
|
27475
|
-
extraInfoWeapMap.set(elem, {
|
|
27476
|
-
country
|
|
27477
|
-
});
|
|
27478
|
-
elem.addEventListener('click', event => {
|
|
27479
|
-
event.stopPropagation();
|
|
27480
|
-
setCurrentCountry(country);
|
|
27481
|
-
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27482
|
-
country
|
|
27483
|
-
});
|
|
27484
|
-
});
|
|
27485
|
-
}, [_render('div', elem => {
|
|
27486
|
-
elem.classList.add('dropdown-country-list-item-frame');
|
|
27487
|
-
}, [_render('div', elem => {
|
|
27488
|
-
elem.classList.add('dropdown-country-list-item-text');
|
|
27489
|
-
elem.innerText = translate(`verify.menu.country.${country}`);
|
|
27490
|
-
})])]);
|
|
27491
|
-
dropdownCountryList.appendChild(countryElem);
|
|
27492
|
-
});
|
|
27493
|
-
};
|
|
27494
28737
|
const setCurrentCountry = (country, disableSwitch = false) => {
|
|
27495
|
-
const countrySelectDropdown =
|
|
28738
|
+
const countrySelectDropdown = containerDom.querySelector('.authme-select-container .country-select-dropdown');
|
|
27496
28739
|
const countrySelectDropdownFramw = countrySelectDropdown.querySelector('.country-select-dropdown-frame');
|
|
27497
28740
|
const countrySelectDropdownText = countrySelectDropdownFramw.querySelector('.country-select-dropdown-text');
|
|
27498
28741
|
if (!disableSwitch) {
|
|
27499
28742
|
dropdownSwitch(false);
|
|
27500
28743
|
}
|
|
27501
|
-
|
|
27502
|
-
|
|
28744
|
+
currentCardTypes = config.supportCardTypes(country);
|
|
28745
|
+
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
28746
|
+
country
|
|
28747
|
+
});
|
|
28748
|
+
countrySelectDropdownText.innerText = translate(`sdk.home.selectCountry.${country}`);
|
|
27503
28749
|
};
|
|
27504
28750
|
const dropdownSwitch = switchTarget => {
|
|
27505
28751
|
const closeDropdown = () => {
|
|
@@ -27509,20 +28755,83 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27509
28755
|
countrySelectDropdown.classList.remove('closing');
|
|
27510
28756
|
}, 280);
|
|
27511
28757
|
};
|
|
27512
|
-
const countrySelectDropdown =
|
|
28758
|
+
const countrySelectDropdown = containerDom.querySelector('.authme-select-container .country-select-dropdown');
|
|
27513
28759
|
if (switchTarget !== undefined) {
|
|
27514
28760
|
switchTarget === false ? closeDropdown() : countrySelectDropdown.classList.add('active');
|
|
27515
28761
|
return;
|
|
27516
28762
|
}
|
|
27517
28763
|
countrySelectDropdown.classList.contains('active') ? closeDropdown() : countrySelectDropdown.classList.add('active');
|
|
27518
28764
|
};
|
|
28765
|
+
let currentCardTypes = config.supportCardTypes(config.defaultCountry);
|
|
28766
|
+
const containerDom = document.createElement('div');
|
|
28767
|
+
containerDom.classList.add('authme-select-container');
|
|
28768
|
+
containerDom.innerHTML = `
|
|
28769
|
+
<div class="menu-header">
|
|
28770
|
+
<div class="menu-header-left">
|
|
28771
|
+
<i class="menu-header-back"></i>
|
|
28772
|
+
</div>
|
|
28773
|
+
<div class="menu-header-title">
|
|
28774
|
+
<div class="menu-header-title-text"></div>
|
|
28775
|
+
</div>
|
|
28776
|
+
<div class="menu-header-right">
|
|
28777
|
+
<i class="menu-header-close"></i>
|
|
28778
|
+
</div>
|
|
28779
|
+
</div>
|
|
28780
|
+
<div class="menu-content">
|
|
28781
|
+
<div class="country-select">
|
|
28782
|
+
<label class="country-select-label">${translate('sdk.home.selectCountry')}</label>
|
|
28783
|
+
<div class="country-select-dropdown">
|
|
28784
|
+
<div class="country-select-dropdown-frame">
|
|
28785
|
+
<div class="country-select-dropdown-text">${translate(`sdk.home.selectCountry.${idRecognition.CountryCode.TWN}`)}</div>
|
|
28786
|
+
<div class="country-select-dropdown-icon"></div>
|
|
28787
|
+
</div>
|
|
28788
|
+
<div class="dropdown-country-list"></div>
|
|
28789
|
+
</div>
|
|
28790
|
+
</div>
|
|
28791
|
+
<div class="card-type-select">
|
|
28792
|
+
<label class="card-type-select-label">${translate('sdk.home.selectDocument')}</label>
|
|
28793
|
+
</div>
|
|
28794
|
+
<div class="space"></div>
|
|
28795
|
+
<div class="menu-content-footer">
|
|
28796
|
+
<div class="menu-content-footer-content">
|
|
28797
|
+
<div class="footer-confirm-button disable">${translate(`sdk.general.continue`)}</div>
|
|
28798
|
+
<div class="footer-statement">${translate(`sdk.general.footer`)}</div>
|
|
28799
|
+
</div>
|
|
28800
|
+
</div>
|
|
28801
|
+
</div>
|
|
28802
|
+
`;
|
|
28803
|
+
const confirmBtn = containerDom.querySelector('.footer-confirm-button');
|
|
28804
|
+
const initCountryList = currentCountry => {
|
|
28805
|
+
const countryList = config.supportCountries;
|
|
28806
|
+
const dropdownCountryList = containerDom.querySelector('.dropdown-country-list');
|
|
28807
|
+
const countries = dropdownCountryList === null || dropdownCountryList === void 0 ? void 0 : dropdownCountryList.querySelectorAll('.dropdown-country-list-item');
|
|
28808
|
+
for (let index = countries.length - 1; index >= 0; index--) {
|
|
28809
|
+
countries[index].remove();
|
|
28810
|
+
}
|
|
28811
|
+
countryList.filter(country => country !== currentCountry).forEach(country => {
|
|
28812
|
+
const countryDom = document.createElement('div');
|
|
28813
|
+
countryDom.classList.add('dropdown-country-list-item');
|
|
28814
|
+
countryDom.innerHTML = `
|
|
28815
|
+
<div class="dropdown-country-list-item-frame">
|
|
28816
|
+
<div class="dropdown-country-list-item-text">${translate(`sdk.home.selectCountry.${country}`)}</div>
|
|
28817
|
+
</div>
|
|
28818
|
+
`;
|
|
28819
|
+
countryDom.addEventListener('click', event => {
|
|
28820
|
+
event.stopPropagation();
|
|
28821
|
+
setCurrentCountry(country);
|
|
28822
|
+
initCardTypeList();
|
|
28823
|
+
initCountryList(country);
|
|
28824
|
+
});
|
|
28825
|
+
dropdownCountryList.appendChild(countryDom);
|
|
28826
|
+
});
|
|
28827
|
+
};
|
|
27519
28828
|
const initCountrySelectDropdown = () => {
|
|
27520
|
-
const countrySelectDropdown =
|
|
28829
|
+
const countrySelectDropdown = containerDom.querySelector('.country-select-dropdown');
|
|
27521
28830
|
const countryList = config.supportCountries;
|
|
27522
|
-
setCurrentCountry(config.defaultCountry, true);
|
|
27523
28831
|
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27524
28832
|
country: config.defaultCountry
|
|
27525
28833
|
});
|
|
28834
|
+
initCountryList(config.defaultCountry);
|
|
27526
28835
|
countrySelectDropdown.addEventListener('click', () => {
|
|
27527
28836
|
if (countryList.length <= 1) {
|
|
27528
28837
|
return;
|
|
@@ -27530,32 +28839,55 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27530
28839
|
dropdownSwitch();
|
|
27531
28840
|
});
|
|
27532
28841
|
};
|
|
27533
|
-
|
|
27534
|
-
const
|
|
27535
|
-
const
|
|
27536
|
-
const
|
|
27537
|
-
|
|
27538
|
-
|
|
27539
|
-
|
|
27540
|
-
const
|
|
27541
|
-
|
|
27542
|
-
|
|
27543
|
-
|
|
28842
|
+
const handleCardTypeClick = e => {
|
|
28843
|
+
const currentTarget = e.currentTarget;
|
|
28844
|
+
const list = currentTarget.parentElement.querySelectorAll('.card-out-frame');
|
|
28845
|
+
const matchSupportCardType = JSON.parse(currentTarget.dataset.cardTypeObj);
|
|
28846
|
+
// const matchSupportCardType = currentCardTypes.find(
|
|
28847
|
+
// (item) => item.cardType === currentTarget.dataset.cardType
|
|
28848
|
+
// );
|
|
28849
|
+
const cardType = matchSupportCardType === null || matchSupportCardType === void 0 ? void 0 : matchSupportCardType.cardType;
|
|
28850
|
+
const config = (matchSupportCardType === null || matchSupportCardType === void 0 ? void 0 : matchSupportCardType.config) || {};
|
|
28851
|
+
currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
28852
|
+
cardType,
|
|
28853
|
+
config
|
|
27544
28854
|
});
|
|
27545
|
-
|
|
27546
|
-
|
|
27547
|
-
|
|
27548
|
-
|
|
27549
|
-
|
|
27550
|
-
|
|
27551
|
-
|
|
27552
|
-
|
|
27553
|
-
|
|
27554
|
-
|
|
27555
|
-
|
|
28855
|
+
list.forEach(item => {
|
|
28856
|
+
item.classList.remove('active');
|
|
28857
|
+
});
|
|
28858
|
+
currentTarget.classList.add('active');
|
|
28859
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.classList.remove('disable');
|
|
28860
|
+
};
|
|
28861
|
+
const initCardTypeList = () => {
|
|
28862
|
+
const cardTypeSelect = containerDom.querySelector('.card-type-select');
|
|
28863
|
+
const cardTypeList = cardTypeSelect === null || cardTypeSelect === void 0 ? void 0 : cardTypeSelect.querySelectorAll('.card-type-item');
|
|
28864
|
+
if (!cardTypeSelect || !cardTypeList) {
|
|
28865
|
+
return;
|
|
28866
|
+
}
|
|
28867
|
+
for (let index = cardTypeList.length - 1; index >= 0; index--) {
|
|
28868
|
+
const cardTypeDom = cardTypeList[index];
|
|
28869
|
+
cardTypeDom.removeEventListener('click', handleCardTypeClick);
|
|
28870
|
+
cardTypeDom.remove();
|
|
28871
|
+
}
|
|
28872
|
+
currentCardTypes.forEach(item => {
|
|
28873
|
+
const dom = document.createElement('div');
|
|
28874
|
+
dom.setAttribute('class', `card-out-frame card-frame card-type-item card-frame-${item.cardType.toLowerCase()}`);
|
|
28875
|
+
dom.setAttribute('data-card-type', item.cardType);
|
|
28876
|
+
dom.setAttribute('data-card-type-obj', JSON.stringify(item));
|
|
28877
|
+
dom.addEventListener('click', handleCardTypeClick);
|
|
28878
|
+
dom.innerHTML = `
|
|
28879
|
+
<div class="card-in-frame">
|
|
28880
|
+
<label class="card-label ${item.cardType.toLowerCase()}">${item.display}</label>
|
|
28881
|
+
<i class="card-icon"></i>
|
|
28882
|
+
</div>
|
|
28883
|
+
`;
|
|
28884
|
+
cardTypeSelect.appendChild(dom);
|
|
27556
28885
|
});
|
|
27557
|
-
confirmBtn.
|
|
27558
|
-
|
|
28886
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.classList.add('disable');
|
|
28887
|
+
};
|
|
28888
|
+
return new Promise((resolve, reject) => {
|
|
28889
|
+
confirmBtn === null || confirmBtn === void 0 ? void 0 : confirmBtn.addEventListener('click', () => {
|
|
28890
|
+
containerDom.remove();
|
|
27559
28891
|
const _currentCardTypeAndCountry = Object.assign(Object.assign({}, currentCardTypeAndCountry), {
|
|
27560
28892
|
hasResult: true
|
|
27561
28893
|
});
|
|
@@ -27563,16 +28895,18 @@ function renderCardTypeAndCountryConfig(config) {
|
|
|
27563
28895
|
eventListenerService.stop();
|
|
27564
28896
|
resolve(_currentCardTypeAndCountry);
|
|
27565
28897
|
});
|
|
27566
|
-
const
|
|
27567
|
-
|
|
27568
|
-
|
|
28898
|
+
const menuBackDom = containerDom.querySelector('.menu-header-close');
|
|
28899
|
+
menuBackDom.addEventListener('click', () => {
|
|
28900
|
+
containerDom.remove();
|
|
27569
28901
|
sendStatusAction(core.StatusAction.BtnClose);
|
|
27570
28902
|
eventListenerService.stop();
|
|
27571
28903
|
resolve({
|
|
27572
28904
|
hasResult: false
|
|
27573
28905
|
});
|
|
27574
28906
|
});
|
|
27575
|
-
document.body.appendChild(
|
|
28907
|
+
document.body.appendChild(containerDom);
|
|
28908
|
+
initCountrySelectDropdown();
|
|
28909
|
+
initCardTypeList();
|
|
27576
28910
|
});
|
|
27577
28911
|
}
|
|
27578
28912
|
|
|
@@ -27645,7 +28979,7 @@ class AuthmeIdentityVerification extends engine.AuthmeFunctionModule {
|
|
|
27645
28979
|
yield core.getTranslateInstance().fetchSource(`${config.scriptPath}locale`);
|
|
27646
28980
|
} catch (error) {
|
|
27647
28981
|
if (error instanceof core.AuthmeError && error.code === core.ErrorCode.BROWSER_NOT_SUPPORT) {
|
|
27648
|
-
alert(core.getTranslateInstance().translate('
|
|
28982
|
+
alert(core.getTranslateInstance().translate('sdk.general.error.browser.doesntSupportCamera'));
|
|
27649
28983
|
}
|
|
27650
28984
|
throw error;
|
|
27651
28985
|
}
|
|
@@ -27680,13 +29014,20 @@ class AuthmeIdentityVerification extends engine.AuthmeFunctionModule {
|
|
|
27680
29014
|
getCardTypeAndCountry(userConfig) {
|
|
27681
29015
|
var _a, _b;
|
|
27682
29016
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27683
|
-
const defaultCountries = [idRecognition.CountryCode.TWN, idRecognition.CountryCode.
|
|
29017
|
+
const defaultCountries = [idRecognition.CountryCode.TWN, idRecognition.CountryCode.JPN, idRecognition.CountryCode.ZAF, idRecognition.CountryCode.USA, idRecognition.CountryCode.CHN, idRecognition.CountryCode.PHL, idRecognition.CountryCode.GBR, idRecognition.CountryCode.KOR, idRecognition.CountryCode.HKG, idRecognition.CountryCode.FRA, idRecognition.CountryCode.ESP, idRecognition.CountryCode.MEX, idRecognition.CountryCode.ITA, idRecognition.CountryCode.IND, idRecognition.CountryCode.COL, idRecognition.CountryCode.RUS, idRecognition.CountryCode.DEU, idRecognition.CountryCode.TUR, idRecognition.CountryCode.CAN, idRecognition.CountryCode.AUS, idRecognition.CountryCode.IDN, idRecognition.CountryCode.MYS, idRecognition.CountryCode.EGY, idRecognition.CountryCode.SAU, idRecognition.CountryCode.NLD, idRecognition.CountryCode.SGP];
|
|
27684
29018
|
const defaultCountry = userConfig.defaultCountry !== undefined && defaultCountries.includes(userConfig.defaultCountry) ? userConfig.defaultCountry : defaultCountries[0];
|
|
27685
|
-
|
|
27686
|
-
|
|
27687
|
-
|
|
27688
|
-
|
|
29019
|
+
const supportCountries = (_a = userConfig.supportCountries) !== null && _a !== void 0 ? _a : defaultCountries;
|
|
29020
|
+
const supportCardTypes = (_b = userConfig.supportCardTypes) !== null && _b !== void 0 ? _b : Object.values(idRecognition.IdRecognitionCardType).map(x => {
|
|
29021
|
+
return {
|
|
29022
|
+
cardType: x
|
|
29023
|
+
};
|
|
27689
29024
|
});
|
|
29025
|
+
const cardTypeAndCountryConfig = {
|
|
29026
|
+
defaultCountry,
|
|
29027
|
+
supportCountries,
|
|
29028
|
+
supportCardTypes
|
|
29029
|
+
};
|
|
29030
|
+
return renderCardTypeAndCountryConfig(cardTypeAndCountryConfig);
|
|
27690
29031
|
});
|
|
27691
29032
|
}
|
|
27692
29033
|
extraDocument(userConfig = {}) {
|
|
@@ -27718,10 +29059,11 @@ class AuthmeIdentityVerification extends engine.AuthmeFunctionModule {
|
|
|
27718
29059
|
cardSubTypes = config.cardTypes.map(idRecognition.mapCardtypeToAuthmeClass);
|
|
27719
29060
|
} else {
|
|
27720
29061
|
cardSubTypes = idRecognition.getCardSubTypes(config.type, config.country);
|
|
27721
|
-
|
|
27722
|
-
config.cardTypes = defaultCardTypes;
|
|
29062
|
+
cardSubTypes.map(c => idRecognition.twoWayAuthmeCardClassMap.toServer(c));
|
|
29063
|
+
// config.cardTypes = defaultCardTypes;
|
|
29064
|
+
config.cardTypes = idRecognition.getCardTypes(config.type, config.country);
|
|
27723
29065
|
}
|
|
27724
|
-
return config.type === idRecognition.IdRecognitionCardType.Passport ? this.mrzModule.run(config, cardSubTypes) : this.ocrModule.run(config, config.cardTypes);
|
|
29066
|
+
return config.type === idRecognition.IdRecognitionCardType.Passport ? this.mrzModule.run(config, cardSubTypes) : this.ocrModule.run(config, config.cardTypes, config.cardTypeConfigs);
|
|
27725
29067
|
});
|
|
27726
29068
|
}
|
|
27727
29069
|
confirmOCRResult(data) {
|
|
@@ -27773,8 +29115,8 @@ class AuthmeIdentityVerification extends engine.AuthmeFunctionModule {
|
|
|
27773
29115
|
}
|
|
27774
29116
|
|
|
27775
29117
|
var name = "authme/sdk";
|
|
27776
|
-
var version$1 = "2.
|
|
27777
|
-
var date = "
|
|
29118
|
+
var version$1 = "2.7.0";
|
|
29119
|
+
var date = "2024-05-30T14:54:23+0000";
|
|
27778
29120
|
var packageInfo = {
|
|
27779
29121
|
name: name,
|
|
27780
29122
|
version: version$1,
|